feat(server): stats globais e rate limit por peer
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
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::<serde_json::Value>();
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user