lean_ctx/core/context_kernel/
integration_e2e.rs1#[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 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}