mirror of https://github.com/jackwener/wx-cli.git
test: Added 3 integration tests (round-trip, connection refused, livene…
- src/cli/transport.rs GSD context: - Milestone: M001 - TCP Transport - Slice: S03 - Task: T01 - Added 3 integration tests (round-trip, connection refused, liveness check) exercising send_tcp() and is_alive_tcp() against a mock TCP server GSD-Task: S03/T01pull/43/head
parent
57ad8f127f
commit
ee54abdc37
|
|
@ -325,3 +325,67 @@ fn send_windows(req: Request) -> Result<Response> {
|
|||
|
||||
Ok(resp)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod integration_tests {
|
||||
use super::*;
|
||||
use crate::ipc::{Request, Response};
|
||||
use serde_json::json;
|
||||
use std::net::SocketAddr;
|
||||
use tokio::io::{AsyncBufReadExt, AsyncWriteExt};
|
||||
use tokio::net::TcpListener;
|
||||
|
||||
/// Spawn a mock TCP server that responds to one request with the given JSON data.
|
||||
/// Returns the bound address (with the actual random port).
|
||||
async fn spawn_mock_server(response_body: serde_json::Value) -> SocketAddr {
|
||||
let listener = TcpListener::bind("127.0.0.1:0").await.unwrap();
|
||||
let addr = listener.local_addr().unwrap();
|
||||
|
||||
tokio::spawn(async move {
|
||||
let (stream, _) = listener.accept().await.unwrap();
|
||||
let (reader, mut writer) = stream.into_split();
|
||||
|
||||
// Read one line (the request)
|
||||
let mut buf_reader = tokio::io::BufReader::new(reader);
|
||||
let mut line = String::new();
|
||||
buf_reader.read_line(&mut line).await.unwrap();
|
||||
|
||||
// Write response as a JSON line
|
||||
let resp = Response {
|
||||
ok: true,
|
||||
error: None,
|
||||
data: response_body,
|
||||
};
|
||||
let resp_str = serde_json::to_string(&resp).unwrap() + "\n";
|
||||
writer.write_all(resp_str.as_bytes()).await.unwrap();
|
||||
writer.shutdown().await.unwrap();
|
||||
});
|
||||
|
||||
addr
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn test_send_tcp_round_trip() {
|
||||
let addr = spawn_mock_server(json!({
|
||||
"sessions": [{"name": "test"}]
|
||||
}))
|
||||
.await;
|
||||
|
||||
let resp = send_tcp(Request::Sessions { limit: 20 }, &addr.to_string()).unwrap();
|
||||
assert!(resp.ok, "Response should be ok");
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn test_send_tcp_connection_refused() {
|
||||
// Port 59876 is very unlikely to have a listener
|
||||
let result = send_tcp(Request::Sessions { limit: 20 }, "127.0.0.1:59876");
|
||||
assert!(result.is_err(), "Expected connection refused error");
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn test_is_alive_tcp_false() {
|
||||
// Port 59877 is very unlikely to have a listener
|
||||
let result = is_alive_tcp("127.0.0.1:59877");
|
||||
assert!(!result, "Expected is_alive_tcp to return false for unused port");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue