Skip to content

Commit cd49977

Browse files
committed
Do not advance unless the bootstrapped or follower node also hits epoch 3 and shutdown the runloop
Signed-off-by: Jacinta Ferrant <[email protected]>
1 parent b126d17 commit cd49977

File tree

1 file changed

+73
-16
lines changed
  • testnet/stacks-node/src/tests/signer

1 file changed

+73
-16
lines changed

testnet/stacks-node/src/tests/signer/v0.rs

Lines changed: 73 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1393,8 +1393,8 @@ fn multiple_miners() {
13931393
config.node.p2p_bind = format!("{localhost}:{node_1_p2p}");
13941394
config.node.data_url = format!("http://{localhost}:{node_1_rpc}");
13951395
config.node.p2p_address = format!("{localhost}:{node_1_p2p}");
1396-
config.node.pox_sync_sample_secs = 5;
13971396
config.miner.wait_on_interim_blocks = Duration::from_secs(5);
1397+
config.node.pox_sync_sample_secs = 1;
13981398

13991399
config.node.seed = btc_miner_1_seed.clone();
14001400
config.node.local_peer_seed = btc_miner_1_seed.clone();
@@ -1446,17 +1446,30 @@ fn multiple_miners() {
14461446
);
14471447

14481448
let mut run_loop_2 = boot_nakamoto::BootRunLoop::new(conf_node_2.clone()).unwrap();
1449+
let run_loop_stopper_2 = run_loop_2.get_termination_switch();
14491450
let rl2_coord_channels = run_loop_2.coordinator_channels();
14501451
let Counters {
14511452
naka_submitted_commits: rl2_commits,
14521453
..
14531454
} = run_loop_2.counters();
1454-
let _run_loop_2_thread = thread::Builder::new()
1455+
let run_loop_2_thread = thread::Builder::new()
14551456
.name("run_loop_2".into())
14561457
.spawn(move || run_loop_2.start(None, 0))
14571458
.unwrap();
14581459

14591460
signer_test.boot_to_epoch_3();
1461+
1462+
wait_for(120, || {
1463+
let Some(node_1_info) = get_chain_info_opt(&conf) else {
1464+
return Ok(false);
1465+
};
1466+
let Some(node_2_info) = get_chain_info_opt(&conf_node_2) else {
1467+
return Ok(false);
1468+
};
1469+
Ok(node_1_info.stacks_tip_height == node_2_info.stacks_tip_height)
1470+
})
1471+
.expect("Timed out waiting for boostrapped node to catch up to the miner");
1472+
14601473
let pre_nakamoto_peer_1_height = get_chain_info(&conf).stacks_tip_height;
14611474

14621475
info!("------------------------- Reached Epoch 3.0 -------------------------");
@@ -1553,6 +1566,12 @@ fn multiple_miners() {
15531566
u64::try_from(miner_1_tenures + miner_2_tenures).unwrap()
15541567
);
15551568

1569+
rl2_coord_channels
1570+
.lock()
1571+
.expect("Mutex poisoned")
1572+
.stop_chains_coordinator();
1573+
run_loop_stopper_2.store(false, Ordering::SeqCst);
1574+
run_loop_2_thread.join().unwrap();
15561575
signer_test.shutdown();
15571576
}
15581577

