in glean-core/src/upload/mod.rs [1329:1401]
fn new_pings_are_added_while_upload_in_progress() {
let (glean, dir) = new_glean(None);
let upload_manager = PingUploadManager::no_policy(dir.path());
let doc1 = Uuid::new_v4().to_string();
let path1 = format!("/submit/app_id/test-ping/1/{}", doc1);
let doc2 = Uuid::new_v4().to_string();
let path2 = format!("/submit/app_id/test-ping/1/{}", doc2);
// Enqueue a ping
upload_manager.enqueue_ping(
&glean,
PingPayload {
document_id: doc1.clone(),
upload_path: path1,
json_body: "".into(),
headers: None,
body_has_info_sections: true,
ping_name: "test-ping".into(),
uploader_capabilities: vec![],
},
);
// Try and get the first request.
let req = match upload_manager.get_upload_task(&glean, false) {
PingUploadTask::Upload { request } => request,
_ => panic!("Expected upload manager to return the next request!"),
};
assert_eq!(doc1, req.document_id);
// Schedule the next one while the first one is "in progress"
upload_manager.enqueue_ping(
&glean,
PingPayload {
document_id: doc2.clone(),
upload_path: path2,
json_body: "".into(),
headers: None,
body_has_info_sections: true,
ping_name: "test-ping".into(),
uploader_capabilities: vec![],
},
);
// Mark as processed
upload_manager.process_ping_upload_response(
&glean,
&req.document_id,
UploadResult::http_status(200),
);
// Get the second request.
let req = match upload_manager.get_upload_task(&glean, false) {
PingUploadTask::Upload { request } => request,
_ => panic!("Expected upload manager to return the next request!"),
};
assert_eq!(doc2, req.document_id);
// Mark as processed
upload_manager.process_ping_upload_response(
&glean,
&req.document_id,
UploadResult::http_status(200),
);
// ... and then we're done.
assert_eq!(
upload_manager.get_upload_task(&glean, false),
PingUploadTask::done()
);
}