Skip to main content

oxirs_vec/
rta_tests.rs

1//! Tests for the real-time analytics module.
2
3#[cfg(test)]
4mod tests {
5    use crate::rta_aggregators::ExportFormat;
6    use crate::rta_engine::{AlertSeverity, AlertType, AnalyticsConfig, VectorAnalyticsEngine};
7    use std::time::Duration;
8
9    #[test]
10    fn test_analytics_engine_creation() {
11        let config = AnalyticsConfig::default();
12        let engine = VectorAnalyticsEngine::new(config);
13
14        assert!(engine.config.enable_real_time);
15        assert_eq!(engine.config.collection_interval, 1);
16    }
17
18    #[test]
19    fn test_query_recording() {
20        let config = AnalyticsConfig::default();
21        let engine = VectorAnalyticsEngine::new(config);
22
23        let result = engine.record_query_execution(
24            "test_query_1".to_string(),
25            "similarity_search".to_string(),
26            Duration::from_millis(50),
27            10,
28            true,
29        );
30
31        assert!(result.is_ok());
32
33        let metrics = engine.metrics_collector.query_metrics.read();
34        assert_eq!(metrics.total_queries, 1);
35        assert_eq!(metrics.successful_queries, 1);
36    }
37
38    #[test]
39    fn test_alert_creation() {
40        let config = AnalyticsConfig::default();
41        let engine = VectorAnalyticsEngine::new(config);
42
43        let result = engine.create_alert(
44            AlertType::HighLatency,
45            AlertSeverity::Warning,
46            "Test alert message".to_string(),
47        );
48
49        assert!(result.is_ok());
50
51        let current_alerts = engine.performance_monitor.current_alerts.read();
52        assert_eq!(current_alerts.len(), 1);
53    }
54
55    #[test]
56    fn test_metrics_export() {
57        let config = AnalyticsConfig::default();
58        let engine = VectorAnalyticsEngine::new(config);
59
60        // Record some metrics
61        let _ = engine.record_query_execution(
62            "test".to_string(),
63            "search".to_string(),
64            Duration::from_millis(25),
65            5,
66            true,
67        );
68
69        // Test JSON export
70        let dir = tempfile::tempdir().expect("tempdir");
71        let temp_file = dir.path().join("test_metrics.json");
72        let temp_file = temp_file.display().to_string();
73        let result = engine.export_metrics(ExportFormat::Json, &temp_file);
74        assert!(result.is_ok());
75        // `dir` (TempDir) cleans up automatically on drop.
76    }
77}