mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-05 00:47:48 +08:00
test(stats): treat bulk API key snapshots as authoritative
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
use aether_data::repository::auth::{
|
||||
@@ -163,16 +164,18 @@ fn recent_unix_secs(minutes_ago: u64) -> i64 {
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct PartialListAuthApiKeyRepository {
|
||||
struct BulkMissAuthApiKeyRepository {
|
||||
lookup: InMemoryAuthApiKeySnapshotRepository,
|
||||
single_lookup_calls: Arc<AtomicUsize>,
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl AuthApiKeyReadRepository for PartialListAuthApiKeyRepository {
|
||||
impl AuthApiKeyReadRepository for BulkMissAuthApiKeyRepository {
|
||||
async fn find_api_key_snapshot(
|
||||
&self,
|
||||
key: AuthApiKeyLookupKey<'_>,
|
||||
) -> Result<Option<StoredAuthApiKeySnapshot>, aether_data::DataLayerError> {
|
||||
self.single_lookup_calls.fetch_add(1, Ordering::Relaxed);
|
||||
self.lookup.find_api_key_snapshot(key).await
|
||||
}
|
||||
|
||||
@@ -1649,8 +1652,7 @@ async fn gateway_handles_admin_stats_leaderboard_api_keys_locally_without_auth_s
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn gateway_handles_admin_stats_leaderboard_api_keys_with_auth_snapshot_single_lookup_fallback(
|
||||
) {
|
||||
async fn gateway_treats_admin_stats_leaderboard_api_key_bulk_snapshots_as_authoritative() {
|
||||
let (_upstream_url, upstream_hits, upstream_handle) =
|
||||
start_stats_upstream("/api/admin/stats/leaderboard/api-keys").await;
|
||||
|
||||
@@ -1668,11 +1670,13 @@ async fn gateway_handles_admin_stats_leaderboard_api_keys_with_auth_snapshot_sin
|
||||
0.3,
|
||||
DAY_1_UNIX_SECS,
|
||||
)]));
|
||||
let auth_repository = Arc::new(PartialListAuthApiKeyRepository {
|
||||
let single_lookup_calls = Arc::new(AtomicUsize::new(0));
|
||||
let auth_repository = Arc::new(BulkMissAuthApiKeyRepository {
|
||||
lookup: InMemoryAuthApiKeySnapshotRepository::seed(vec![(
|
||||
None,
|
||||
sample_api_key_snapshot("key-1", "user-1", "fresh-key"),
|
||||
)]),
|
||||
single_lookup_calls: Arc::clone(&single_lookup_calls),
|
||||
});
|
||||
|
||||
let data_state = GatewayDataState::with_usage_reader_for_tests(usage_repository)
|
||||
@@ -1686,7 +1690,7 @@ async fn gateway_handles_admin_stats_leaderboard_api_keys_with_auth_snapshot_sin
|
||||
|
||||
let response = admin_request(
|
||||
reqwest::Client::new().get(format!(
|
||||
"{gateway_url}/api/admin/stats/leaderboard/api-keys?start_date=2024-03-21&end_date=2024-03-21&metric=cost&order=desc&tz_offset_minutes=0"
|
||||
"{gateway_url}/api/admin/stats/leaderboard/api-keys?start_date=2024-03-21&end_date=2024-03-21&metric=cost&order=desc&tz_offset_minutes=0&include_inactive=true"
|
||||
)),
|
||||
)
|
||||
.send()
|
||||
@@ -1697,8 +1701,9 @@ async fn gateway_handles_admin_stats_leaderboard_api_keys_with_auth_snapshot_sin
|
||||
let payload: serde_json::Value = response.json().await.expect("json body should parse");
|
||||
assert_eq!(payload["total"], 1);
|
||||
assert_eq!(payload["items"][0]["id"], "key-1");
|
||||
assert_eq!(payload["items"][0]["name"], "fresh-key");
|
||||
assert_eq!(payload["items"][0]["name"], "legacy-key");
|
||||
assert_eq!(payload["items"][0]["value"], 0.3);
|
||||
assert_eq!(single_lookup_calls.load(Ordering::Relaxed), 0);
|
||||
assert_eq!(*upstream_hits.lock().expect("mutex should lock"), 0);
|
||||
|
||||
gateway_handle.abort();
|
||||
|
||||
Reference in New Issue
Block a user