in glean-core/src/upload/mod.rs [1485:1543]
fn maximum_of_recoverable_errors_is_enforced_for_uploading_window() {
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);
// Submit the ping multiple times
let n = 5;
for _ in 0..n {
ping_type.submit_sync(&glean, None);
}
let mut upload_manager = PingUploadManager::no_policy(dir.path());
// Set a policy for max recoverable failures, this is usually disabled for tests.
let max_recoverable_failures = 3;
upload_manager
.policy
.set_max_recoverable_failures(Some(max_recoverable_failures));
// Return the max recoverable error failures in a row
for _ in 0..max_recoverable_failures {
match upload_manager.get_upload_task(&glean, false) {
PingUploadTask::Upload { request } => {
upload_manager.process_ping_upload_response(
&glean,
&request.document_id,
UploadResult::recoverable_failure(),
);
}
_ => panic!("Expected upload manager to return the next request!"),
}
}
// Verify that after returning the max amount of recoverable failures,
// we are done even though we haven't gotten all the enqueued requests.
assert_eq!(
upload_manager.get_upload_task(&glean, false),
PingUploadTask::done()
);
// Verify all requests are returned when we try again.
for _ in 0..n {
let task = upload_manager.get_upload_task(&glean, false);
assert!(task.is_upload());
}
}