mod common; use common::{announce_test_file, test_server}; #[tokio::test] async fn stats_reflects_files() { let server = test_server(); announce_test_file(&server, "a.ogg", "audio", &"a1".repeat(32)).await; announce_test_file(&server, "b.ogg", "audio", &"a2".repeat(32)).await; announce_test_file(&server, "c.pdf", "document", &"a3".repeat(32)).await; let res = server.get("/api/v1/stats").await; assert_eq!(res.status_code(), 200); let body = res.json::(); assert_eq!(body["files"], 3); assert_eq!(body["total_bytes"], 300); } #[tokio::test] async fn announce_rate_limited() { let server = test_server(); // 10 por segundo no RateLimiter padrĂ£o; dispara 12 let mut last_status = axum::http::StatusCode::OK; for i in 0..12 { let res = server.post("/api/v1/announce") .json(&serde_json::json!({ "peer_id": "ral", "name": format!("f{i}.ogg"), "description": "", "type": "audio", "extension": "ogg", "size_bytes": 10, "hash": format!("{:02x}", i).repeat(32), "license": "authored" })) .await; last_status = res.status_code(); } assert_eq!(last_status, axum::http::StatusCode::BAD_REQUEST); }