@@ -1728,6 +1747,18 @@ fn miner_forking() {
17281747
.unwrap();
17291748

17301749
signer_test.boot_to_epoch_3();
1750+
1751+
wait_for(120, || {
1752+
let Some(node_1_info) = get_chain_info_opt(&conf) else {
1753+
return Ok(false);
1754+
};
1755+
let Some(node_2_info) = get_chain_info_opt(&conf_node_2) else {
1756+
return Ok(false);
1757+
};
1758+
Ok(node_1_info.stacks_tip_height == node_2_info.stacks_tip_height)
1759+
})
1760+
.expect("Timed out waiting for boostrapped node to catch up to the miner");
1761+
17311762
let pre_nakamoto_peer_1_height = get_chain_info(&conf).stacks_tip_height;
17321763

17331764
naka_skip_commit_op.0.lock().unwrap().replace(false);
@@ -3403,18 +3434,31 @@ fn multiple_miners_with_nakamoto_blocks() {
34033434
let http_origin = format!("http://{}", &conf.node.rpc_bind);
34043435

34053436
let mut run_loop_2 = boot_nakamoto::BootRunLoop::new(conf_node_2.clone()).unwrap();
3437+
let run_loop_stopper_2 = run_loop_2.get_termination_switch();
34063438
let rl2_coord_channels = run_loop_2.coordinator_channels();
34073439
let Counters {
34083440
naka_submitted_commits: rl2_commits,
34093441
naka_mined_blocks: blocks_mined2,
34103442
..
34113443
} = run_loop_2.counters();
3412-
let _run_loop_2_thread = thread::Builder::new()
3444+
let run_loop_2_thread = thread::Builder::new()
34133445
.name("run_loop_2".into())
34143446
.spawn(move || run_loop_2.start(None, 0))
34153447
.unwrap();
34163448

34173449
signer_test.boot_to_epoch_3();
3450+
3451+
wait_for(120, || {
3452+
let Some(node_1_info) = get_chain_info_opt(&conf) else {
3453+
return Ok(false);
3454+
};
3455+
let Some(node_2_info) = get_chain_info_opt(&conf_node_2) else {
3456+
return Ok(false);
3457+
};
3458+
Ok(node_1_info.stacks_tip_height == node_2_info.stacks_tip_height)
3459+
})
3460+
.expect("Timed out waiting for follower to catch up to the miner");
3461+
34183462
let pre_nakamoto_peer_1_height = get_chain_info(&conf).stacks_tip_height;
34193463

34203464
info!("------------------------- Reached Epoch 3.0 -------------------------");
@@ -3536,7 +3580,12 @@ fn multiple_miners_with_nakamoto_blocks() {
35363580
btc_blocks_mined,
35373581
u64::try_from(miner_1_tenures + miner_2_tenures).unwrap()
35383582
);
3539-
3583+
rl2_coord_channels
3584+
.lock()
3585+
.expect("Mutex poisoned")
3586+
.stop_chains_coordinator();
3587+
run_loop_stopper_2.store(false, Ordering::SeqCst);
3588+
run_loop_2_thread.join().unwrap();
35403589
signer_test.shutdown();
35413590
}
35423591

@@ -3575,6 +3624,7 @@ fn partial_tenure_fork() {
35753624

35763625
let node_1_rpc_bind = format!("127.0.0.1:{}", node_1_rpc);
35773626

3627+
let localhost = "127.0.0.1";
35783628
// All signers are listening to node 1
35793629
let mut signer_test: SignerTest<SpawnedSigner> = SignerTest::new_with_config_modifications(
35803630
num_signers,
@@ -3586,11 +3636,12 @@ fn partial_tenure_fork() {
35863636
signer_config.node_host = node_1_rpc_bind.clone();
35873637
},
35883638
|config| {
3589-
let localhost = "127.0.0.1";
3590-
config.node.rpc_bind = format!("{}:{}", localhost, node_1_rpc);
3591-
config.node.p2p_bind = format!("{}:{}", localhost, node_1_p2p);
3592-
config.node.data_url = format!("http://{}:{}", localhost, node_1_rpc);
3593-
config.node.p2p_address = format!("{}:{}", localhost, node_1_p2p);
3639+
config.node.rpc_bind = format!("{localhost}:{node_1_rpc}");
3640+
config.node.p2p_bind = format!("{localhost}:{node_1_p2p}");
3641+
config.node.data_url = format!("http://{localhost}:{node_1_rpc}");
3642+
config.node.p2p_address = format!("{localhost}:{node_1_p2p}");
3643+
config.miner.wait_on_interim_blocks = Duration::from_secs(5);
3644+
config.node.pox_sync_sample_secs = 1;
35943645

35953646
config.node.seed = btc_miner_1_seed.clone();
35963647
config.node.local_peer_seed = btc_miner_1_seed.clone();
@@ -3620,11 +3671,10 @@ fn partial_tenure_fork() {
36203671

36213672
let conf = signer_test.running_nodes.conf.clone();
36223673
let mut conf_node_2 = conf.clone();
3623-
let localhost = "127.0.0.1";
3624-
conf_node_2.node.rpc_bind = format!("{}:{}", localhost, node_2_rpc);
3625-
conf_node_2.node.p2p_bind = format!("{}:{}", localhost, node_2_p2p);
3626-
conf_node_2.node.data_url = format!("http://{}:{}", localhost, node_2_rpc);
3627-
conf_node_2.node.p2p_address = format!("{}:{}", localhost, node_2_p2p);
3674+
conf_node_2.node.rpc_bind = format!("{localhost}:{node_2_rpc}");
3675+
conf_node_2.node.p2p_bind = format!("{localhost}:{node_2_p2p}");
3676+
conf_node_2.node.data_url = format!("http://{localhost}:{node_2_rpc}");
3677+
conf_node_2.node.p2p_address = format!("{localhost}:{node_2_p2p}");
36283678
conf_node_2.node.seed = btc_miner_2_seed.clone();
36293679
conf_node_2.burnchain.local_mining_public_key = Some(btc_miner_2_pk.to_hex());
36303680
conf_node_2.node.local_peer_seed = btc_miner_2_seed.clone();
@@ -3646,14 +3696,16 @@ fn partial_tenure_fork() {
36463696
let http_origin = format!("http://{}", &conf.node.rpc_bind);
36473697

36483698
let mut run_loop_2 = boot_nakamoto::BootRunLoop::new(conf_node_2.clone()).unwrap();
3699+
let rl2_coord_channels = run_loop_2.coordinator_channels();
3700+
let run_loop_stopper_2 = run_loop_2.get_termination_switch();
36493701
let Counters {
36503702
naka_mined_blocks: blocks_mined2,
36513703
naka_proposed_blocks: blocks_proposed2,
36523704
..
36533705
} = run_loop_2.counters();
36543706

36553707
signer_test.boot_to_epoch_3();
3656-
let _run_loop_2_thread = thread::Builder::new()
3708+
let run_loop_2_thread = thread::Builder::new()
36573709
.name("run_loop_2".into())
36583710
.spawn(move || run_loop_2.start(None, 0))
36593711
.unwrap();
@@ -3918,7 +3970,12 @@ fn partial_tenure_fork() {
39183970
.unwrap()
39193971
.unwrap();
39203972
assert_eq!(tip.stacks_block_height, ignore_block - 1);
3921-
3973+
rl2_coord_channels
3974+
.lock()
3975+
.expect("Mutex poisoned")
3976+
.stop_chains_coordinator();
3977+
run_loop_stopper_2.store(false, Ordering::SeqCst);
3978+
run_loop_2_thread.join().unwrap();
39223979
signer_test.shutdown();
39233980
}
39243981

0 commit comments

Comments
 (0)