@@ -575,11 +575,6 @@ mod tests {
575575 "number of operators is below minimum: got 1, need at least 3 via --operator-enrs or --operator-addresses" ;
576576 "single_empty_enr"
577577 ) ]
578- #[ test_case(
579- CreateDkgArgs { ..default_args( ) } ,
580- "number of operators is below minimum: got 0, need at least 3 via --operator-enrs or --operator-addresses" ;
581- "no_operators"
582- ) ]
583578 #[ test_case(
584579 CreateDkgArgs {
585580 operator_enrs: VALID_ENRS [ ..3 ] . iter( ) . map( |s| s. to_string( ) ) . collect( ) ,
@@ -590,41 +585,62 @@ mod tests {
590585 "unsupported consensus protocol" ;
591586 "unsupported_consensus"
592587 ) ]
588+ #[ test_case(
589+ CreateDkgArgs { ..default_args( ) } ,
590+ "number of operators is below minimum: got 0, need at least 3 via --operator-enrs or --operator-addresses" ;
591+ "no_operators"
592+ ) ]
593+ #[ test_case(
594+ CreateDkgArgs { operator_enrs: vec![ "enr:-JG4QG472ZVvl8ySSnUK9uNVDrP_hjkUrUqIxUC75aayzmDVQedXkjbqc7QKyOOS71VmlqnYzri_taV8ZesFYaoQSIOGAYHtv1WsgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQKwwq_CAld6oVKOrixE-JzMtvvNgb9yyI-_rwq4NFtajIN0Y3CCDhqDdWRwgg4u" . to_string( ) ] , ..default_args( ) } ,
595+ "number of operators is below minimum: got 1, need at least 3 via --operator-enrs or --operator-addresses" ;
596+ "below_minimum"
597+ ) ]
593598 #[ tokio:: test]
594599 async fn test_create_dkg_invalid ( args : CreateDkgArgs , expected_err : & str ) {
595600 let err = run_create_dkg ( args) . await . unwrap_err ( ) ;
596601 assert_eq ! ( err. to_string( ) , expected_err) ;
597602 }
598603
599- #[ test]
600- fn test_require_operator_enr_flag_no_enrs ( ) {
601- let rt = tokio:: runtime:: Runtime :: new ( ) . unwrap ( ) ;
602- let err = rt
603- . block_on ( run ( CreateDkgArgs {
604- operator_enrs : vec ! [ ] ,
605- operator_addresses : vec ! [ ] ,
606- publish : false ,
607- ..default_args ( )
608- } ) )
609- . unwrap_err ( ) ;
610- assert_eq ! (
611- err. to_string( ) ,
612- r#"required flag(s) "operator-enrs" not set"#
613- ) ;
604+ #[ test_case(
605+ CreateDkgArgs { operator_enrs: vec![ ] , operator_addresses: vec![ ] , publish: false , ..default_args( ) } ,
606+ r#"required flag(s) "operator-enrs" not set"# ;
607+ "no_enrs"
608+ ) ]
609+ #[ test_case(
610+ CreateDkgArgs { threshold: 1 , ..default_args( ) } ,
611+ "threshold must be greater than 1" ;
612+ "threshold_below_minimum"
613+ ) ]
614+ #[ test_case(
615+ CreateDkgArgs { operator_enrs: VALID_ENRS [ ..3 ] . iter( ) . map( |s| s. to_string( ) ) . collect( ) , threshold: 4 , ..default_args( ) } ,
616+ "threshold cannot be greater than number of operators" ;
617+ "threshold_above_maximum"
618+ ) ]
619+ #[ tokio:: test]
620+ async fn test_run_invalid ( args : CreateDkgArgs , expected_err : & str ) {
621+ let err = run ( args) . await . unwrap_err ( ) ;
622+ assert_eq ! ( err. to_string( ) , expected_err) ;
614623 }
615624
616625 #[ tokio:: test]
617- async fn test_require_operator_enr_flag_below_minimum ( ) {
618- let err = run ( CreateDkgArgs {
619- operator_enrs : vec ! [ "enr:-JG4QG472ZVvl8ySSnUK9uNVDrP_hjkUrUqIxUC75aayzmDVQedXkjbqc7QKyOOS71VmlqnYzri_taV8ZesFYaoQSIOGAYHtv1WsgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQKwwq_CAld6oVKOrixE-JzMtvvNgb9yyI-_rwq4NFtajIN0Y3CCDhqDdWRwgg4u" . to_string( ) ] ,
620- fee_recipient_addresses : vec ! [ "0xa6430105220d0b29688b734b8ea0f3ca9936e846" . to_string( ) ] ,
621- withdrawal_addresses : vec ! [ "0xa6430105220d0b29688b734b8ea0f3ca9936e846" . to_string( ) ] ,
626+ async fn test_dkg_cli_no_threshold ( ) {
627+ let dir = temp_dir ( ) ;
628+ let enr = "enr:-JG4QG472ZVvl8ySSnUK9uNVDrP_hjkUrUqIxUC75aayzmDVQedXkjbqc7QKyOOS71VmlqnYzri_taV8ZesFYaoQSIOGAYHtv1WsgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQKwwq_CAld6oVKOrixE-JzMtvvNgb9yyI-_rwq4NFtajIN0Y3CCDhqDdWRwgg4u" ;
629+ let enrs: Vec < String > = ( 0 ..MIN_NODES ) . map ( |_| enr. to_string ( ) ) . collect ( ) ;
630+
631+ run ( CreateDkgArgs {
632+ output_dir : dir. path ( ) . to_path_buf ( ) ,
633+ operator_enrs : enrs,
634+ fee_recipient_addresses : vec ! [ VALID_ETH_ADDR . to_string( ) ] ,
635+ withdrawal_addresses : vec ! [ VALID_ETH_ADDR . to_string( ) ] ,
636+ num_validators : 1 ,
637+ threshold : 0 ,
622638 ..default_args ( )
623- } ) . await . unwrap_err ( ) ;
624- assert_eq ! (
625- err . to_string ( ) ,
626- "number of operators is below minimum: got 1, need at least 3 via --operator-enrs or --operator-addresses"
627- ) ;
639+ } )
640+ . await
641+ . unwrap ( ) ;
642+
643+ assert ! ( dir . path ( ) . join ( "cluster-definition.json" ) . exists ( ) ) ;
628644 }
629645
630646 #[ tokio:: test]
@@ -657,124 +673,39 @@ mod tests {
657673 ) ;
658674 }
659675
660- #[ test]
661- fn test_validate_withdrawal_addr_ok ( ) {
662- validate_withdrawal_addrs ( & [ VALID_ETH_ADDR . to_string ( ) ] , "goerli" ) . unwrap ( ) ;
663- }
664-
665- #[ test]
666- fn test_validate_withdrawal_addr_invalid_network ( ) {
667- let err = validate_withdrawal_addrs ( & [ ZERO_ADDRESS . to_string ( ) ] , "mainnet" ) . unwrap_err ( ) ;
668- assert ! (
669- err. to_string( )
670- . contains( "zero address forbidden on this network" )
671- ) ;
672- }
673-
674- #[ test]
675- fn test_validate_withdrawal_addr_invalid_address ( ) {
676- let err =
677- validate_withdrawal_addrs ( & [ "0xBAD000BAD000BAD" . to_string ( ) ] , "gnosis" ) . unwrap_err ( ) ;
678- assert ! ( err. to_string( ) . contains( "invalid withdrawal address" ) ) ;
676+ #[ test_case( VALID_ETH_ADDR , "goerli" , None ; "ok" ) ]
677+ #[ test_case( ZERO_ADDRESS , "mainnet" , Some ( "zero address forbidden on this network" ) ; "invalid_network" ) ]
678+ #[ test_case( "0xBAD000BAD000BAD" , "gnosis" , Some ( "invalid withdrawal address" ) ; "invalid_address" ) ]
679+ #[ test_case( "0x000BAD0000000BAD0000000BAD0000000BAD0000" , "gnosis" , Some ( "invalid checksummed address" ) ; "invalid_checksum" ) ]
680+ fn test_validate_withdrawal_addr ( addr : & str , network : & str , expected_err : Option < & str > ) {
681+ let result = validate_withdrawal_addrs ( & [ addr. to_string ( ) ] , network) ;
682+ match expected_err {
683+ None => result. unwrap ( ) ,
684+ Some ( msg) => assert ! ( result. unwrap_err( ) . to_string( ) . contains( msg) ) ,
685+ }
679686 }
680687
681- #[ test]
682- fn test_validate_withdrawal_addr_invalid_checksum ( ) {
683- let err = validate_withdrawal_addrs (
684- & [ "0x000BAD0000000BAD0000000BAD0000000BAD0000" . to_string ( ) ] ,
685- "gnosis" ,
688+ #[ test_case( 2 , "" , & [ ] , "" , false , "number of operators is below minimum" ; "insufficient_operators" ) ]
689+ #[ test_case( 4 , "cosmos" , & [ ] , "" , false , "unsupported network" ; "invalid_network" ) ]
690+ #[ test_case( 4 , "goerli" , & [ 8 , 16 ] , "" , false , "Sum of partial deposit amounts must be at least 32ETH, repetition is allowed" ; "wrong_deposit_amounts" ) ]
691+ #[ test_case( 4 , "goerli" , & [ ] , "unreal" , false , "unsupported consensus protocol" ; "unsupported_consensus" ) ]
692+ fn test_validate_dkg_config (
693+ num_operators : usize ,
694+ network : & str ,
695+ deposit_amounts : & [ u64 ] ,
696+ consensus_protocol : & str ,
697+ compounding : bool ,
698+ expected_err : & str ,
699+ ) {
700+ let err = validate_dkg_config (
701+ num_operators,
702+ network,
703+ deposit_amounts,
704+ consensus_protocol,
705+ compounding,
686706 )
687707 . unwrap_err ( ) ;
688- assert ! ( err. to_string( ) . contains( "invalid checksummed address" ) ) ;
689- }
690-
691- #[ test]
692- fn test_validate_dkg_config_insufficient_operators ( ) {
693- let err = validate_dkg_config ( 2 , "" , & [ ] , "" , false ) . unwrap_err ( ) ;
694- assert ! (
695- err. to_string( )
696- . contains( "number of operators is below minimum" )
697- ) ;
698- }
699-
700- #[ test]
701- fn test_validate_dkg_config_invalid_network ( ) {
702- let err = validate_dkg_config ( 4 , "cosmos" , & [ ] , "" , false ) . unwrap_err ( ) ;
703- assert ! ( err. to_string( ) . contains( "unsupported network" ) ) ;
704- }
705-
706- #[ test]
707- fn test_validate_dkg_config_wrong_deposit_amounts ( ) {
708- let err = validate_dkg_config ( 4 , "goerli" , & [ 8 , 16 ] , "" , false ) . unwrap_err ( ) ;
709- assert ! ( err. to_string( ) . contains(
710- "Sum of partial deposit amounts must be at least 32ETH, repetition is allowed"
711- ) ) ;
712- }
713-
714- #[ test]
715- fn test_validate_dkg_config_unsupported_consensus ( ) {
716- let err = validate_dkg_config ( 4 , "goerli" , & [ ] , "unreal" , false ) . unwrap_err ( ) ;
717- assert ! ( err. to_string( ) . contains( "unsupported consensus protocol" ) ) ;
718- }
719-
720- #[ tokio:: test]
721- async fn test_dkg_cli_threshold_below_minimum ( ) {
722- let enr = "enr:-JG4QG472ZVvl8ySSnUK9uNVDrP_hjkUrUqIxUC75aayzmDVQedXkjbqc7QKyOOS71VmlqnYzri_taV8ZesFYaoQSIOGAYHtv1WsgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQKwwq_CAld6oVKOrixE-JzMtvvNgb9yyI-_rwq4NFtajIN0Y3CCDhqDdWRwgg4u" ;
723- let enrs: Vec < String > = ( 0 ..MIN_NODES ) . map ( |_| enr. to_string ( ) ) . collect ( ) ;
724-
725- let err = run ( CreateDkgArgs {
726- operator_enrs : enrs,
727- fee_recipient_addresses : vec ! [ VALID_ETH_ADDR . to_string( ) ] ,
728- withdrawal_addresses : vec ! [ VALID_ETH_ADDR . to_string( ) ] ,
729- threshold : 1 ,
730- ..default_args ( )
731- } )
732- . await
733- . unwrap_err ( ) ;
734-
735- assert ! ( err. to_string( ) . contains( "threshold must be greater than 1" ) ) ;
736- }
737-
738- #[ tokio:: test]
739- async fn test_dkg_cli_threshold_above_maximum ( ) {
740- let enr = "enr:-JG4QG472ZVvl8ySSnUK9uNVDrP_hjkUrUqIxUC75aayzmDVQedXkjbqc7QKyOOS71VmlqnYzri_taV8ZesFYaoQSIOGAYHtv1WsgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQKwwq_CAld6oVKOrixE-JzMtvvNgb9yyI-_rwq4NFtajIN0Y3CCDhqDdWRwgg4u" ;
741- let enrs: Vec < String > = ( 0 ..MIN_NODES ) . map ( |_| enr. to_string ( ) ) . collect ( ) ;
742-
743- let err = run ( CreateDkgArgs {
744- operator_enrs : enrs,
745- fee_recipient_addresses : vec ! [ VALID_ETH_ADDR . to_string( ) ] ,
746- withdrawal_addresses : vec ! [ VALID_ETH_ADDR . to_string( ) ] ,
747- threshold : 4 ,
748- ..default_args ( )
749- } )
750- . await
751- . unwrap_err ( ) ;
752-
753- assert ! (
754- err. to_string( )
755- . contains( "threshold cannot be greater than number of operators" )
756- ) ;
757- }
758-
759- #[ tokio:: test]
760- async fn test_dkg_cli_no_threshold ( ) {
761- let dir = temp_dir ( ) ;
762- let enr = "enr:-JG4QG472ZVvl8ySSnUK9uNVDrP_hjkUrUqIxUC75aayzmDVQedXkjbqc7QKyOOS71VmlqnYzri_taV8ZesFYaoQSIOGAYHtv1WsgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQKwwq_CAld6oVKOrixE-JzMtvvNgb9yyI-_rwq4NFtajIN0Y3CCDhqDdWRwgg4u" ;
763- let enrs: Vec < String > = ( 0 ..MIN_NODES ) . map ( |_| enr. to_string ( ) ) . collect ( ) ;
764-
765- run ( CreateDkgArgs {
766- output_dir : dir. path ( ) . to_path_buf ( ) ,
767- operator_enrs : enrs,
768- fee_recipient_addresses : vec ! [ VALID_ETH_ADDR . to_string( ) ] ,
769- withdrawal_addresses : vec ! [ VALID_ETH_ADDR . to_string( ) ] ,
770- num_validators : 1 ,
771- threshold : 0 ,
772- ..default_args ( )
773- } )
774- . await
775- . unwrap ( ) ;
776-
777- assert ! ( dir. path( ) . join( "cluster-definition.json" ) . exists( ) ) ;
708+ assert ! ( err. to_string( ) . contains( expected_err) ) ;
778709 }
779710
780711 #[ test_case( "mainnet" , b"123abc" , "https://launchpad.obol.org/dv#0x313233616263" ; "mainnet" ) ]
0 commit comments