summaryrefslogtreecommitdiff
path: root/tests/authorization/server_test.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/authorization/server_test.rs')
-rw-r--r--tests/authorization/server_test.rs59
1 files changed, 56 insertions, 3 deletions
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<Channel> {
+ 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();
}
}