From f08ef97f4894fde8feff08bb91bed1e1c1105b83 Mon Sep 17 00:00:00 2001 From: mo khan Date: Thu, 19 Jun 2025 11:40:27 -0600 Subject: test: add tests --- tests/common/mod.rs | 35 ++++++++++++++++++++++++++++++++ tests/integration_tests.rs | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 tests/common/mod.rs create mode 100644 tests/integration_tests.rs (limited to 'tests') diff --git a/tests/common/mod.rs b/tests/common/mod.rs new file mode 100644 index 00000000..e2137146 --- /dev/null +++ b/tests/common/mod.rs @@ -0,0 +1,35 @@ +use envoy_types::ext_authz::v3::pb::CheckRequest; +use std::collections::HashMap; +use tonic::Request; + +pub fn create_test_request_with_headers(headers: HashMap) -> Request { + use envoy_types::pb::envoy::service::auth::v3::{AttributeContext, attribute_context}; + + let http_request = attribute_context::HttpRequest { + headers, + ..Default::default() + }; + + let request_context = attribute_context::Request { + http: Some(http_request), + ..Default::default() + }; + + let attributes = AttributeContext { + request: Some(request_context), + ..Default::default() + }; + + let check_request = CheckRequest { + attributes: Some(attributes), + ..Default::default() + }; + + Request::new(check_request) +} + +pub fn create_headers_with_auth(auth_value: &str) -> HashMap { + let mut headers = HashMap::new(); + headers.insert("authorization".to_string(), auth_value.to_string()); + headers +} diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs new file mode 100644 index 00000000..28cdf959 --- /dev/null +++ b/tests/integration_tests.rs @@ -0,0 +1,50 @@ +use authzd::PolicyServer; +use envoy_types::ext_authz::v3::pb::Authorization; + +mod common; + +#[tokio::test] +async fn test_success_response() { + let server = PolicyServer::default(); + + let headers = common::create_headers_with_auth("Bearer valid-token"); + let request = common::create_test_request_with_headers(headers); + + let response = server.check(request).await; + assert!(response.is_ok()); + + let check_response = response.unwrap().into_inner(); + assert!(check_response.status.is_some()); + + let status = check_response.status.unwrap(); + assert_eq!(status.code, tonic::Code::Ok.into()); +} + +#[tokio::test] +async fn test_multiple() { + let server = PolicyServer::default(); + + let test_cases = vec![ + ("Bearer valid-token", true), + ("Bearer invalid-token", false), + ("Basic valid-token", false), + ("", false), + ]; + + for (auth_value, should_succeed) in test_cases { + let headers = common::create_headers_with_auth(auth_value); + let request = common::create_test_request_with_headers(headers); + + let response = server.check(request).await; + assert!(response.is_ok()); + + let check_response = response.unwrap().into_inner(); + let status = check_response.status.unwrap(); + + if should_succeed { + assert_eq!(status.code, tonic::Code::Ok.into()); + } else { + assert_eq!(status.code, tonic::Code::Unauthenticated.into()); + } + } +} -- cgit v1.2.3