in glean-core/src/upload/mod.rs [1711:1793]
fn size_and_count_quota_work_together_size_first() {
let (mut glean, dir) = new_glean(None);
// Register a ping for testing
let ping_type = PingType::new(
"test",
true,
/* send_if_empty */ true,
true,
true,
true,
vec![],
vec![],
true,
vec![],
);
glean.register_ping_type(&ping_type);
let expected_number_of_pings = 3;
// The number of pings we fill the pending pings directory with.
let n = 10;
// Submit the ping multiple times
for _ in 0..n {
ping_type.submit_sync(&glean, None);
}
let directory_manager = PingDirectoryManager::new(dir.path());
let pending_pings = directory_manager.process_dirs().pending_pings;
// The pending pings array is sorted by date in ascending order,
// the newest element is the last one.
let expected_pings = pending_pings
.iter()
.rev()
.take(expected_number_of_pings)
.map(|(_, ping)| ping.document_id.clone())
.collect::<Vec<_>>();
// Create a new upload manager pointing to the same data_path as the glean instance.
let mut upload_manager = PingUploadManager::no_policy(dir.path());
// From manual testing we figured out a basically empty ping file is 399 bytes,
// so this allows 3 pings with some headroom in case of future changes.
upload_manager
.policy
.set_max_pending_pings_directory_size(Some(1300));
upload_manager.policy.set_max_pending_pings_count(Some(5));
// Get a task once
// One ping should have been enqueued.
// Make sure it is the newest ping.
for ping_id in expected_pings.iter().rev() {
match upload_manager.get_upload_task(&glean, false) {
PingUploadTask::Upload { request } => assert_eq!(&request.document_id, ping_id),
_ => panic!("Expected upload manager to return the next request!"),
}
}
// Verify that no other requests were returned,
// they should all have been deleted because pending pings quota was hit.
assert_eq!(
upload_manager.get_upload_task(&glean, false),
PingUploadTask::done()
);
// Verify that the correct number of deleted pings was recorded
assert_eq!(
(n - expected_number_of_pings) as i32,
upload_manager
.upload_metrics
.deleted_pings_after_quota_hit
.get_value(&glean, Some("metrics"))
.unwrap()
);
assert_eq!(
n as i32,
upload_manager
.upload_metrics
.pending_pings
.get_value(&glean, Some("metrics"))
.unwrap()
);
}