#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_demo_engine_creation() {
let engine = DemoEngine::new();
assert!(engine.list_protocols().is_empty());
}
#[tokio::test]
async fn test_context_cache() {
let config = DemoConfig::default();
let mut cache = ContextCache::new(config);
let result = AnalysisResult {
request_id: Uuid::new_v4(),
status: AnalysisStatus::Completed,
started_at: chrono::Utc::now(),
completed_at: Some(chrono::Utc::now()),
duration_ms: Some(1000),
cache_key: "test".to_string(),
path: "/test".to_string(),
context_data: Some(serde_json::json!({"test": "data"})),
error: None,
};
cache.insert("test_key".to_string(), result.clone());
assert!(cache.get("test_key").is_some());
assert_eq!(cache.get("test_key").unwrap().cache_key, "test");
}
#[tokio::test]
async fn test_trace_store() {
let store = TraceStore::new(10);
let trace = ApiTrace {
id: Uuid::new_v4(),
protocol: "test".to_string(),
request_raw: vec![],
request_parsed: serde_json::json!({}),
internal_command: vec!["test".to_string()],
timing: TimingInfo {
request_decode_ns: 1000,
cache_lookup_ns: 500,
analysis_ms: 2000,
response_encode_ns: 300,
total_ms: 3000,
},
response: serde_json::json!({}),
cache_hit: false,
created_at: chrono::Utc::now(),
};
let trace_id = trace.id;
store.add_trace(trace).await;
let retrieved = store.get_trace(trace_id).await;
assert!(retrieved.is_some());
assert_eq!(retrieved.unwrap().protocol, "test");
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod property_tests {
use proptest::prelude::*;
proptest! {
#[test]
fn basic_property_stability(_input in ".*") {
prop_assert!(true);
}
#[test]
fn module_consistency_check(_x in 0u32..1000) {
prop_assert!(_x < 1001);
}
}
}