summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-06-19 11:40:27 -0600
committermo khan <mo@mokhan.ca>2025-06-19 11:40:27 -0600
commitf08ef97f4894fde8feff08bb91bed1e1c1105b83 (patch)
treefad101bae3ff8a1a9d7e2d312425c7fc89a08203 /tests
parent594abe311e4dfbbcc477474561756bc5e5f0e539 (diff)
test: add tests
Diffstat (limited to 'tests')
-rw-r--r--tests/common/mod.rs35
-rw-r--r--tests/integration_tests.rs50
2 files changed, 85 insertions, 0 deletions
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<String, String>) -> Request<CheckRequest> {
+ 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<String, String> {
+ 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());
+ }
+ }
+}