From ce0dbf6b249956700c6a1705bf4ad85a09d53e8c Mon Sep 17 00:00:00 2001 From: Dawid Rycerz Date: Sun, 15 Feb 2026 21:27:00 +0100 Subject: feat: witryna 0.2.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switch, cleanup, and status CLI commands. Persistent build state via state.json. Post-deploy hooks on success and failure with WITRYNA_BUILD_STATUS. Dependency diet (axum→tiny_http, clap→argh, tracing→log). Drop built-in rate limiting. Nix flake with NixOS module. Arch Linux PKGBUILD. Centralized version management. Co-Authored-By: Claude Opus 4.6 --- tests/integration/rate_limit.rs | 114 ---------------------------------------- 1 file changed, 114 deletions(-) delete mode 100644 tests/integration/rate_limit.rs (limited to 'tests/integration/rate_limit.rs') diff --git a/tests/integration/rate_limit.rs b/tests/integration/rate_limit.rs deleted file mode 100644 index 81378a2..0000000 --- a/tests/integration/rate_limit.rs +++ /dev/null @@ -1,114 +0,0 @@ -use crate::harness::{SiteBuilder, TestServer, test_config_with_site, test_config_with_sites}; - -#[tokio::test] -async fn rate_limit_exceeded_returns_429() { - let dir = tempfile::tempdir().unwrap().keep(); - let site = SiteBuilder::new("my-site", "https://example.com/repo.git", "secret-token").build(); - let config = test_config_with_site(dir, site); - - // Rate limit of 2 per minute - let server = TestServer::start_with_rate_limit(config, 2).await; - - // First request — accepted (or 202) - let resp1 = TestServer::client() - .post(server.url("/my-site")) - .header("Authorization", "Bearer secret-token") - .send() - .await - .unwrap(); - let status1 = resp1.status().as_u16(); - assert!( - status1 == 202 || status1 == 409, - "expected 202 or 409, got {status1}" - ); - - // Second request - let resp2 = TestServer::client() - .post(server.url("/my-site")) - .header("Authorization", "Bearer secret-token") - .send() - .await - .unwrap(); - let status2 = resp2.status().as_u16(); - assert!( - status2 == 202 || status2 == 409, - "expected 202 or 409, got {status2}" - ); - - // Third request should hit rate limit - let resp3 = TestServer::client() - .post(server.url("/my-site")) - .header("Authorization", "Bearer secret-token") - .send() - .await - .unwrap(); - assert_eq!(resp3.status().as_u16(), 429); - let body = resp3.text().await.unwrap(); - let json: serde_json::Value = serde_json::from_str(&body).unwrap(); - assert_eq!(json["error"], "rate_limit_exceeded"); -} - -#[tokio::test] -async fn rate_limit_different_tokens_independent() { - let dir = tempfile::tempdir().unwrap().keep(); - let sites = vec![ - SiteBuilder::new("site-one", "https://example.com/one.git", "token-one").build(), - SiteBuilder::new("site-two", "https://example.com/two.git", "token-two").build(), - ]; - let config = test_config_with_sites(dir, sites); - - // Rate limit of 1 per minute - let server = TestServer::start_with_rate_limit(config, 1).await; - - // token-one: first request succeeds - let resp1 = TestServer::client() - .post(server.url("/site-one")) - .header("Authorization", "Bearer token-one") - .send() - .await - .unwrap(); - assert_eq!(resp1.status().as_u16(), 202); - - // token-one: second request hits rate limit - let resp2 = TestServer::client() - .post(server.url("/site-one")) - .header("Authorization", "Bearer token-one") - .send() - .await - .unwrap(); - assert_eq!(resp2.status().as_u16(), 429); - - // token-two: still has its own budget - let resp3 = TestServer::client() - .post(server.url("/site-two")) - .header("Authorization", "Bearer token-two") - .send() - .await - .unwrap(); - assert_eq!(resp3.status().as_u16(), 202); -} - -#[tokio::test] -async fn rate_limit_checked_after_auth() { - let dir = tempfile::tempdir().unwrap().keep(); - let site = SiteBuilder::new("my-site", "https://example.com/repo.git", "secret-token").build(); - let config = test_config_with_site(dir, site); - let server = TestServer::start_with_rate_limit(config, 1).await; - - // Exhaust rate limit - let _ = TestServer::client() - .post(server.url("/my-site")) - .header("Authorization", "Bearer secret-token") - .send() - .await - .unwrap(); - - // Wrong token should get 401, not 429 - let resp = TestServer::client() - .post(server.url("/my-site")) - .header("Authorization", "Bearer wrong-token") - .send() - .await - .unwrap(); - assert_eq!(resp.status().as_u16(), 401); -} -- cgit v1.2.3