Skip to main content

perfgate_fake/
lib.rs

1//! Test utilities and fake implementations for perfgate testing.
2//!
3//! This crate provides deterministic, configurable test doubles for the
4//! perfgate adapter traits. Use these in unit tests and integration tests
5//! to avoid I/O and ensure reproducible test results.
6//!
7//! Part of the [perfgate](https://github.com/EffortlessMetrics/perfgate) workspace.
8//!
9//! # Available Fakes
10//!
11//! - [`FakeProcessRunner`] - Configurable process runner for testing
12//! - [`FakeHostProbe`] - Configurable host probe for testing
13//! - [`FakeClock`] - Configurable clock for time-based testing
14//! - [`MockProcessBuilder`] - Builder pattern for creating mock process results
15//!
16//! # Example
17//!
18//! ```
19//! use perfgate_fake::{FakeProcessRunner, MockProcessBuilder};
20//! use perfgate_adapters::{ProcessRunner, CommandSpec, RunResult};
21//!
22//! let runner = FakeProcessRunner::new();
23//!
24//! // Configure a result using the builder
25//! let result = MockProcessBuilder::new()
26//!     .exit_code(0)
27//!     .wall_ms(100)
28//!     .stdout(b"hello world".to_vec())
29//!     .build();
30//!
31//! runner.set_result(&["echo", "hello"], result);
32//!
33//! // Now when we run the command, we get our configured result
34//! let spec = CommandSpec {
35//!     name: "echo test".to_string(),
36//!     argv: vec!["echo".to_string(), "hello".to_string()],
37//!     cwd: None,
38//!     env: vec![],
39//!     timeout: None,
40//!     output_cap_bytes: 1024,
41//! };
42//!
43//! let output = runner.run(&spec).unwrap();
44//! assert_eq!(output.exit_code, 0);
45//! assert_eq!(output.wall_ms, 100);
46//! ```
47
48mod builder;
49mod clock;
50mod host_probe;
51mod process_runner;
52
53pub use builder::MockProcessBuilder;
54pub use clock::FakeClock;
55pub use host_probe::FakeHostProbe;
56pub use process_runner::FakeProcessRunner;
57
58pub use perfgate_adapters::{
59    AdapterError, CommandSpec, HostProbeOptions, ProcessRunner, RunResult,
60};