From f2e1cc278bedb63ba0b0b8d9a82e28f0e10fe048 Mon Sep 17 00:00:00 2001 From: mo khan Date: Fri, 27 Jun 2025 14:52:38 -0600 Subject: test: merge server tests --- tests/authorization/server_test.rs | 59 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 3 deletions(-) (limited to 'tests/authorization/server_test.rs') diff --git a/tests/authorization/server_test.rs b/tests/authorization/server_test.rs index 6001e978..5e99fdac 100644 --- a/tests/authorization/server_test.rs +++ b/tests/authorization/server_test.rs @@ -1,7 +1,60 @@ #[cfg(test)] mod tests { - #[test] - fn test_create_server() { - assert!(authzd::create_server().is_ok()); + use std::net::SocketAddr; + use tokio::net::TcpListener; + use tonic::transport::Channel; + + async fn available_port() -> SocketAddr { + let listener = TcpListener::bind("127.0.0.1:0") + .await + .expect("Failed to bind to random port"); + let addr = listener.local_addr().expect("Failed to get local address"); + drop(listener); + addr + } + + async fn start_server() -> (SocketAddr, tokio::task::JoinHandle<()>) { + let addr = available_port().await; + let server = authzd::create_server().expect("Failed to create server"); + + let handle = tokio::spawn(async move { + server.serve(addr).await.expect("Failed to start server"); + }); + + tokio::time::sleep(tokio::time::Duration::from_millis(100)).await; + + (addr, handle) + } + + async fn build_channel(addr: SocketAddr) -> Channel { + Channel::from_shared(format!("http://{}", addr)) + .expect("Failed to create channel") + .connect() + .await + .expect("Failed to connect to server") + } + + async fn build_client( + addr: SocketAddr, + ) -> tonic_health::pb::health_client::HealthClient { + tonic_health::pb::health_client::HealthClient::new(build_channel(addr).await) + } + + #[tokio::test] + async fn test_health_check_service() { + let (addr, server) = start_server().await; + let mut client = build_client(addr).await; + let request = tonic::Request::new(tonic_health::pb::HealthCheckRequest { + service: String::new(), + }); + + let response = client.check(request).await; + assert!(response.is_ok()); + assert_eq!( + response.unwrap().into_inner().status(), + tonic_health::pb::health_check_response::ServingStatus::Serving + ); + + server.abort(); } } -- cgit v1.2.3