diff --git a/src/contract/money/tests/integration.rs b/src/contract/money/tests/integration.rs new file mode 100644 index 000000000..cc24f9715 --- /dev/null +++ b/src/contract/money/tests/integration.rs @@ -0,0 +1,83 @@ +/* This file is part of DarkFi (https://dark.fi) + * + * Copyright (C) 2020-2023 Dyne.org foundation + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +use darkfi::Result; +use darkfi_contract_test_harness::{init_logger, Holder, TestHarness}; +use log::info; + +#[test] +fn money_integration() -> Result<()> { + smol::block_on(async { + init_logger(); + + // Holders this test will use + const HOLDERS: [Holder; 2] = [Holder::Alice, Holder::Bob]; + + // Current verification slot + let mut verification_slot = 0; + + // Initialize harness + let mut th = TestHarness::new(&["money".to_string()]).await?; + + // Drop some money to Alice + info!("[Alice] Building block proposal"); + let (alice_proposal_tx, alice_proposal_params) = + th.pow_reward(&Holder::Alice, None, verification_slot + 1, None)?; + + for holder in HOLDERS { + info!("[{holder:?}] Executing Alice's block proposal"); + th.execute_pow_reward_tx( + &holder, + &alice_proposal_tx, + &alice_proposal_params, + verification_slot, + ) + .await?; + } + + th.assert_trees(&HOLDERS); + verification_slot += 1; + th.generate_slot(verification_slot).await?; + + // And some to Bob + info!("[Bob] Building block proposal"); + let (bob_proposal_tx, bob_proposal_params) = + th.pow_reward(&Holder::Bob, None, verification_slot + 1, None)?; + + for holder in HOLDERS { + info!("[{holder:?}] Executing Alice's block proposal"); + th.execute_pow_reward_tx( + &holder, + &bob_proposal_tx, + &bob_proposal_params, + verification_slot, + ) + .await?; + } + + th.assert_trees(&HOLDERS); + verification_slot += 1; + th.generate_slot(verification_slot).await?; + + // Statistics + th.statistics(); + + // Thanks for reading + Ok(()) + }) +}