Skip to content

Commit def3529

Browse files
committed
merged generic_tests branch
2 parents 7f66447 + 838b2a7 commit def3529

File tree

16 files changed

+404
-179
lines changed

16 files changed

+404
-179
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

darkside-tests/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ version = "0.1.0"
44
edition = "2021"
55

66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
[features]
78

89
[dependencies]
910
zingolib = { path = "../zingolib", features = ["test-features", "darkside_tests"] }
@@ -38,6 +39,7 @@ zcash_client_backend = { workspace = true }
3839
shardtree = { workspace = true }
3940
serde_json = "1.0.107"
4041
sapling-crypto.workspace = true
42+
proptest = "1.4.0"
4143

4244
[build-dependencies]
4345
tonic-build = { workspace = true }
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
use zingolib::{
2+
lightclient::LightClient, test_framework::chain_generic_tests::ChainTest, wallet::WalletBase,
3+
};
4+
5+
use crate::{
6+
constants::{ABANDON_TO_DARKSIDE_SAP_10_000_000_ZAT, DARKSIDE_SEED},
7+
utils::{scenarios::DarksideScenario, update_tree_states_for_transaction},
8+
};
9+
10+
impl ChainTest for DarksideScenario {
11+
async fn setup() -> Self {
12+
DarksideScenario::new(None).await
13+
}
14+
15+
async fn create_faucet(&mut self) -> LightClient {
16+
self.stage_transaction(ABANDON_TO_DARKSIDE_SAP_10_000_000_ZAT)
17+
.await;
18+
self.client_builder
19+
.build_client(DARKSIDE_SEED.to_string(), 0, true, self.regtest_network)
20+
.await
21+
}
22+
23+
async fn create_client(&mut self) -> LightClient {
24+
let zingo_config = self
25+
.client_builder
26+
.make_unique_data_dir_and_load_config(self.regtest_network);
27+
LightClient::create_from_wallet_base_async(
28+
WalletBase::FreshEntropy,
29+
&zingo_config,
30+
0,
31+
false,
32+
)
33+
.await
34+
.unwrap()
35+
}
36+
37+
async fn bump_chain(&mut self) {
38+
let mut streamed_raw_txns = self
39+
.darkside_connector
40+
.get_incoming_transactions()
41+
.await
42+
.unwrap();
43+
self.darkside_connector
44+
.clear_incoming_transactions()
45+
.await
46+
.unwrap();
47+
loop {
48+
let maybe_raw_tx = streamed_raw_txns.message().await.unwrap();
49+
match maybe_raw_tx {
50+
None => break,
51+
Some(raw_tx) => {
52+
self.darkside_connector
53+
.stage_transactions_stream(vec![(
54+
raw_tx.data.clone(),
55+
u64::from(self.staged_blockheight),
56+
)])
57+
.await
58+
.unwrap();
59+
self.tree_state = update_tree_states_for_transaction(
60+
&self.darkside_connector.0,
61+
raw_tx.clone(),
62+
u64::from(self.staged_blockheight),
63+
)
64+
.await;
65+
self.darkside_connector
66+
.add_tree_state(self.tree_state.clone())
67+
.await
68+
.unwrap();
69+
}
70+
}
71+
}
72+
self.darkside_connector
73+
.stage_blocks_create(u64::from(self.staged_blockheight) as i32, 1, 0)
74+
.await
75+
.unwrap();
76+
self.staged_blockheight = dbg!(self.staged_blockheight + 1);
77+
self.apply_blocks(u64::from(self.staged_blockheight)).await;
78+
}
79+
}
80+
81+
#[tokio::test]
82+
async fn chain_generic_send() {
83+
zingolib::test_framework::chain_generic_tests::simple_send::<DarksideScenario>(40_000).await;
84+
}
85+
86+
use proptest::proptest;
87+
use tokio::runtime::Runtime;
88+
proptest! {
89+
#[test]
90+
fn chain_generic_send_proptest(value in 0..90_000u32) {
91+
Runtime::new().unwrap().block_on(async {
92+
zingolib::test_framework::chain_generic_tests::simple_send::<DarksideScenario>(value).await;
93+
});
94+
}
95+
}

darkside-tests/src/generic_chain_tests.rs

Lines changed: 0 additions & 67 deletions
This file was deleted.

