Skip to main content

lean_ctx/core/context_kernel/
airgap_e2e.rs

1#[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}