Skip to content

Commit 1ccaa57

Browse files
committed
Improved tests, joined some using test-case crate.
1 parent b3d0126 commit 1ccaa57

1 file changed

Lines changed: 75 additions & 144 deletions

File tree

crates/cli/src/commands/create_dkg.rs

Lines changed: 75 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)