@@ -23,6 +23,7 @@ use daphne::{
2323use prio:: codec:: { Decode , Encode , ParameterizedDecode , ParameterizedEncode } ;
2424use std:: { borrow:: Cow , ops:: Range } ;
2525
26+ #[ cfg_attr( any( test, feature = "test-utils" ) , derive( PartialEq , Debug ) ) ]
2627pub struct InitializeReports < ' s > {
2728 pub hpke_keys : Cow < ' s , [ HpkeReceiverConfig ] > ,
2829 /// Output of [`DapAggregator::valid_report_time_range`](daphne::roles::DapAggregator) at the
@@ -489,11 +490,108 @@ fn to_capnp<E: ToString>(e: E) -> capnp::Error {
489490#[ cfg( test) ]
490491mod test {
491492 use super :: * ;
492- use crate :: capnproto:: { CapnprotoPayloadDecodeExt , CapnprotoPayloadEncodeExt } ;
493+ use crate :: capnproto:: roundtrip_test;
494+ use daphne:: { vdaf:: VdafVerifyKey , DapVersion } ;
495+ use rand:: Rng ;
493496
494497 #[ test]
495498 fn report_metadata_roundtrip ( ) {
496- let report_metadata = ReportMetadata {
499+ roundtrip_test ( generate_random_report_metadata ( ) ) ;
500+ }
501+
502+ #[ test]
503+ fn test_encode_decode_range ( ) {
504+ let mut rng = rand:: thread_rng ( ) ;
505+
506+ let start = rng. gen :: < messages:: Time > ( ) ;
507+ let end = rng. gen :: < messages:: Time > ( ) ;
508+
509+ roundtrip_test ( start..end) ;
510+ }
511+
512+ #[ test]
513+ fn test_encode_decode_partial_dap_task_config_for_report_init ( ) {
514+ roundtrip_test ( generate_random_partial_task_config ( ) ) ;
515+ }
516+
517+ #[ test]
518+ fn test_encode_decode_prepare_init ( ) {
519+ roundtrip_test ( generate_random_prepare_init ( ) ) ;
520+ }
521+
522+ #[ test]
523+ fn test_encode_decode_hpke_config ( ) {
524+ roundtrip_test ( generate_random_hpke_config ( ) ) ;
525+ }
526+
527+ #[ test]
528+ fn test_encode_decode_hpke_receiver_config ( ) {
529+ roundtrip_test ( HpkeReceiverConfig {
530+ config : generate_random_hpke_config ( ) ,
531+ private_key : generate_random_bytes ( ) . into ( ) ,
532+ } ) ;
533+ }
534+
535+ #[ test]
536+ fn test_encode_decode_initialize_reports ( ) {
537+ let initialize_reports = InitializeReports {
538+ hpke_keys : generate_random_hpke_receiver_configs ( ) . into ( ) ,
539+ valid_report_range : generate_random_valid_report_range ( ) ,
540+ task_id : TaskId ( rand:: thread_rng ( ) . gen ( ) ) ,
541+ task_config : generate_random_partial_task_config ( ) ,
542+ agg_param : generate_random_bytes ( ) . into ( ) ,
543+ prep_inits : generate_random_prep_inits ( ) ,
544+ } ;
545+
546+ roundtrip_test ( initialize_reports) ;
547+ }
548+
549+ fn generate_random_partial_task_config ( ) -> PartialDapTaskConfigForReportInit < ' static > {
550+ let mut rng = rand:: thread_rng ( ) ;
551+ PartialDapTaskConfigForReportInit {
552+ not_before : rng. gen :: < u64 > ( ) ,
553+ not_after : rng. gen :: < u64 > ( ) ,
554+ method_is_taskprov : rng. gen :: < bool > ( ) ,
555+ version : [ DapVersion :: Latest , DapVersion :: Draft09 ] [ rng. gen_range ( 0 ..2 ) ] ,
556+ vdaf : Cow :: Owned ( generate_random_vdaf ( ) ) ,
557+ vdaf_verify_key : VdafVerifyKey :: from ( rng. gen :: < [ u8 ; 32 ] > ( ) ) ,
558+ }
559+ }
560+
561+ fn generate_random_hpke_receiver_configs ( ) -> Vec < HpkeReceiverConfig > {
562+ ( 0 ..3 )
563+ . map ( |_| generate_random_hpke_receiver_config ( ) )
564+ . collect ( )
565+ }
566+
567+ fn generate_random_hpke_receiver_config ( ) -> HpkeReceiverConfig {
568+ HpkeReceiverConfig {
569+ config : generate_random_hpke_config ( ) ,
570+ private_key : generate_random_bytes ( ) . into ( ) ,
571+ }
572+ }
573+
574+ fn generate_random_valid_report_range ( ) -> std:: ops:: Range < u64 > {
575+ let mut rng = rand:: thread_rng ( ) ;
576+ rng. gen_range ( 0 ..1000 ) ..rng. gen_range ( 1000 ..2000 )
577+ }
578+
579+ fn generate_random_prep_inits ( ) -> Vec < PrepareInit > {
580+ ( 0 ..2 ) . map ( |_| generate_random_prepare_init ( ) ) . collect ( )
581+ }
582+
583+ fn generate_random_hpke_config ( ) -> HpkeConfig {
584+ HpkeConfig {
585+ id : rand:: thread_rng ( ) . gen ( ) ,
586+ kem_id : daphne:: hpke:: HpkeKemId :: P256HkdfSha256 ,
587+ kdf_id : daphne:: hpke:: HpkeKdfId :: HkdfSha256 ,
588+ aead_id : daphne:: hpke:: HpkeAeadId :: Aes128Gcm ,
589+ public_key : generate_random_bytes ( ) . into ( ) ,
590+ }
591+ }
592+
593+ fn generate_random_report_metadata ( ) -> ReportMetadata {
594+ ReportMetadata {
497595 id : messages:: ReportId ( rand:: random ( ) ) ,
498596 time : rand:: random ( ) ,
499597 public_extensions : Some ( vec ! [
@@ -503,27 +601,35 @@ mod test {
503601 payload: b"some extension payload" . to_vec( ) ,
504602 } ,
505603 ] ) ,
506- } ;
604+ }
605+ }
507606
508- assert_eq ! (
509- report_metadata,
510- ReportMetadata :: decode_from_bytes( & report_metadata. encode_to_bytes( ) ) . unwrap( )
511- ) ;
607+ fn generate_random_bytes ( ) -> Vec < u8 > {
608+ let mut rng = rand:: thread_rng ( ) ;
609+ ( 0 ..rng. gen_range ( 0 ..32 ) ) . map ( |_| rng. gen ( ) ) . collect ( )
512610 }
513611
514- #[ test]
515- fn report_metadata_roundtrip_draft09 ( ) {
516- let report_metadata = ReportMetadata {
517- id : messages:: ReportId ( rand:: random ( ) ) ,
518- time : rand:: random ( ) ,
519- // draft09 compatibility: Previously there was no extensions field in the report
520- // metadata.
521- public_extensions : None ,
522- } ;
612+ fn generate_random_vdaf ( ) -> VdafConfig {
613+ // Replace with the actual logic to generate random VdafConfig
614+ VdafConfig :: Prio2 { dimension : 1234 }
615+ }
523616
524- assert_eq ! (
525- report_metadata,
526- ReportMetadata :: decode_from_bytes( & report_metadata. encode_to_bytes( ) ) . unwrap( )
527- ) ;
617+ fn generate_random_prepare_init ( ) -> PrepareInit {
618+ PrepareInit {
619+ report_share : generate_random_report_share ( ) ,
620+ payload : generate_random_bytes ( ) ,
621+ }
622+ }
623+
624+ fn generate_random_report_share ( ) -> ReportShare {
625+ ReportShare {
626+ report_metadata : generate_random_report_metadata ( ) ,
627+ public_share : generate_random_bytes ( ) ,
628+ encrypted_input_share : HpkeCiphertext {
629+ config_id : rand:: thread_rng ( ) . gen :: < u8 > ( ) ,
630+ enc : generate_random_bytes ( ) ,
631+ payload : generate_random_bytes ( ) ,
632+ } ,
633+ }
528634 }
529635}
0 commit comments