simple_test/
simple_test.rs1use clnrm_core::{CleanroomEnvironment, CleanroomError};
12use std::time::Instant;
13
14#[tokio::main]
15async fn main() -> Result<(), CleanroomError> {
16 println!("š Framework Self-Test: Hermetic Isolation");
17 println!("=========================================");
18 println!("Testing that Cleanroom provides true hermetic isolation");
19 println!("as documented in the README.\n");
20
21 println!("š Test 1: Multiple Isolated Environments");
23 println!("---------------------------------------");
24
25 let env1 = CleanroomEnvironment::new().await?;
26 let env2 = CleanroomEnvironment::new().await?;
27
28 println!("ā
Created two separate Cleanroom environments");
29 println!(" Environment 1 ID: {}", env1.session_id());
30 println!(" Environment 2 ID: {}", env2.session_id());
31
32 println!("\nš Test 2: Environment Isolation Verification");
34 println!("------------------------------------------");
35
36 let container1 = env1.get_or_create_container("test-container-1", || {
38 Ok::<String, CleanroomError>("environment-1-container".to_string())
39 }).await?;
40
41 let container2 = env2.get_or_create_container("test-container-2", || {
42 Ok::<String, CleanroomError>("environment-2-container".to_string())
43 }).await?;
44
45 println!("ā
Created containers in separate environments");
46 println!(" Env1 Container: {}", container1);
47 println!(" Env2 Container: {}", container2);
48
49 println!("\nš Test 3: State Isolation Test");
51 println!("------------------------------");
52
53 let metrics1 = env1.get_metrics().await?;
55 let metrics2 = env2.get_metrics().await?;
56
57 println!("š Environment 1 Metrics:");
58 println!(" Containers Created: {}", metrics1.containers_created);
59 println!(" Containers Reused: {}", metrics1.containers_reused);
60
61 println!("\nš Environment 2 Metrics:");
62 println!(" Containers Created: {}", metrics2.containers_created);
63 println!(" Containers Reused: {}", metrics2.containers_reused);
64
65 if metrics1.containers_created != metrics2.containers_created {
66 println!("ā
SUCCESS: Environments have separate metrics/state");
67 } else {
68 println!("ā FAILURE: Environments are sharing state");
69 return Err(CleanroomError::internal_error("Environment isolation failed"));
70 }
71
72 println!("\nš Test 4: Concurrent Execution Isolation");
74 println!("---------------------------------------");
75
76 let start = Instant::now();
77
78 let (result1, result2) = tokio::join!(
80 run_isolation_test(&env1, "Test A"),
81 run_isolation_test(&env2, "Test B")
82 );
83
84 let duration = start.elapsed();
85
86 println!("\nā±ļø Concurrent execution completed in {}ms", duration.as_millis());
87
88 match (result1, result2) {
89 (Ok(msg1), Ok(msg2)) => {
90 println!("ā
Both tests completed successfully:");
91 println!(" Test A: {}", msg1);
92 println!(" Test B: {}", msg2);
93 }
94 _ => {
95 println!("ā One or both tests failed");
96 return Err(CleanroomError::internal_error("Concurrent isolation test failed"));
97 }
98 }
99
100 println!("\nš Test 5: Session ID Isolation");
102 println!("------------------------------");
103
104 if env1.session_id() != env2.session_id() {
105 println!("ā
SUCCESS: Each environment has unique session ID");
106 println!(" Session isolation prevents cross-contamination");
107 } else {
108 println!("ā FAILURE: Environments share session ID");
109 return Err(CleanroomError::internal_error("Session isolation failed"));
110 }
111
112 println!("\nš Test 6: Hermetic Execution Validation");
114 println!("-------------------------------------");
115
116 println!("š Final Environment States:");
117 println!(" Environment 1 - Session ID: {}", env1.session_id());
118 println!(" Environment 2 - Session ID: {}", env2.session_id());
119
120 if env1.session_id() != env2.session_id() {
121 println!("ā
SUCCESS: Both environments have unique session IDs");
122 println!(" Demonstrates hermetic isolation in concurrent scenarios");
123 } else {
124 println!("ā FAILURE: Environment isolation not working correctly");
125 return Err(CleanroomError::internal_error("Hermetic isolation validation failed"));
126 }
127
128 println!("\nš ALL ISOLATION TESTS PASSED!");
129 println!("The Cleanroom framework successfully demonstrates:");
130 println!(" ā
Complete environment isolation");
131 println!(" ā
Independent session management");
132 println!(" ā
Hermetic execution in concurrent scenarios");
133 println!(" ā
Framework self-testing capability");
134 println!(" ā
Real isolation validation (not theoretical)");
135
136 Ok(())
137}
138
139async fn run_isolation_test(env: &CleanroomEnvironment, test_name: &str) -> Result<String, CleanroomError> {
141 let container_id = env.get_or_create_container(&format!("isolation-container-{}", test_name), || {
146 Ok::<String, CleanroomError>(format!("{}-specific-container", test_name))
147 }).await?;
148
149 let result = env.execute_test(&format!("isolation_test_{}", test_name.to_lowercase()), || {
151 Ok::<String, CleanroomError>(format!("{} container: {}", test_name, container_id))
153 }).await?;
154
155 Ok(result)
156}