Skip to content

Commit 0e796a5

Browse files
authored
Merge pull request #5725 from stacks-network/test/unflake-forked-tenure-is-ignored
Fix flakiness in forked_tenure_is_ignored
2 parents d7b5e14 + f568275 commit 0e796a5

File tree

1 file changed

+33
-12
lines changed

1 file changed

+33
-12
lines changed

testnet/stacks-node/src/tests/nakamoto_integrations.rs

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ use stacks::chainstate::stacks::address::{PoxAddress, StacksAddressExtensions};
4747
use stacks::chainstate::stacks::boot::{
4848
MINERS_NAME, SIGNERS_VOTING_FUNCTION_NAME, SIGNERS_VOTING_NAME,
4949
};
50-
use stacks::chainstate::stacks::db::StacksChainState;
50+
use stacks::chainstate::stacks::db::{StacksChainState, StacksHeaderInfo};
5151
use stacks::chainstate::stacks::miner::{
5252
BlockBuilder, BlockLimitFunction, TransactionEvent, TransactionResult, TransactionSuccessEvent,
5353
};
@@ -304,6 +304,30 @@ pub fn get_stackerdb_slot_version(
304304
})
305305
}
306306

307+
pub fn get_last_block_in_current_tenure(
308+
sortdb: &SortitionDB,
309+
chainstate: &StacksChainState,
310+
) -> Option<StacksHeaderInfo> {
311+
let ch = SortitionDB::get_canonical_burn_chain_tip(sortdb.conn())
312+
.unwrap()
313+
.consensus_hash;
314+
let mut tenure_blocks = test_observer::get_blocks();
315+
tenure_blocks.retain(|block| {
316+
let consensus_hash = block.get("consensus_hash").unwrap().as_str().unwrap();
317+
consensus_hash == format!("0x{ch}")
318+
});
319+
let last_block = tenure_blocks.last()?.clone();
320+
let last_block_id = StacksBlockId::from_hex(
321+
&last_block
322+
.get("index_block_hash")
323+
.unwrap()
324+
.as_str()
325+
.unwrap()[2..],
326+
)
327+
.unwrap();
328+
NakamotoChainState::get_block_header(chainstate.db(), &last_block_id).unwrap()
329+
}
330+
307331
pub fn add_initial_balances(
308332
conf: &mut Config,
309333
accounts: usize,
@@ -5042,7 +5066,7 @@ fn forked_tenure_is_ignored() {
50425066
thread::sleep(Duration::from_secs(1));
50435067
}
50445068

5045-
info!("Tenure B broadcasted but did not process a block. Issue the next bitcon block and unstall block commits.");
5069+
info!("Tenure B broadcasted but did not process a block. Issue the next bitcoin block and unstall block commits.");
50465070

50475071
// the block will be stored, not processed, so load it out of staging
50485072
let tip_sn = SortitionDB::get_canonical_burn_chain_tip(sortdb.conn())
@@ -5089,16 +5113,17 @@ fn forked_tenure_is_ignored() {
50895113
.lock()
50905114
.expect("Mutex poisoned")
50915115
.get_stacks_blocks_processed();
5116+
let block_in_tenure = get_last_block_in_current_tenure(&sortdb, &chainstate).is_some();
50925117
Ok(commits_count > commits_before
50935118
&& blocks_count > blocks_before
5094-
&& blocks_processed > blocks_processed_before)
5119+
&& blocks_processed > blocks_processed_before
5120+
&& block_in_tenure)
50955121
})
50965122
.unwrap();
50975123

50985124
info!("Tenure C produced a block!");
5099-
let block_tenure_c = NakamotoChainState::get_canonical_block_header(chainstate.db(), &sortdb)
5100-
.unwrap()
5101-
.unwrap();
5125+
5126+
let block_tenure_c = get_last_block_in_current_tenure(&sortdb, &chainstate).unwrap();
51025127
let blocks = test_observer::get_mined_nakamoto_blocks();
51035128
let block_c = blocks.last().unwrap();
51045129
info!("Tenure C tip block: {}", &block_tenure_c.index_block_hash());
@@ -5151,9 +5176,7 @@ fn forked_tenure_is_ignored() {
51515176

51525177
info!("Tenure C produced a second block!");
51535178

5154-
let block_2_tenure_c = NakamotoChainState::get_canonical_block_header(chainstate.db(), &sortdb)
5155-
.unwrap()
5156-
.unwrap();
5179+
let block_2_tenure_c = get_last_block_in_current_tenure(&sortdb, &chainstate).unwrap();
51575180
let blocks = test_observer::get_mined_nakamoto_blocks();
51585181
let block_2_c = blocks.last().unwrap();
51595182

@@ -5184,9 +5207,7 @@ fn forked_tenure_is_ignored() {
51845207
})
51855208
.unwrap();
51865209

5187-
let block_tenure_d = NakamotoChainState::get_canonical_block_header(chainstate.db(), &sortdb)
5188-
.unwrap()
5189-
.unwrap();
5210+
let block_tenure_d = get_last_block_in_current_tenure(&sortdb, &chainstate).unwrap();
51905211
let blocks = test_observer::get_mined_nakamoto_blocks();
51915212
let block_d = blocks.last().unwrap();
51925213

0 commit comments

Comments
 (0)