#![allow(
clippy::unwrap_used,
clippy::panic,
clippy::todo,
clippy::missing_panics_doc,
clippy::must_use_candidate,
missing_debug_implementations,
clippy::cast_precision_loss,
clippy::clone_on_ref_ptr,
clippy::match_same_arms,
clippy::items_after_statements,
unreachable_pub,
clippy::print_stdout,
clippy::similar_names
)]
use obscura_server::adapters::database::message_repo::MessageRepository;
use reqwest::StatusCode;
mod common;
#[tokio::test]
async fn test_message_limit_fifo() {
let app = common::TestApp::spawn().await;
sqlx::query("DELETE FROM messages").execute(&app.pool).await.unwrap();
let user_a = app.register_user(&common::generate_username("alice")).await;
let user_b = app.register_user(&common::generate_username("bob")).await;
for i in 0..1005 {
let payload = format!("msg_{i}").into_bytes();
app.send_message(&user_a.token, user_b.device_id, &payload).await;
}
let repo = MessageRepository::new();
let mut conn = app.pool.acquire().await.unwrap();
repo.delete_global_overflow(&mut conn, 1000).await.expect("Failed to run cleanup");
let mut ws = app.connect_ws(&user_b.token).await;
if let Some(env) = ws.receive_envelope().await {
let content = env.message;
assert_eq!(content, b"msg_5", "First message should be msg_5 (0-4 should have been pruned)");
} else {
panic!("No messages received");
}
}
#[tokio::test]
async fn test_rate_limiting() {
let mut config = common::get_test_config();
config.rate_limit.per_second = 1;
config.rate_limit.burst = 1;
let app = common::TestApp::spawn_with_config(config).await;
let resp1 = app
.client
.get(format!("{}/v1/gateway?token=bad", app.server_url)) .send()
.await
.unwrap();
assert_ne!(resp1.status(), StatusCode::TOO_MANY_REQUESTS);
let resp2 = app.client.get(format!("{}/v1/gateway?token=bad", app.server_url)).send().await.unwrap();
assert_eq!(resp2.status(), StatusCode::TOO_MANY_REQUESTS);
}