-
Notifications
You must be signed in to change notification settings - Fork 305
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tests(app): 🧼 decompose
init_chain.rs
test file
this was useful in early development, but we can (a) break this into distinct test files, and (b) get rid of `mock_consensus_can_send_an_init_chain_request` which is now obselete thanks to a more sophisticated test suite.
- Loading branch information
Showing
3 changed files
with
101 additions
and
122 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
58 changes: 58 additions & 0 deletions
58
crates/core/app/tests/mock_consensus_can_define_a_genesis_validator.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
use { | ||
self::common::BuilderExt, | ||
anyhow::anyhow, | ||
cnidarium::TempStorage, | ||
penumbra_app::{genesis::AppState, server::consensus::Consensus}, | ||
penumbra_mock_consensus::TestNode, | ||
penumbra_stake::component::validator_handler::ValidatorDataRead as _, | ||
tap::{Tap, TapFallible}, | ||
tracing::info, | ||
}; | ||
|
||
mod common; | ||
|
||
/// Exercises that the mock consensus engine can provide a single genesis validator. | ||
#[tokio::test] | ||
async fn mock_consensus_can_define_a_genesis_validator() -> anyhow::Result<()> { | ||
// Install a test logger, acquire some temporary storage, and start the test node. | ||
let guard = common::set_tracing_subscriber(); | ||
let storage = TempStorage::new().await?; | ||
let test_node = { | ||
let app_state = AppState::default(); | ||
let consensus = Consensus::new(storage.as_ref().clone()); | ||
TestNode::builder() | ||
.single_validator() | ||
.with_penumbra_auto_app_state(app_state)? | ||
.init_chain(consensus) | ||
.await | ||
.tap_ok(|e| tracing::info!(hash = %e.last_app_hash_hex(), "finished init chain"))? | ||
}; | ||
|
||
let snapshot = storage.latest_snapshot(); | ||
let validators = snapshot | ||
.validator_definitions() | ||
.tap(|_| info!("getting validator definitions")) | ||
.await?; | ||
match validators.as_slice() { | ||
[v] => { | ||
let identity_key = v.identity_key; | ||
let status = snapshot | ||
.get_validator_state(&identity_key) | ||
.await? | ||
.ok_or_else(|| anyhow!("could not find validator status"))?; | ||
assert_eq!( | ||
status, | ||
penumbra_stake::validator::State::Active, | ||
"validator should be active" | ||
); | ||
} | ||
unexpected => panic!("there should be one validator, got: {unexpected:?}"), | ||
} | ||
|
||
// Free our temporary storage. | ||
drop(test_node); | ||
drop(storage); | ||
drop(guard); | ||
|
||
Ok(()) | ||
} |
43 changes: 43 additions & 0 deletions
43
crates/core/app/tests/mock_consensus_can_send_a_sequence_of_empty_blocks.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
use { | ||
self::common::BuilderExt, | ||
cnidarium::TempStorage, | ||
penumbra_app::{genesis::AppState, server::consensus::Consensus}, | ||
penumbra_mock_consensus::TestNode, | ||
penumbra_sct::component::clock::EpochRead as _, | ||
tap::TapFallible, | ||
}; | ||
|
||
mod common; | ||
|
||
/// Exercises that a series of empty blocks, with no validator set present, can be successfully | ||
/// executed by the consensus service. | ||
#[tokio::test] | ||
async fn mock_consensus_can_send_a_sequence_of_empty_blocks() -> anyhow::Result<()> { | ||
// Install a test logger, acquire some temporary storage, and start the test node. | ||
let guard = common::set_tracing_subscriber(); | ||
let storage = TempStorage::new().await?; | ||
let mut test_node = { | ||
let app_state = AppState::default(); | ||
let consensus = Consensus::new(storage.as_ref().clone()); | ||
TestNode::builder() | ||
.single_validator() | ||
.with_penumbra_auto_app_state(app_state)? | ||
.init_chain(consensus) | ||
.await | ||
.tap_ok(|e| tracing::info!(hash = %e.last_app_hash_hex(), "finished init chain"))? | ||
}; | ||
|
||
let height = || async { storage.latest_snapshot().get_block_height().await }; | ||
|
||
// Fast forward eight blocks, and show that the height is 8 after doing so. | ||
assert_eq!(height().await?, 0, "height should begin at 0"); | ||
test_node.fast_forward(8).await?; | ||
assert_eq!(height().await?, 8_u64, "height should grow"); | ||
|
||
// Free our temporary storage. | ||
drop(test_node); | ||
drop(storage); | ||
drop(guard); | ||
|
||
Ok(()) | ||
} |