124 lines
3.7 KiB
Rust
124 lines
3.7 KiB
Rust
//! 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"]"#);
|
||
|
|
}
|