#[cfg(feature = "websocket")]
mod websocket_integration_tests {
use sdforge::websocket::{AppState, ConnectionManager, RateLimitConfig, WebSocketConfig};
use std::sync::Arc;
#[test]
fn test_websocket_config_default() {
let config = WebSocketConfig::default();
let _cloned = config.clone();
assert!(config.rate_limit.max_connections > 0);
}
#[test]
fn test_connection_manager_new() {
let manager = ConnectionManager::new();
let _ = manager;
}
#[test]
fn test_rate_limit_config_default() {
let config = RateLimitConfig::default();
let _cloned = config.clone();
assert!(config.validate().is_ok());
}
#[test]
fn test_app_state_with_manager() {
let manager = Arc::new(ConnectionManager::new());
let state = AppState::new(manager);
let _state_clone = state.clone();
assert!(state.config.rate_limit.max_messages_per_second > 0);
}
#[test]
fn test_websocket_integration_basic() {
let _config = WebSocketConfig::default();
let manager = Arc::new(ConnectionManager::new());
let state = AppState::new(manager);
assert!(state.config.rate_limit.max_connections > 0);
}
}
#[cfg(feature = "websocket")]
mod websocket_enhanced_integration_tests {
use sdforge::websocket::{ConnectionManager, RateLimitConfig, WebSocketConnection};
use std::sync::Arc;
#[tokio::test]
async fn test_websocket_connection_creation() {
let (conn, _rx) = WebSocketConnection::new("test-conn-1".to_string());
assert_eq!(conn.id(), "test-conn-1");
}
#[tokio::test]
async fn test_connection_manager_multiple_connections() {
let manager = Arc::new(ConnectionManager::new());
for i in 0..3 {
let conn_id = format!("integration-conn-{}", i);
let (conn, _rx) = WebSocketConnection::new(conn_id.clone());
manager.add_connection(conn_id, conn).await;
}
assert_eq!(manager.connection_count().await, 3);
let conn = manager.get_connection("integration-conn-1").await;
assert!(conn.is_some());
assert_eq!(conn.unwrap().id(), "integration-conn-1");
}
#[tokio::test]
async fn test_connection_removal() {
let manager = Arc::new(ConnectionManager::new());
let (conn, _rx) = WebSocketConnection::new("remove-test".to_string());
manager
.add_connection("remove-test".to_string(), conn)
.await;
assert_eq!(manager.connection_count().await, 1);
manager.remove_connection("remove-test").await;
assert_eq!(manager.connection_count().await, 0);
let conn = manager.get_connection("remove-test").await;
assert!(conn.is_none());
}
#[test]
fn test_rate_limit_config_validation() {
let valid_config = RateLimitConfig {
max_connections: 100,
max_messages_per_second: 50,
max_message_size: 1024 * 1024,
rate_limit_window_seconds: 1,
};
assert!(valid_config.validate().is_ok());
let invalid_config = RateLimitConfig {
max_connections: 0,
max_messages_per_second: 50,
max_message_size: 1024 * 1024,
rate_limit_window_seconds: 1,
};
assert!(invalid_config.validate().is_err());
}
}