darkside-tests/src/lib.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
pub mod constants;
2-
#[cfg(feature = "generic_chain_tests")]
3-
pub mod generic_chain_tests;
42
pub mod utils;
53
pub mod darkside_types {
64
tonic::include_proto!("cash.z.wallet.sdk.rpc");
75
}
6+
7+
#[cfg(test)]
8+
pub mod chain_generic_tests;

darkside-tests/src/utils.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -512,13 +512,13 @@ pub mod scenarios {
512512

513513
pub struct DarksideScenario {
514514
darkside_handler: DarksideHandler,
515-
darkside_connector: DarksideConnector,
516-
client_builder: ClientBuilder,
517-
regtest_network: RegtestNetwork,
515+
pub(crate) darkside_connector: DarksideConnector,
516+
pub(crate) client_builder: ClientBuilder,
517+
pub(crate) regtest_network: RegtestNetwork,
518518
faucet: Option<LightClient>,
519519
lightclients: Vec<LightClient>,
520-
staged_blockheight: BlockHeight,
521-
tree_state: TreeState,
520+
pub(crate) staged_blockheight: BlockHeight,
521+
pub(crate) tree_state: TreeState,
522522
transaction_set_index: u64,
523523
}
524524
impl DarksideScenario {
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
use zcash_client_backend::PoolType;
2+
use zcash_client_backend::ShieldedProtocol::Sapling;
3+
4+
use zingo_testutils::scenarios::setup::ScenarioBuilder;
5+
use zingoconfig::RegtestNetwork;
6+
use zingolib::lightclient::LightClient;
7+
use zingolib::test_framework::chain_generic_tests::ChainTest;
8+
use zingolib::wallet::WalletBase;
9+
10+
struct LibtonodeChain {
11+
regtest_network: RegtestNetwork,
12+
scenario_builder: ScenarioBuilder,
13+
}
14+
15+
impl ChainTest for LibtonodeChain {
16+
async fn setup() -> Self {
17+
let regtest_network = RegtestNetwork::all_upgrades_active();
18+
let scenario_builder = ScenarioBuilder::build_configure_launch(
19+
Some(PoolType::Shielded(Sapling).into()),
20+
None,
21+
None,
22+
&regtest_network,
23+
)
24+
.await;
25+
LibtonodeChain {
26+
regtest_network,
27+
scenario_builder,
28+
}
29+
}
30+
31+
async fn create_faucet(&mut self) -> LightClient {
32+
self.scenario_builder
33+
.client_builder
34+
.build_faucet(false, self.regtest_network)
35+
.await
36+
}
37+
38+
async fn create_client(&mut self) -> LightClient {
39+
let zingo_config = self
40+
.scenario_builder
41+
.client_builder
42+
.make_unique_data_dir_and_load_config(self.regtest_network);
43+
LightClient::create_from_wallet_base_async(
44+
WalletBase::FreshEntropy,
45+
&zingo_config,
46+
0,
47+
false,
48+
)
49+
.await
50+
.unwrap()
51+
}
52+
53+
async fn bump_chain(&mut self) {
54+
let start_height = self
55+
.scenario_builder
56+
.regtest_manager
57+
.get_current_height()
58+
.unwrap();
59+
let target = start_height + 1;
60+
self.scenario_builder
61+
.regtest_manager
62+
.generate_n_blocks(1)
63+
.expect("Called for side effect, failed!");
64+
assert_eq!(
65+
self.scenario_builder
66+
.regtest_manager
67+
.get_current_height()
68+
.unwrap(),
69+
target
70+
);
71+
}
72+
}
73+
74+
#[tokio::test]
75+
async fn chain_generic_send() {
76+
zingolib::test_framework::chain_generic_tests::simple_send::<LibtonodeChain>(40_000).await;
77+
}

integration-tests/tests/generic_chain_tests.rs

Lines changed: 0 additions & 36 deletions
This file was deleted.

integration-tests/tests/integrations.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3978,3 +3978,5 @@ mod basic_transactions {
39783978
async fn proxy_server_worky() {
39793979
zingo_testutils::check_proxy_server_works().await
39803980
}
3981+
3982+
pub mod chain_generic_tests;

zingolib/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ deprecations = ["lightclient-deprecated"]
1111
test-features = ["lightclient-deprecated", "zingo-testvectors"]
1212
lightclient-deprecated = []
1313
darkside_tests = []
14-
generic_chain_tests = []
1514

1615
[dependencies]
1716
zingoconfig = { path = "../zingoconfig" }

0 commit comments

Comments
 (0)