Skip to content

Commit

Permalink
Merge pull request zingolabs#1071 from fluidvanadium/mod_in_chain_gen…
Browse files Browse the repository at this point in the history
…eric

Mod in chain generic
  • Loading branch information
Oscar-Pepper authored May 14, 2024
2 parents 0fe7bad + 63a9fb2 commit 033d81b
Show file tree
Hide file tree
Showing 4 changed files with 201 additions and 191 deletions.
159 changes: 82 additions & 77 deletions darkside-tests/src/chain_generic_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,8 @@ use zcash_client_backend::ShieldedProtocol::Orchard;
use zcash_client_backend::ShieldedProtocol::Sapling;

use zingo_testutils::chain_generic_tests::send_value_to_pool;
use zingo_testutils::chain_generic_tests::ConductChain;
use zingolib::lightclient::LightClient;
use zingolib::wallet::WalletBase;

use crate::constants::ABANDON_TO_DARKSIDE_SAP_10_000_000_ZAT;
use crate::constants::DARKSIDE_SEED;
use crate::utils::scenarios::DarksideEnvironment;
use crate::utils::update_tree_states_for_transaction;

#[tokio::test]
#[ignore] // darkside cant handle transparent?
Expand All @@ -25,13 +19,13 @@ async fn darkside_send_40_000_to_transparent() {
proptest! {
#![proptest_config(proptest::test_runner::Config::with_cases(4))]
#[test]
fn send_pvalue_to_orchard(value in 0..90u32) {
fn darkside_send_pvalue_to_orchard(value in 0..90u32) {
Runtime::new().unwrap().block_on(async {
send_value_to_pool::<DarksideEnvironment>(value * 1_000, Shielded(Orchard)).await;
});
}
#[test]
fn send_pvalue_to_sapling(value in 0..90u32) {
fn darkside_send_pvalue_to_sapling(value in 0..90u32) {
Runtime::new().unwrap().block_on(async {
send_value_to_pool::<DarksideEnvironment>(value * 1_000, Shielded(Sapling)).await;
});
Expand All @@ -42,83 +36,94 @@ proptest! {
/// - transparent sends do not work
/// - txids are regenerated randomly. zingo can optionally accept_server_txid
/// these tests cannot portray the full range of network weather.
impl ConductChain for DarksideEnvironment {
async fn setup() -> Self {
DarksideEnvironment::new(None).await
}
pub(crate) mod impl_conduct_chain_for_darkside_environment {

async fn create_faucet(&mut self) -> LightClient {
self.stage_transaction(ABANDON_TO_DARKSIDE_SAP_10_000_000_ZAT)
.await;
let mut zingo_config = self
.client_builder
.make_unique_data_dir_and_load_config(self.regtest_network);
zingo_config.accept_server_txids = true;
LightClient::create_from_wallet_base_async(
WalletBase::MnemonicPhrase(DARKSIDE_SEED.to_string()),
&zingo_config,
0,
true,
)
.await
.unwrap()
}
use zingo_testutils::chain_generic_tests::ConductChain;
use zingolib::lightclient::LightClient;
use zingolib::wallet::WalletBase;

async fn create_client(&mut self) -> LightClient {
let mut zingo_config = self
.client_builder
.make_unique_data_dir_and_load_config(self.regtest_network);
zingo_config.accept_server_txids = true;
LightClient::create_from_wallet_base_async(
WalletBase::FreshEntropy,
&zingo_config,
0,
false,
)
.await
.unwrap()
}
use crate::constants::ABANDON_TO_DARKSIDE_SAP_10_000_000_ZAT;
use crate::constants::DARKSIDE_SEED;
use crate::utils::scenarios::DarksideEnvironment;
use crate::utils::update_tree_states_for_transaction;
impl ConductChain for DarksideEnvironment {
async fn setup() -> Self {
DarksideEnvironment::new(None).await
}

async fn bump_chain(&mut self) {
let mut streamed_raw_txns = self
.darkside_connector
.get_incoming_transactions()
async fn create_faucet(&mut self) -> LightClient {
self.stage_transaction(ABANDON_TO_DARKSIDE_SAP_10_000_000_ZAT)
.await;
let mut zingo_config = self
.client_builder
.make_unique_data_dir_and_load_config(self.regtest_network);
zingo_config.accept_server_txids = true;
LightClient::create_from_wallet_base_async(
WalletBase::MnemonicPhrase(DARKSIDE_SEED.to_string()),
&zingo_config,
0,
true,
)
.await
.unwrap();
self.darkside_connector
.clear_incoming_transactions()
.unwrap()
}

async fn create_client(&mut self) -> LightClient {
let mut zingo_config = self
.client_builder
.make_unique_data_dir_and_load_config(self.regtest_network);
zingo_config.accept_server_txids = true;
LightClient::create_from_wallet_base_async(
WalletBase::FreshEntropy,
&zingo_config,
0,
false,
)
.await
.unwrap();
loop {
let maybe_raw_tx = streamed_raw_txns.message().await.unwrap();
match maybe_raw_tx {
None => break,
Some(raw_tx) => {
self.darkside_connector
.stage_transactions_stream(vec![(
raw_tx.data.clone(),
.unwrap()
}

async fn bump_chain(&mut self) {
let mut streamed_raw_txns = self
.darkside_connector
.get_incoming_transactions()
.await
.unwrap();
self.darkside_connector
.clear_incoming_transactions()
.await
.unwrap();
loop {
let maybe_raw_tx = streamed_raw_txns.message().await.unwrap();
match maybe_raw_tx {
None => break,
Some(raw_tx) => {
self.darkside_connector
.stage_transactions_stream(vec![(
raw_tx.data.clone(),
u64::from(self.staged_blockheight),
)])
.await
.unwrap();
self.tree_state = update_tree_states_for_transaction(
&self.darkside_connector.0,
raw_tx.clone(),
u64::from(self.staged_blockheight),
)])
.await
.unwrap();
self.tree_state = update_tree_states_for_transaction(
&self.darkside_connector.0,
raw_tx.clone(),
u64::from(self.staged_blockheight),
)
.await;
self.darkside_connector
.add_tree_state(self.tree_state.clone())
.await
.unwrap();
)
.await;
self.darkside_connector
.add_tree_state(self.tree_state.clone())
.await
.unwrap();
}
}
}
self.darkside_connector
.stage_blocks_create(u64::from(self.staged_blockheight) as i32, 1, 0)
.await
.unwrap();
self.staged_blockheight = self.staged_blockheight + 1;
self.apply_blocks(u64::from(self.staged_blockheight)).await;
}
self.darkside_connector
.stage_blocks_create(u64::from(self.staged_blockheight) as i32, 1, 0)
.await
.unwrap();
self.staged_blockheight = self.staged_blockheight + 1;
self.apply_blocks(u64::from(self.staged_blockheight)).await;
}
}
129 changes: 68 additions & 61 deletions integration-tests/tests/chain_generic_tests.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
use zcash_client_backend::PoolType;
use zcash_client_backend::PoolType::Shielded;
use zcash_client_backend::PoolType::Transparent;
use zcash_client_backend::ShieldedProtocol::Orchard;
use zcash_client_backend::ShieldedProtocol::Sapling;

use zingo_testutils::chain_generic_tests::send_value_to_pool;
use zingo_testutils::chain_generic_tests::ConductChain;
use zingo_testutils::scenarios::setup::ScenarioBuilder;
use zingoconfig::RegtestNetwork;
use zingolib::lightclient::LightClient;
use zingolib::wallet::WalletBase;

use libtonode_environment::LibtonodeEnvironment;

#[tokio::test]
async fn libtonode_send_40_000_to_transparent() {
Expand All @@ -24,68 +20,79 @@ async fn libtonode_send_40_000_to_orchard() {
send_value_to_pool::<LibtonodeEnvironment>(40_000, Shielded(Orchard)).await;
}

struct LibtonodeEnvironment {
regtest_network: RegtestNetwork,
scenario_builder: ScenarioBuilder,
}
pub(crate) mod libtonode_environment {
use zcash_client_backend::PoolType;

/// known issues include --slow
/// these tests cannot portray the full range of network weather.
impl ConductChain for LibtonodeEnvironment {
async fn setup() -> Self {
let regtest_network = RegtestNetwork::all_upgrades_active();
let scenario_builder = ScenarioBuilder::build_configure_launch(
Some(PoolType::Shielded(Sapling).into()),
None,
None,
&regtest_network,
)
.await;
LibtonodeEnvironment {
regtest_network,
scenario_builder,
}
}
use zcash_client_backend::ShieldedProtocol::Sapling;

async fn create_faucet(&mut self) -> LightClient {
self.scenario_builder
.client_builder
.build_faucet(false, self.regtest_network)
.await
use zingo_testutils::chain_generic_tests::ConductChain;
use zingo_testutils::scenarios::setup::ScenarioBuilder;
use zingoconfig::RegtestNetwork;
use zingolib::lightclient::LightClient;
use zingolib::wallet::WalletBase;
pub(crate) struct LibtonodeEnvironment {
regtest_network: RegtestNetwork,
scenario_builder: ScenarioBuilder,
}

async fn create_client(&mut self) -> LightClient {
let zingo_config = self
.scenario_builder
.client_builder
.make_unique_data_dir_and_load_config(self.regtest_network);
LightClient::create_from_wallet_base_async(
WalletBase::FreshEntropy,
&zingo_config,
0,
false,
)
.await
.unwrap()
}
/// known issues include --slow
/// these tests cannot portray the full range of network weather.
impl ConductChain for LibtonodeEnvironment {
async fn setup() -> Self {
let regtest_network = RegtestNetwork::all_upgrades_active();
let scenario_builder = ScenarioBuilder::build_configure_launch(
Some(PoolType::Shielded(Sapling).into()),
None,
None,
&regtest_network,
)
.await;
LibtonodeEnvironment {
regtest_network,
scenario_builder,
}
}

async fn bump_chain(&mut self) {
let start_height = self
.scenario_builder
.regtest_manager
.get_current_height()
.unwrap();
let target = start_height + 1;
self.scenario_builder
.regtest_manager
.generate_n_blocks(1)
.expect("Called for side effect, failed!");
assert_eq!(
async fn create_faucet(&mut self) -> LightClient {
self.scenario_builder
.client_builder
.build_faucet(false, self.regtest_network)
.await
}

async fn create_client(&mut self) -> LightClient {
let zingo_config = self
.scenario_builder
.client_builder
.make_unique_data_dir_and_load_config(self.regtest_network);
LightClient::create_from_wallet_base_async(
WalletBase::FreshEntropy,
&zingo_config,
0,
false,
)
.await
.unwrap()
}

async fn bump_chain(&mut self) {
let start_height = self
.scenario_builder
.regtest_manager
.get_current_height()
.unwrap(),
target
);
.unwrap();
let target = start_height + 1;
self.scenario_builder
.regtest_manager
.generate_n_blocks(1)
.expect("Called for side effect, failed!");
assert_eq!(
self.scenario_builder
.regtest_manager
.get_current_height()
.unwrap(),
target
);
}
}
}
2 changes: 0 additions & 2 deletions integration-tests/tests/libtonode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,6 @@ use zingolib::{
},
};

pub mod chain_generic_tests;

fn extract_value_as_u64(input: &JsonValue) -> u64 {
let note = &input["value"].as_fixed_point_u64(0).unwrap();
*note
Expand Down
Loading

0 comments on commit 033d81b

Please sign in to comment.