diff options
| author | Dawid Rycerz <dawid@rycerz.xyz> | 2026-02-15 21:27:00 +0100 |
|---|---|---|
| committer | Dawid Rycerz <dawid@rycerz.xyz> | 2026-02-15 21:27:00 +0100 |
| commit | ce0dbf6b249956700c6a1705bf4ad85a09d53e8c (patch) | |
| tree | d7c3236807cfbf75d7f3a355eb5df5a5e2cc4ad7 /tests/integration/rate_limit.rs | |
| parent | 064a1d01c5c14f5ecc032fa9b8346a4a88b893f6 (diff) | |
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 <noreply@anthropic.com>
Diffstat (limited to 'tests/integration/rate_limit.rs')
| -rw-r--r-- | tests/integration/rate_limit.rs | 114 |
1 files changed, 0 insertions, 114 deletions
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); -} |
