use crate::durable::{
durable_name_agg_store, durable_name_queue, durable_name_report_store,
report_id_hex_from_report,
};
use daphne::{
messages::{Id, Report, ReportId, ReportMetadata},
DapBatchBucket, DapVersion,
};
use prio::codec::{Decode, Encode};
use rand::prelude::*;
#[test]
fn durable_name() {
let time = 1664850074;
let id1 = Id([17; 32]);
let id2 = Id([34; 32]);
let shard = 1234;
assert_eq!(durable_name_queue(shard), "queue/1234");
assert_eq!(
durable_name_report_store(&DapVersion::Draft02, &id1.to_hex(), time, shard),
"v02/task/1111111111111111111111111111111111111111111111111111111111111111/epoch/00000000001664850074/shard/1234",
);
assert_eq!(
durable_name_agg_store(&DapVersion::Draft02, &id1.to_hex(), &DapBatchBucket::FixedSize{ batch_id: &id2 }),
"v02/task/1111111111111111111111111111111111111111111111111111111111111111/batch/2222222222222222222222222222222222222222222222222222222222222222",
);
assert_eq!(
durable_name_agg_store(&DapVersion::Draft02, &id1.to_hex(), &DapBatchBucket::TimeInterval{ batch_window: time }),
"v02/task/1111111111111111111111111111111111111111111111111111111111111111/window/1664850074",
);
}
#[test]
fn parse_report_id_hex_from_report() {
let mut rng = thread_rng();
let report = Report {
task_id: Id(rng.gen()),
metadata: ReportMetadata {
id: ReportId(rng.gen()),
time: rng.gen(),
extensions: Vec::default(),
},
public_share: Vec::default(),
encrypted_input_shares: Vec::default(),
};
let report_hex = hex::encode(report.get_encoded());
let key = report_id_hex_from_report(&report_hex).unwrap();
assert_eq!(
ReportId::get_decoded(&hex::decode(key).unwrap()).unwrap(),
report.metadata.id
);
}