Skip to main content

lean_ctx/core/context_kernel/
integration_e2e.rs

1#[cfg(test)]
2mod tests {
3    use std::sync::MutexGuard;
4
5    use super::super::{
6        adaptive_bridge, ctx_read_dedup, dedup_wiring, envelope_wiring, evidence_wiring, health,
7        kernel_config, list_tools_opt, startup,
8    };
9    use crate::tools::search_kernel;
10
11    fn isolated() -> MutexGuard<'static, ()> {
12        let guard = kernel_config::KERNEL_TEST_LOCK
13            .lock()
14            .unwrap_or_else(std::sync::PoisonError::into_inner);
15        kernel_config::reset_features();
16        dedup_wiring::reset_dedup();
17        super::super::schema_wiring::reset_schema_state();
18        envelope_wiring::reset_evidence();
19        super::super::proxy_bridge::reset_state();
20        super::super::mcp_bridge::reset_mcp_state();
21        startup::reset();
22        ctx_read_dedup::reset();
23        list_tools_opt::reset();
24        evidence_wiring::reset();
25        adaptive_bridge::reset();
26        search_kernel::reset();
27        super::super::usage_normalizer::reset_usage();
28        super::super::receipt_chain::reset_chain();
29        guard
30    }
31
32    fn tools(count: usize) -> Vec<(String, String, usize)> {
33        (0..count)
34            .map(|index| (format!("tool_{index}"), "description that is very detailed and thorough and explains every aspect of the tool functionality ".repeat(50), 3))
35            .collect()
36    }
37
38    #[test]
39    fn full_wiring_lifecycle() {
40        let _guard = isolated();
41        startup::initialize();
42
43        assert_eq!(ctx_read_dedup::try_dedup("a.rs", "alpha"), None);
44        assert_eq!(ctx_read_dedup::try_dedup("b.rs", "beta"), None);
45        assert!(ctx_read_dedup::try_dedup("a.rs", "alpha").is_some());
46        assert!(ctx_read_dedup::try_dedup("b.rs", "beta").is_some());
47        let _ = list_tools_opt::optimize_descriptions(tools(10), "cursor");
48        for index in 0..3 {
49            evidence_wiring::record_from_tool_dispatch(&format!("tool_{index}"), 100, 40, 60);
50        }
51        for _ in 0..2 {
52            evidence_wiring::record_from_proxy_dispatch(
53                200,
54                80,
55                120,
56                Some("gpt-5"),
57                Some("openai"),
58            );
59        }
60
61        let report = health::kernel_health();
62        assert!(report.initialized);
63        assert!(report.evidence_total_envelopes >= 5);
64        assert!(dedup_wiring::dedup_stats().cache_hits >= 1);
65    }
66
67    #[test]
68    fn evidence_records_all_sources() {
69        let _guard = isolated();
70        for index in 0..3 {
71            evidence_wiring::record_from_tool_dispatch(&format!("tool_{index}"), 100, 40, 60);
72        }
73        for _ in 0..2 {
74            evidence_wiring::record_from_proxy_dispatch(200, 80, 120, None, None);
75        }
76        search_kernel::record_search("query1", 10, 500);
77        search_kernel::record_search("query2", 8, 400);
78
79        let dispatch = evidence_wiring::dispatch_summary();
80        assert_eq!(dispatch.tool_dispatches, 3);
81        assert_eq!(dispatch.proxy_dispatches, 2);
82        assert_eq!(search_kernel::search_summary().total_searches, 2);
83    }
84
85    #[test]
86    fn adaptive_responds_to_bounce_rate() {
87        let _guard = isolated();
88        adaptive_bridge::update_bounce_signal(0.5);
89        assert_eq!(
90            adaptive_bridge::compression_advice(0.5),
91            adaptive_bridge::KernelCompressionAdvice::Reduce
92        );
93        adaptive_bridge::update_bounce_signal(0.01);
94        assert_eq!(
95            adaptive_bridge::compression_advice(0.01),
96            adaptive_bridge::KernelCompressionAdvice::Increase
97        );
98    }
99
100    #[test]
101    fn health_report_comprehensive() {
102        let _guard = isolated();
103        startup::initialize();
104        assert_eq!(ctx_read_dedup::try_dedup("health.rs", "content"), None);
105        assert!(ctx_read_dedup::try_dedup("health.rs", "content").is_some());
106        let _ = list_tools_opt::optimize_descriptions(tools(10), "cursor");
107        evidence_wiring::record_from_tool_dispatch("ctx_read", 100, 40, 60);
108
109        let report = health::kernel_health();
110        assert!(report.kernel_enabled);
111        assert!(report.initialized);
112        assert!(report.evidence_total_envelopes > 0);
113        assert!(report.dedup_total_checks >= 2);
114        assert!(report.dedup_hit_rate > 0.0);
115        assert!(report.schema_optimizations > 0);
116        assert!(report.schema_tokens_saved > 0);
117        assert!(report.evidence_chain_entries > 0);
118        assert!(!report.config_source.is_empty());
119        assert!(report.subsystem_count >= 6);
120        assert!(health::is_healthy());
121    }
122
123    #[test]
124    fn disabled_kernel_safe() {
125        let _guard = isolated();
126        startup::initialize();
127        let features = kernel_config::KernelFeatures {
128            enabled: false,
129            ..kernel_config::KernelFeatures::default()
130        };
131        kernel_config::update_features(features);
132        let original = tools(10);
133
134        // Initialize first (loads config), then disable kernel.
135        assert_eq!(ctx_read_dedup::try_dedup("disabled.rs", "content"), None);
136        assert_eq!(
137            list_tools_opt::optimize_descriptions(original.clone(), "cursor"),
138            original
139        );
140        evidence_wiring::record_from_tool_dispatch("ctx_read", 100, 40, 60);
141        evidence_wiring::record_from_proxy_dispatch(200, 80, 120, None, None);
142        search_kernel::record_search("disabled", 10, 500);
143
144        assert_eq!(
145            super::super::evidence_hook::evidence_report(),
146            super::super::evidence_hook::EvidenceReport::default()
147        );
148        assert_eq!(search_kernel::search_summary().total_searches, 0);
149        assert_eq!(
150            adaptive_bridge::compression_advice(0.5),
151            adaptive_bridge::KernelCompressionAdvice::Maintain
152        );
153        assert!(!health::kernel_health().kernel_enabled);
154    }
155
156    #[test]
157    fn search_dedup_detects_repeats() {
158        let _guard = isolated();
159        search_kernel::record_search("query1", 10, 500);
160        search_kernel::record_search("query1", 10, 500);
161
162        assert!(search_kernel::is_repeated_query("query1"));
163        assert!(!search_kernel::is_repeated_query("query2"));
164    }
165}