Skip to content

Commit b2ef895

Browse files
committed
test: use VM::genesis_beacon instead of test-helpers
1 parent 4d926b4 commit b2ef895

File tree

7 files changed

+104
-19
lines changed

7 files changed

+104
-19
lines changed

Cargo.lock

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

node/bft/events/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,9 @@ version = "0.3"
7272
[dev-dependencies.snarkos-node-sync-locators]
7373
path = "../../sync/locators"
7474
features = [ "test" ]
75+
76+
[dev-dependencies.tempfile]
77+
version = "3.10.1"
78+
79+
[dev-dependencies.once_cell]
80+
version = "1.18"

node/bft/events/src/block_response.rs

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,22 +136,52 @@ impl<N: Network> FromBytes for DataBlocks<N> {
136136
#[cfg(test)]
137137
pub mod prop_tests {
138138
use crate::{block_request::prop_tests::any_block_request, BlockResponse, DataBlocks};
139-
use snarkvm::{
140-
ledger::ledger_test_helpers::sample_genesis_block,
141-
prelude::{block::Block, narwhal::Data, FromBytes, TestRng, ToBytes},
142-
};
139+
use anyhow::Context;
140+
use snarkvm::prelude::{block::Block, narwhal::Data, FromBytes, TestRng, ToBytes};
141+
use std::{env, fs::DirBuilder};
143142

144143
use bytes::{Buf, BufMut, BytesMut};
144+
use once_cell::sync::OnceCell;
145145
use proptest::{
146146
collection::vec,
147147
prelude::{any, BoxedStrategy, Strategy},
148148
};
149+
use snarkvm::{
150+
ledger::store::{helpers::memory::ConsensusMemory, ConsensusStore},
151+
prelude::{PrivateKey, VM},
152+
};
153+
use tempfile::tempdir_in;
149154
use test_strategy::proptest;
150155

151156
type CurrentNetwork = snarkvm::prelude::MainnetV0;
152157

158+
fn sample_genesis_block(rng: &mut TestRng) -> Block<CurrentNetwork> {
159+
// TODO refactor me to a single location in codebase
160+
static INSTANCE: OnceCell<Block<CurrentNetwork>> = OnceCell::new();
161+
INSTANCE
162+
.get_or_init(|| {
163+
// Sample the genesis private key.
164+
let private_key = PrivateKey::<CurrentNetwork>::new(rng).unwrap();
165+
166+
// Initialize the store in temp dir inside aleo-test specific tmp dir.
167+
let aleo_tmp_dir = env::temp_dir().join("aleo_tmp_SAFE_TO_DELETE/");
168+
if aleo_tmp_dir.exists() {
169+
std::fs::remove_dir_all(aleo_tmp_dir.clone())
170+
.with_context(|| format!("Cannot remove {aleo_tmp_dir:?}"))
171+
.unwrap();
172+
};
173+
DirBuilder::new().recursive(true).create(aleo_tmp_dir.clone()).unwrap();
174+
let temp_dir = tempdir_in(aleo_tmp_dir).unwrap();
175+
let store = ConsensusStore::<_, ConsensusMemory<_>>::open(temp_dir.into_path()).unwrap();
176+
177+
// Create a genesis block.
178+
VM::from(store).unwrap().genesis_beacon(&private_key, rng).unwrap()
179+
})
180+
.clone()
181+
}
182+
153183
pub fn any_block() -> BoxedStrategy<Block<CurrentNetwork>> {
154-
any::<u64>().prop_map(|seed| sample_genesis_block(&mut TestRng::fixed(seed))).boxed()
184+
any::<u64>().prop_map(|seed| sample_genesis_block(&mut TestRng::from_seed(seed))).boxed()
155185
}
156186

157187
pub fn any_data_blocks() -> BoxedStrategy<DataBlocks<CurrentNetwork>> {

node/router/messages/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,9 @@ version = "1.4.0"
7979

8080
[dev-dependencies.test-strategy]
8181
version = "0.3.1"
82+
83+
[dev-dependencies.tempfile]
84+
version = "3.10.1"
85+
86+
[dev-dependencies.once_cell]
87+
version = "1.18"

node/router/messages/src/block_response.rs

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,23 +61,55 @@ impl<N: Network> FromBytes for BlockResponse<N> {
6161
#[cfg(test)]
6262
pub mod prop_tests {
6363
use crate::{block_request::prop_tests::any_block_request, BlockResponse, DataBlocks};
64+
use anyhow::Context;
6465
use snarkvm::{
65-
ledger::ledger_test_helpers::sample_genesis_block,
6666
prelude::{block::Block, narwhal::Data},
6767
utilities::{FromBytes, TestRng, ToBytes},
6868
};
69+
use std::{env, fs::DirBuilder};
6970

7071
use bytes::{Buf, BufMut, BytesMut};
72+
use once_cell::sync::OnceCell;
7173
use proptest::{
7274
collection::vec,
7375
prelude::{any, BoxedStrategy, Strategy},
7476
};
77+
use snarkvm::{
78+
ledger::store::{helpers::memory::ConsensusMemory, ConsensusStore},
79+
prelude::{PrivateKey, VM},
80+
};
81+
use tempfile::tempdir_in;
7582
use test_strategy::proptest;
7683

7784
type CurrentNetwork = snarkvm::prelude::MainnetV0;
7885

86+
pub fn sample_genesis_block(rng: &mut TestRng) -> Block<CurrentNetwork> {
87+
// TODO refactor me to a single location in codebase
88+
static INSTANCE: OnceCell<Block<CurrentNetwork>> = OnceCell::new();
89+
INSTANCE
90+
.get_or_init(|| {
91+
// Sample the genesis private key.
92+
let private_key = PrivateKey::<CurrentNetwork>::new(rng).unwrap();
93+
94+
// Initialize the store in temp dir inside aleo-test specific tmp dir.
95+
let aleo_tmp_dir = env::temp_dir().join("aleo_tmp_SAFE_TO_DELETE/");
96+
if aleo_tmp_dir.exists() {
97+
std::fs::remove_dir_all(aleo_tmp_dir.clone())
98+
.with_context(|| format!("Cannot remove {aleo_tmp_dir:?}"))
99+
.unwrap();
100+
};
101+
DirBuilder::new().recursive(true).create(aleo_tmp_dir.clone()).unwrap();
102+
let temp_dir = tempdir_in(aleo_tmp_dir).unwrap();
103+
let store = ConsensusStore::<_, ConsensusMemory<_>>::open(temp_dir.into_path()).unwrap();
104+
105+
// Create a genesis block.
106+
VM::from(store).unwrap().genesis_beacon(&private_key, rng).unwrap()
107+
})
108+
.clone()
109+
}
110+
79111
pub fn any_block() -> BoxedStrategy<Block<CurrentNetwork>> {
80-
any::<u64>().prop_map(|seed| sample_genesis_block(&mut TestRng::fixed(seed))).boxed()
112+
any::<u64>().prop_map(|seed| sample_genesis_block(&mut TestRng::from_seed(seed))).boxed()
81113
}
82114

83115
pub fn any_data_blocks() -> BoxedStrategy<DataBlocks<CurrentNetwork>> {

node/router/messages/src/challenge_response.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,21 +59,22 @@ pub mod prop_tests {
5959
use crate::ChallengeResponse;
6060
use snarkvm::{
6161
console::prelude::{FromBytes, ToBytes},
62-
ledger::{ledger_test_helpers::sample_genesis_block, narwhal::Data},
62+
ledger::narwhal::Data,
6363
prelude::{block::Header, PrivateKey, Signature},
6464
utilities::rand::{TestRng, Uniform},
6565
};
6666

67+
use crate::block_response::prop_tests;
6768
use bytes::{Buf, BufMut, BytesMut};
6869
use proptest::prelude::{any, BoxedStrategy, Strategy};
6970
use test_strategy::proptest;
7071

7172
type CurrentNetwork = snarkvm::prelude::MainnetV0;
7273

7374
pub fn any_signature() -> BoxedStrategy<Signature<CurrentNetwork>> {
74-
(0..64)
75-
.prop_map(|message_size| {
76-
let rng = &mut TestRng::default();
75+
(any::<u64>(), 0..64)
76+
.prop_map(|(seed, message_size)| {
77+
let rng = &mut TestRng::from_seed(seed);
7778
let message: Vec<_> = (0..message_size).map(|_| Uniform::rand(rng)).collect();
7879
let private_key = PrivateKey::new(rng).unwrap();
7980
Signature::sign(&private_key, &message, rng).unwrap()
@@ -82,7 +83,7 @@ pub mod prop_tests {
8283
}
8384

8485
pub fn any_genesis_header() -> BoxedStrategy<Header<CurrentNetwork>> {
85-
any::<u64>().prop_map(|seed| *sample_genesis_block(&mut TestRng::fixed(seed)).header()).boxed()
86+
any::<u64>().prop_map(|seed| *prop_tests::sample_genesis_block(&mut TestRng::from_seed(seed)).header()).boxed()
8687
}
8788

8889
pub fn any_challenge_response() -> BoxedStrategy<ChallengeResponse<CurrentNetwork>> {

node/router/messages/src/unconfirmed_transaction.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,21 +60,27 @@ impl<N: Network> FromBytes for UnconfirmedTransaction<N> {
6060
pub mod prop_tests {
6161
use crate::{Transaction, UnconfirmedTransaction};
6262
use snarkvm::{
63-
ledger::{ledger_test_helpers::sample_fee_public_transaction, narwhal::Data},
64-
prelude::{FromBytes, TestRng, ToBytes},
63+
ledger::{narwhal::Data},
64+
prelude::{FromBytes, ToBytes},
6565
};
6666

67+
use crate::block_response::prop_tests::any_block;
6768
use bytes::{Buf, BufMut, BytesMut};
68-
use proptest::prelude::{any, BoxedStrategy, Strategy};
69+
use proptest::{
70+
prelude::{any, BoxedStrategy, Strategy},
71+
sample::Selector,
72+
};
73+
6974
use test_strategy::proptest;
7075

7176
type CurrentNetwork = snarkvm::prelude::MainnetV0;
7277

7378
pub fn any_transaction() -> BoxedStrategy<Transaction<CurrentNetwork>> {
74-
any::<u64>()
75-
.prop_map(|seed| {
76-
let mut rng = TestRng::fixed(seed);
77-
sample_fee_public_transaction(&mut rng)
79+
(any_block(), any::<Selector>())
80+
.prop_map(|(block, selector)| {
81+
let tx: Transaction<CurrentNetwork> =
82+
selector.select(block.transactions().clone().into_iter().map(|tx| tx.into_transaction()));
83+
tx
7884
})
7985
.boxed()
8086
}

0 commit comments

Comments
 (0)