#![allow(unused_imports)]
#![allow(unused_variables)]
use websocket_toolkit::connection::WebSocketClient;
use websocket_toolkit::controller::WebSocketController;
use websocket_toolkit::messages::{MessageHandler, MessageFormat};
use websocket_toolkit::reconnection::{ReconnectStrategy, Connectable};
use websocket_toolkit::keep_alive::KeepAlive;
use std::sync::Arc;
use log::{info, error};
use futures_util::{StreamExt, SinkExt}; use tokio_tungstenite::tungstenite::Error;
use async_trait::async_trait;
use tokio::sync::Mutex;
struct MockWebSocketClient;
#[async_trait]
impl Connectable for MockWebSocketClient {
async fn connect(&self) -> Result<(), Error> {
Err(Error::ConnectionClosed) }
}
#[tokio::test]
async fn test_websocket_client_connect() {
let client = MockWebSocketClient;
let result = client.connect().await;
assert!(
result.is_err(),
"Expected WebSocket connection to fail with MockWebSocketClient"
);
}
#[tokio::test]
async fn test_reconnect_strategy() {
let client = Arc::new(MockWebSocketClient);
let reconnect_strategy = ReconnectStrategy::new(3, 2);
let reconnect_result = reconnect_strategy.reconnect(client).await;
assert!(
reconnect_result.is_none(),
"Expected reconnect to stop after max retries with MockWebSocketClient"
);
}
#[tokio::test]
async fn test_websocket_controller_full_lifecycle() {
let mut controller = WebSocketController::new("ws://node_server:9001", 3, Some(5));
let ws_stream = Arc::new(Mutex::new(
controller
.connect()
.await
.expect("Failed to connect to WebSocket server"),
));
let connect_result = controller.connect_and_send_message(b"Hello, WebSocket!").await;
assert!(
connect_result.is_ok(),
"Expected connection to succeed: {:?}",
connect_result.err()
);
let reconnect_result = controller.reconnect_if_needed().await;
assert!(
reconnect_result.is_ok(),
"Expected reconnection to succeed: {:?}",
reconnect_result.err()
);
let maintain_result = controller.maintain_connection(ws_stream.clone()).await;
assert!(
maintain_result.is_ok(),
"Expected maintain connection to succeed: {:?}",
maintain_result.err()
);
}
#[test]
fn test_message_serialization() {
let message = "Hello, WebSocket!";
let serialized = MessageHandler::serialize(&message, MessageFormat::Json).unwrap();
assert!(
!serialized.is_empty(),
"Expected non-empty serialized JSON data"
);
let serialized_cbor = MessageHandler::serialize(&message, MessageFormat::Cbor).unwrap();
assert!(
!serialized_cbor.is_empty(),
"Expected non-empty serialized CBOR data"
);
}
#[test]
fn test_message_deserialization() {
let message = "Hello, WebSocket!";
let serialized_json = MessageHandler::serialize(&message, MessageFormat::Json).unwrap();
match MessageHandler::deserialize::<String>(&serialized_json, MessageFormat::Json) {
Ok(Some(deserialized_json)) => {
assert_eq!(
deserialized_json,
message.to_string(),
"Expected deserialized JSON to match original message"
);
}
Ok(None) => error!("Deserialization returned None, expected Some value"),
Err(e) => error!("Deserialization error: {:?}", e),
}
let serialized_cbor = MessageHandler::serialize(&message, MessageFormat::Cbor).unwrap();
match MessageHandler::deserialize::<String>(&serialized_cbor, MessageFormat::Cbor) {
Ok(Some(deserialized_cbor)) => {
assert_eq!(
deserialized_cbor,
message.to_string(),
"Expected deserialized CBOR to match original message"
);
}
Ok(None) => error!("Deserialization returned None, expected Some value"),
Err(e) => error!("Deserialization error: {:?}", e),
}
}