lean_ctx/core/context_kernel/
airgap_e2e.rs1#[cfg(test)]
2mod tests {
3 use crate::core::context_kernel::{
4 adaptive_bridge, ctx_read_dedup, envelope_wiring, evidence_hook, evidence_wiring, health,
5 kernel_config, response_evidence, startup,
6 };
7 use crate::tools::search_kernel;
8
9 fn isolated() -> std::sync::MutexGuard<'static, ()> {
10 let guard = kernel_config::KERNEL_TEST_LOCK
11 .lock()
12 .unwrap_or_else(std::sync::PoisonError::into_inner);
13 kernel_config::reset_features();
14 crate::core::context_kernel::dedup_wiring::reset_dedup();
15 crate::core::context_kernel::schema_wiring::reset_schema_state();
16 envelope_wiring::reset_evidence();
17 crate::core::context_kernel::proxy_bridge::reset_state();
18 crate::core::context_kernel::mcp_bridge::reset_mcp_state();
19 evidence_wiring::reset();
20 adaptive_bridge::reset();
21 search_kernel::reset();
22 crate::core::context_kernel::usage_normalizer::reset_usage();
23 crate::core::context_kernel::receipt_chain::reset_chain();
24 response_evidence::reset();
25 crate::tools::search_hook::reset();
26 crate::core::context_kernel::adaptive_hook::reset();
27 startup::reset();
28 guard
29 }
30
31 #[test]
32 fn kernel_init_offline() {
33 let _guard = isolated();
34 startup::initialize();
35 assert!(startup::is_initialized());
36 }
37
38 #[test]
39 fn dedup_works_offline() {
40 let _guard = isolated();
41 assert!(ctx_read_dedup::try_dedup("offline.rs", "local content").is_none());
42 assert!(ctx_read_dedup::try_dedup("offline.rs", "local content").is_some());
43 }
44
45 #[test]
46 fn search_evidence_offline() {
47 let _guard = isolated();
48 search_kernel::record_search("offline query", 3, 21);
49 let summary = search_kernel::search_summary();
50 assert_eq!(summary.total_searches, 1);
51 assert_eq!(summary.unique_queries, 1);
52 assert_eq!(summary.total_tokens, 21);
53 }
54
55 #[test]
56 fn evidence_recording_offline() {
57 let _guard = isolated();
58 evidence_hook::record_tool_call("ctx_read", 13, 5);
59 let report = evidence_hook::evidence_report();
60 assert_eq!(report.tool_calls, 1);
61 assert_eq!(report.total_input_tokens, 13);
62 assert_eq!(report.total_output_tokens, 5);
63 }
64
65 #[test]
66 fn health_report_offline() {
67 let _guard = isolated();
68 startup::initialize();
69 let report = health::kernel_health();
70 assert!(report.initialized);
71 assert!(report.kernel_enabled);
72 assert!(report.subsystem_count > 0);
73 assert!(health::is_healthy());
74 assert!(health::format_health().contains("Kernel: ON"));
75 }
76
77 #[test]
78 fn adaptive_bridge_offline() {
79 let _guard = isolated();
80 adaptive_bridge::update_bounce_signal(0.5);
81 let summary = adaptive_bridge::adaptive_summary();
82 assert_eq!(summary.signals_received, 1);
83 assert_eq!(
84 adaptive_bridge::compression_advice(summary.current_bounce_rate),
85 adaptive_bridge::KernelCompressionAdvice::Reduce
86 );
87 }
88
89 #[test]
90 fn config_loads_defaults() {
91 let _guard = isolated();
92 let features = kernel_config::features();
93 assert!(features.enabled);
94 assert!(features.content_dedup);
95 assert!(features.schema_optimization);
96 assert_eq!(features.max_kernel_budget, 150);
97 assert_eq!(features.dedup_capacity, 1024);
98 }
99
100 #[test]
101 fn envelope_wiring_offline() {
102 let _guard = isolated();
103 evidence_wiring::record_from_tool_dispatch("ctx_search", 17, 7, 10);
104 let summary = evidence_wiring::dispatch_summary();
105 assert_eq!(summary.tool_dispatches, 1);
106 assert_eq!(summary.total_input_tokens, 17);
107 assert_eq!(summary.total_output_tokens, 7);
108 assert_eq!(summary.total_tokens_saved, 10);
109 }
110
111 #[test]
112 fn response_evidence_offline() {
113 let _guard = isolated();
114 response_evidence::record_response("ctx_read", 8, true);
115 let summary = response_evidence::response_summary();
116 assert_eq!(summary.total_responses, 1);
117 assert_eq!(summary.total_output_tokens, 8);
118 assert_eq!(summary.cached_responses, 1);
119 assert_eq!(summary.cache_hit_rate, 1.0);
120 }
121}