Files

124 lines
3.7 KiB
Plaintext
Raw Permalink Normal View History

//! Integration tests for M8.2 Gateway Queue Adapter
//!
//! Tests the unified queue adapter that routes SQS messages through api.riotpiao.com gateway.
use mem_cli::queue_adapter::{QueueAdapter, QueueMessage};
use mem_cli::gateway_queue_adapter::{GatewayQueueAdapter, StaticTokenProvider};
use std::sync::Arc;
use uuid::Uuid;
#[tokio::test]
async fn test_static_queue_adapter_creation() {
let adapter = GatewayQueueAdapter::with_static_token(
"https://api.riotpiao.com".to_string(),
"test-token-xyz".to_string(),
);
// Verify adapter is created
assert!(adapter.health_check().await.is_err()); // Will fail (no real gateway), but tests flow
}
#[tokio::test]
async fn test_queue_message_serialization() {
let msg = QueueMessage {
message_id: "msg-123".to_string(),
chunk_id: Uuid::new_v4(),
body: "test body".to_string(),
receive_count: 1,
receipt_handle: "handle-xyz".to_string(),
project: "myproject".to_string(),
attributes: std::collections::HashMap::new(),
};
assert_eq!(msg.message_id, "msg-123");
assert_eq!(msg.project, "myproject");
assert_eq!(msg.receive_count, 1);
}
#[test]
fn test_gateway_queue_naming() {
let adapter = GatewayQueueAdapter::with_static_token(
"https://api.riotpiao.com".to_string(),
"test-token".to_string(),
);
assert_eq!(adapter.queue_name("myproject"), "poimen-chunks-myproject");
assert_eq!(adapter.queue_name("prod"), "poimen-chunks-prod");
assert_eq!(adapter.queue_name("test-env"), "poimen-chunks-test-env");
}
#[test]
fn test_queue_adapter_base64_encoding() {
let original = "hello world";
let encoded = base64::encode(original.as_bytes());
let decoded_bytes = base64::decode(encoded.as_bytes()).unwrap();
let decoded = String::from_utf8(decoded_bytes).unwrap();
assert_eq!(decoded, original);
}
#[test]
fn test_json_chunk_message() {
let chunk_data = serde_json::json!({
"chunk_id": Uuid::new_v4(),
"content": "test content",
"source": "obsidian",
"level": "L0",
"breadcrumb": ["root", "section1"],
});
assert_eq!(chunk_data["level"], "L0");
assert_eq!(chunk_data["source"], "obsidian");
}
#[tokio::test]
async fn test_authentik_token_provider_construction() {
use mem_cli::gateway_queue_adapter::AuthentikTokenProvider;
let provider = AuthentikTokenProvider::new(
"https://authentik.riotpiao.com/application/o/poimen-memory/".to_string(),
"client-id".to_string(),
"client-secret".to_string(),
);
// Just test that it constructs (won't actually authenticate without real Authentik)
let _ = provider;
}
#[test]
fn test_queue_stats_structure() {
use mem_cli::queue_adapter::QueueStats;
let stats = QueueStats {
available_messages: 10,
in_flight_messages: 3,
dead_letter_messages: 1,
total_processed: 100,
average_delay_secs: 45,
};
assert_eq!(stats.available_messages, 10);
assert_eq!(stats.in_flight_messages, 3);
assert_eq!(stats.total_processed, 100);
assert!(stats.average_delay_secs > 0);
}
#[test]
fn test_message_attributes_serialization() {
let mut attrs = std::collections::HashMap::new();
attrs.insert("source".to_string(), "obsidian".to_string());
attrs.insert("level".to_string(), "L0".to_string());
let json = serde_json::to_string(&attrs).unwrap();
assert!(json.contains("source"));
assert!(json.contains("obsidian"));
}
#[test]
fn test_breadcrumb_path_encoding() {
let breadcrumb = vec!["root".to_string(), "folder1".to_string(), "section".to_string()];
let json = serde_json::to_string(&breadcrumb).unwrap();
assert_eq!(json, r#"["root","folder1","section"]"#);
}