Skip to content

Commit

Permalink
split very long running test into smaller tests (#5579)
Browse files Browse the repository at this point in the history
this test sometimes takes over 4 minutes on CI. by splitting it up, we
normalize the run time across the test shards, creating a more consistent run
time across the CI shards. other upside is that if one of these test fails, it
will be easier to see at a glance which one is failing by the name.
  • Loading branch information
mat-if authored Oct 24, 2024
1 parent aa47db1 commit 3289f76
Showing 1 changed file with 123 additions and 17 deletions.
140 changes: 123 additions & 17 deletions ironfish-rust/src/transaction/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ fn test_transaction_value_overflows() {
}

#[test]
fn test_batch_verify_wrong_params() {
fn test_batch_verify_wrong_spend_params() {
let rng = &mut thread_rng();

let wrong_spend_params =
Expand All @@ -457,6 +457,67 @@ fn test_batch_verify_wrong_params() {
)
.unwrap();

let wrong_spend_vk = bellperson::groth16::prepare_verifying_key(&wrong_spend_params.vk);

//
// TRANSACTION GENERATION
//
let key = SaplingKey::generate_key();
let other_key = SaplingKey::generate_key();

// Native asset
let in_note = Note::new(
key.public_address(),
42,
"",
NATIVE_ASSET,
key.public_address(),
);
let out_note = Note::new(
key.public_address(),
40,
"",
NATIVE_ASSET,
key.public_address(),
);

let witness = make_fake_witness(&in_note);

// Custom asset
let asset = Asset::new(other_key.public_address(), "Othercoin", "").unwrap();

let mut proposed_transaction1 = ProposedTransaction::new(TransactionVersion::latest());

proposed_transaction1.add_spend(in_note, &witness).unwrap();
proposed_transaction1.add_output(out_note).unwrap();

let transaction1 = proposed_transaction1
.post(&key, None, 1)
.expect("should be able to post transaction");

let mut proposed_transaction2 = ProposedTransaction::new(TransactionVersion::latest());
proposed_transaction2.add_mint(asset, 5).unwrap();

let transaction2 = proposed_transaction2.post(&other_key, None, 0).unwrap();
//
// END TRANSACTION CREATION
//

batch_verify_transactions([&transaction1, &transaction2])
.expect("Should verify using Sapling params");
internal_batch_verify_transactions(
[&transaction1, &transaction2],
&wrong_spend_vk,
&SAPLING.output_verifying_key,
&SAPLING.mint_verifying_key,
)
.expect_err("Should not verify if spend verifying key is wrong");
}

#[test]
fn test_batch_verify_wrong_output_params() {
let rng = &mut thread_rng();

let wrong_output_params =
bellperson::groth16::generate_random_parameters::<blstrs::Bls12, _, _>(
Output {
Expand All @@ -472,6 +533,67 @@ fn test_batch_verify_wrong_params() {
)
.unwrap();

let wrong_output_vk = bellperson::groth16::prepare_verifying_key(&wrong_output_params.vk);

//
// TRANSACTION GENERATION
//
let key = SaplingKey::generate_key();
let other_key = SaplingKey::generate_key();

// Native asset
let in_note = Note::new(
key.public_address(),
42,
"",
NATIVE_ASSET,
key.public_address(),
);
let out_note = Note::new(
key.public_address(),
40,
"",
NATIVE_ASSET,
key.public_address(),
);

let witness = make_fake_witness(&in_note);

// Custom asset
let asset = Asset::new(other_key.public_address(), "Othercoin", "").unwrap();

let mut proposed_transaction1 = ProposedTransaction::new(TransactionVersion::latest());

proposed_transaction1.add_spend(in_note, &witness).unwrap();
proposed_transaction1.add_output(out_note).unwrap();

let transaction1 = proposed_transaction1
.post(&key, None, 1)
.expect("should be able to post transaction");

let mut proposed_transaction2 = ProposedTransaction::new(TransactionVersion::latest());
proposed_transaction2.add_mint(asset, 5).unwrap();

let transaction2 = proposed_transaction2.post(&other_key, None, 0).unwrap();
//
// END TRANSACTION CREATION
//

batch_verify_transactions([&transaction1, &transaction2])
.expect("Should verify using Sapling params");
internal_batch_verify_transactions(
[&transaction1, &transaction2],
&SAPLING.spend_verifying_key,
&wrong_output_vk,
&SAPLING.mint_verifying_key,
)
.expect_err("Should not verify if output verifying key is wrong");
}

#[test]
fn test_batch_verify_wrong_mint_params() {
let rng = &mut thread_rng();

let wrong_mint_params = bellperson::groth16::generate_random_parameters::<blstrs::Bls12, _, _>(
MintAsset {
proof_generation_key: None,
Expand All @@ -481,8 +603,6 @@ fn test_batch_verify_wrong_params() {
)
.unwrap();

let wrong_spend_vk = bellperson::groth16::prepare_verifying_key(&wrong_spend_params.vk);
let wrong_output_vk = bellperson::groth16::prepare_verifying_key(&wrong_output_params.vk);
let wrong_mint_vk = bellperson::groth16::prepare_verifying_key(&wrong_mint_params.vk);

//
Expand Down Expand Up @@ -552,20 +672,6 @@ fn test_batch_verify_wrong_params() {

batch_verify_transactions([&transaction1, &transaction2])
.expect("Should verify using Sapling params");
internal_batch_verify_transactions(
[&transaction1, &transaction2],
&wrong_spend_vk,
&SAPLING.output_verifying_key,
&SAPLING.mint_verifying_key,
)
.expect_err("Should not verify if spend verifying key is wrong");
internal_batch_verify_transactions(
[&transaction1, &transaction2],
&SAPLING.spend_verifying_key,
&wrong_output_vk,
&SAPLING.mint_verifying_key,
)
.expect_err("Should not verify if output verifying key is wrong");
internal_batch_verify_transactions(
[&transaction1, &transaction2],
&SAPLING.spend_verifying_key,
Expand Down

0 comments on commit 3289f76

Please sign in to comment.