From feb162f756d5f48342412195f77e8bd41cdd0d75 Mon Sep 17 00:00:00 2001 From: Federico De Felici Date: Mon, 18 Aug 2025 10:46:57 +0200 Subject: [PATCH 01/10] refactor: roll-out from_stx_config() usage, #6250 --- .../burnchains/bitcoin_regtest_controller.rs | 46 ++++---- stacks-node/src/tests/bitcoin_regtest.rs | 85 +------------- .../src/tests/bitcoin_rpc_integrations.rs | 40 +++---- stacks-node/src/tests/epoch_205.rs | 8 +- stacks-node/src/tests/epoch_21.rs | 26 ++--- stacks-node/src/tests/epoch_22.rs | 6 +- stacks-node/src/tests/epoch_23.rs | 2 +- stacks-node/src/tests/epoch_24.rs | 4 +- .../src/tests/nakamoto_integrations.rs | 90 +++++++-------- stacks-node/src/tests/neon_integrations.rs | 104 +++++++++--------- stacks-node/src/tests/signer/mod.rs | 2 +- stacks-node/src/tests/stackerdb.rs | 4 +- 12 files changed, 169 insertions(+), 248 deletions(-) diff --git a/stacks-node/src/burnchains/bitcoin_regtest_controller.rs b/stacks-node/src/burnchains/bitcoin_regtest_controller.rs index 4945cb2031..74002bbf47 100644 --- a/stacks-node/src/burnchains/bitcoin_regtest_controller.rs +++ b/stacks-node/src/burnchains/bitcoin_regtest_controller.rs @@ -3255,7 +3255,7 @@ mod tests { let config = utils::create_config(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3280,7 +3280,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.wallet_name = String::from("mywallet"); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3308,7 +3308,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3349,7 +3349,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3373,7 +3373,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3421,7 +3421,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3452,7 +3452,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3480,7 +3480,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3522,7 +3522,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3581,7 +3581,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3630,7 +3630,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3681,7 +3681,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3764,7 +3764,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3837,7 +3837,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3882,7 +3882,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3932,7 +3932,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3982,7 +3982,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -4018,7 +4018,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -4058,7 +4058,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -4103,7 +4103,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -4150,7 +4150,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -4183,7 +4183,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -4224,7 +4224,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); diff --git a/stacks-node/src/tests/bitcoin_regtest.rs b/stacks-node/src/tests/bitcoin_regtest.rs index 6b535c6bad..7392261392 100644 --- a/stacks-node/src/tests/bitcoin_regtest.rs +++ b/stacks-node/src/tests/bitcoin_regtest.rs @@ -37,15 +37,6 @@ pub struct BitcoinCoreController { } impl BitcoinCoreController { - /// TODO: to be removed in favor of [`Self::from_stx_config`] - pub fn new(config: Config) -> BitcoinCoreController { - BitcoinCoreController { - bitcoind_process: None, - config, - args: vec![], - } - } - /// Create a [`BitcoinCoreController`] from Stacks Configuration, mainly using [`stacks::config::BurnchainConfig`] pub fn from_stx_config(config: Config) -> Self { let mut result = BitcoinCoreController { @@ -92,8 +83,8 @@ impl BitcoinCoreController { self } - /// Start Bitcoind process - pub fn start_bitcoind_v2(&mut self) -> BitcoinResult<()> { + /// Start Bitcoind process + pub fn start_bitcoind(&mut self) -> BitcoinResult<()> { std::fs::create_dir_all(self.config.get_burnchain_path_str()).unwrap(); let mut command = Command::new("bitcoind"); @@ -129,76 +120,6 @@ impl BitcoinCoreController { Ok(()) } - fn add_rpc_cli_args(&self, command: &mut Command) { - command.arg(format!("-rpcport={}", self.config.burnchain.rpc_port)); - - if let (Some(username), Some(password)) = ( - &self.config.burnchain.username, - &self.config.burnchain.password, - ) { - command - .arg(format!("-rpcuser={username}")) - .arg(format!("-rpcpassword={password}")); - } - } - - /// TODO: to be removed in favor of [`Self::start_bitcoind_v2`] - pub fn start_bitcoind(&mut self) -> BitcoinResult<()> { - std::fs::create_dir_all(self.config.get_burnchain_path_str()).unwrap(); - - let mut command = Command::new("bitcoind"); - command - .stdout(Stdio::piped()) - .arg("-regtest") - .arg("-nodebug") - .arg("-nodebuglogfile") - .arg("-rest") - .arg("-persistmempool=1") - .arg("-dbcache=100") - .arg("-txindex=1") - .arg("-server=1") - .arg("-listenonion=0") - .arg("-rpcbind=127.0.0.1") - .arg(format!("-datadir={}", self.config.get_burnchain_path_str())); - - let peer_port = self.config.burnchain.peer_port; - if peer_port == BURNCHAIN_CONFIG_PEER_PORT_DISABLED { - info!("Peer Port is disabled. So `-listen=0` flag will be used"); - command.arg("-listen=0"); - } else { - command.arg(format!("-port={}", peer_port)); - } - - self.add_rpc_cli_args(&mut command); - - eprintln!("bitcoind spawn: {command:?}"); - - let mut process = match command.spawn() { - Ok(child) => child, - Err(e) => return Err(BitcoinCoreError::SpawnFailed(format!("{e:?}"))), - }; - - let mut out_reader = BufReader::new(process.stdout.take().unwrap()); - - let mut line = String::new(); - while let Ok(bytes_read) = out_reader.read_line(&mut line) { - if bytes_read == 0 { - return Err(BitcoinCoreError::SpawnFailed( - "Bitcoind closed before spawning network".into(), - )); - } - if line.contains("Done loading") { - break; - } - } - - eprintln!("bitcoind startup finished"); - - self.bitcoind_process = Some(process); - - Ok(()) - } - pub fn stop_bitcoind(&mut self) -> Result<(), BitcoinCoreError> { if let Some(mut bitcoind_process) = self.bitcoind_process.take() { let res = BitcoinRPCRequest::stop_bitcoind(&self.config) @@ -291,7 +212,7 @@ fn bitcoind_integration(segwit_flag: bool) { }); // Setup up a bitcoind controller - let mut controller = BitcoinCoreController::new(conf.clone()); + let mut controller = BitcoinCoreController::from_stx_config(conf.clone()); // Start bitcoind let _res = controller.start_bitcoind(); diff --git a/stacks-node/src/tests/bitcoin_rpc_integrations.rs b/stacks-node/src/tests/bitcoin_rpc_integrations.rs index 2f6801b53d..f038fae713 100644 --- a/stacks-node/src/tests/bitcoin_rpc_integrations.rs +++ b/stacks-node/src/tests/bitcoin_rpc_integrations.rs @@ -86,7 +86,7 @@ fn test_rpc_call_fails_when_bitcond_with_auth_but_rpc_no_auth() { let config_with_auth = utils::create_stx_config(); - let mut btcd_controller = BitcoinCoreController::new(config_with_auth.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config_with_auth.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -112,7 +112,7 @@ fn test_rpc_call_fails_when_bitcond_no_auth_and_rpc_no_auth() { config_no_auth.burnchain.username = None; config_no_auth.burnchain.password = None; - let mut btcd_controller = BitcoinCoreController::new(config_no_auth.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config_no_auth.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -152,7 +152,7 @@ fn test_get_blockchain_info_ok() { let config = utils::create_stx_config(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -178,7 +178,7 @@ fn test_wallet_listing_and_creation_ok() { let config = utils::create_stx_config(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -215,7 +215,7 @@ fn test_wallet_creation_fails_if_already_exists() { let config = utils::create_stx_config(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -251,7 +251,7 @@ fn test_get_new_address_for_each_address_type() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -306,7 +306,7 @@ fn test_generate_to_address_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -333,7 +333,7 @@ fn test_list_unspent_empty_with_empty_wallet() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -357,7 +357,7 @@ fn test_list_unspent_with_defaults() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -389,7 +389,7 @@ fn test_list_unspent_one_address_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -442,7 +442,7 @@ fn test_list_unspent_two_addresses_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -505,7 +505,7 @@ fn test_generate_block_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -537,7 +537,7 @@ fn test_get_raw_transaction_ok() { let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .add_arg("-fallbackfee=0.0002") - .start_bitcoind_v2() + .start_bitcoind() .expect("bitcoind should be started!"); let client = BitcoinRpcClient::from_stx_config(&config).expect("Client creation ok!"); @@ -579,7 +579,7 @@ fn test_get_transaction_ok() { let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .add_arg("-fallbackfee=0.0002") - .start_bitcoind_v2() + .start_bitcoind() .expect("bitcoind should be started!"); let client = BitcoinRpcClient::from_stx_config(&config).expect("Client creation ok!"); @@ -616,7 +616,7 @@ fn test_get_descriptor_ok() { let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller - .start_bitcoind_v2() + .start_bitcoind() .expect("bitcoind should be started!"); let client = BitcoinRpcClient::from_stx_config(&config).expect("Client creation ok!"); @@ -646,7 +646,7 @@ fn test_import_descriptor_ok() { let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller - .start_bitcoind_v2() + .start_bitcoind() .expect("bitcoind should be started!"); let client = BitcoinRpcClient::from_stx_config(&config).expect("Client creation ok!"); @@ -679,7 +679,7 @@ fn test_stop_bitcoind_ok() { let config = utils::create_stx_config(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -699,7 +699,7 @@ fn test_invalidate_block_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -738,7 +738,7 @@ fn test_get_block_hash_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::new(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -764,7 +764,7 @@ fn test_send_raw_transaction_rebroadcast_ok() { let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); btcd_controller .add_arg("-fallbackfee=0.0002") - .start_bitcoind_v2() + .start_bitcoind() .expect("bitcoind should be started!"); let client = BitcoinRpcClient::from_stx_config(&config).expect("Client creation ok!"); diff --git a/stacks-node/src/tests/epoch_205.rs b/stacks-node/src/tests/epoch_205.rs index 40912a7f83..9948a5dfc1 100644 --- a/stacks-node/src/tests/epoch_205.rs +++ b/stacks-node/src/tests/epoch_205.rs @@ -116,7 +116,7 @@ fn test_exact_block_costs() { &[EventKeyType::AnyEvent, EventKeyType::MinedBlocks], ); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -346,7 +346,7 @@ fn test_dynamic_db_method_costs() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -506,7 +506,7 @@ fn transition_empty_blocks() { let keychain = Keychain::default(conf.node.seed.clone()); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -774,7 +774,7 @@ fn test_cost_limit_switch_version205() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) diff --git a/stacks-node/src/tests/epoch_21.rs b/stacks-node/src/tests/epoch_21.rs index 8a4c4ef6cf..8141c71753 100644 --- a/stacks-node/src/tests/epoch_21.rs +++ b/stacks-node/src/tests/epoch_21.rs @@ -103,7 +103,7 @@ fn advance_to_2_1( )); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -602,7 +602,7 @@ fn transition_fixes_bitcoin_rigidity() { ); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -1480,7 +1480,7 @@ fn transition_removes_pox_sunset() { conf.burnchain.epochs = Some(epochs); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -1766,7 +1766,7 @@ fn transition_empty_blocks() { ); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -2120,7 +2120,7 @@ fn test_pox_reorgs_three_flaps() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::new(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -2638,7 +2638,7 @@ fn test_pox_reorg_one_flap() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::new(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -3045,7 +3045,7 @@ fn test_pox_reorg_flap_duel() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::new(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -3461,7 +3461,7 @@ fn test_pox_reorg_flap_reward_cycles() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::new(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -3871,7 +3871,7 @@ fn test_pox_missing_five_anchor_blocks() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::new(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -4253,7 +4253,7 @@ fn test_sortition_divergence_pre_21() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::new(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -4601,7 +4601,7 @@ fn trait_invocation_cross_epoch() { ); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -4864,7 +4864,7 @@ fn test_v1_unlock_height_with_current_stackers() { ); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -5117,7 +5117,7 @@ fn test_v1_unlock_height_with_delay_and_current_stackers() { ); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) diff --git a/stacks-node/src/tests/epoch_22.rs b/stacks-node/src/tests/epoch_22.rs index 3a9df900b9..6f127a7df6 100644 --- a/stacks-node/src/tests/epoch_22.rs +++ b/stacks-node/src/tests/epoch_22.rs @@ -153,7 +153,7 @@ fn disable_pox() { ); burnchain_config.pox_constants = pox_constants.clone(); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -677,7 +677,7 @@ fn pox_2_unlock_all() { ); burnchain_config.pox_constants = pox_constants.clone(); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -1375,7 +1375,7 @@ fn test_pox_reorg_one_flap() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::new(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) diff --git a/stacks-node/src/tests/epoch_23.rs b/stacks-node/src/tests/epoch_23.rs index 43d436ddce..39df3ce3fe 100644 --- a/stacks-node/src/tests/epoch_23.rs +++ b/stacks-node/src/tests/epoch_23.rs @@ -134,7 +134,7 @@ fn trait_invocation_behavior() { ); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) diff --git a/stacks-node/src/tests/epoch_24.rs b/stacks-node/src/tests/epoch_24.rs index 82b5c5f45e..824b8637b5 100644 --- a/stacks-node/src/tests/epoch_24.rs +++ b/stacks-node/src/tests/epoch_24.rs @@ -175,7 +175,7 @@ fn fix_to_pox_contract() { ); burnchain_config.pox_constants = pox_constants.clone(); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -803,7 +803,7 @@ fn verify_auto_unlock_behavior() { .unwrap() + 1; - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) diff --git a/stacks-node/src/tests/nakamoto_integrations.rs b/stacks-node/src/tests/nakamoto_integrations.rs index 6eb120f3a0..a7e9a10c16 100644 --- a/stacks-node/src/tests/nakamoto_integrations.rs +++ b/stacks-node/src/tests/nakamoto_integrations.rs @@ -1582,7 +1582,7 @@ fn simple_neon_integration() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1807,7 +1807,7 @@ fn restarting_miner() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2032,7 +2032,7 @@ fn flash_blocks_on_epoch_3_FLAKY() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2279,7 +2279,7 @@ fn mine_multiple_per_tenure_integration() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2494,7 +2494,7 @@ fn multiple_miners() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2723,7 +2723,7 @@ fn correct_burn_outs() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3036,7 +3036,7 @@ fn block_proposal_api_endpoint() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::BlockProposal]); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3413,7 +3413,7 @@ fn miner_writes_proposed_block_to_stackerdb() { &[EventKeyType::AnyEvent, EventKeyType::MinedBlocks], ); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3517,7 +3517,7 @@ fn vote_for_aggregate_key_burn_op() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3746,7 +3746,7 @@ fn follower_bootup_simple() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4067,7 +4067,7 @@ fn follower_bootup_across_multiple_cycles() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4294,7 +4294,7 @@ fn follower_bootup_custom_chain_id() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4642,7 +4642,7 @@ fn burn_ops_integration_test() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -5229,7 +5229,7 @@ fn forked_tenure_is_ignored() { let miner_sk = naka_conf.miner.mining_key.clone().unwrap(); let miner_pk = StacksPublicKey::from_private(&miner_sk); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -5584,7 +5584,7 @@ fn check_block_heights() { let recipient = PrincipalData::from(StacksAddress::burn_address(false)); let stacker_sk = setup_stacker(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -6029,7 +6029,7 @@ fn nakamoto_attempt_time() { test_observer::spawn(); test_observer::register(&mut naka_conf, &[EventKeyType::BlockProposal]); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -6333,7 +6333,7 @@ fn clarity_burn_state() { test_observer::spawn(); test_observer::register(&mut naka_conf, &[EventKeyType::MinedBlocks]); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -6604,7 +6604,7 @@ fn signer_chainstate() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -7139,7 +7139,7 @@ fn continue_tenure_extend() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -7586,7 +7586,7 @@ fn check_block_times() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -7978,7 +7978,7 @@ fn check_block_info() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -8611,7 +8611,7 @@ fn check_block_info_rewards() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -8956,7 +8956,7 @@ fn mock_mining() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -9174,7 +9174,7 @@ fn utxo_check_on_startup_panic() { } last.start_height = 131; - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -9250,7 +9250,7 @@ fn utxo_check_on_startup_recover() { } last.start_height = 131; - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -9318,7 +9318,7 @@ fn v3_signer_api_endpoint() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::BlockProposal]); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -9481,7 +9481,7 @@ fn v3_blockbyheight_api_endpoint() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::BlockProposal]); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -9600,7 +9600,7 @@ fn nakamoto_lockup_events() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -9778,7 +9778,7 @@ fn skip_mining_long_tx() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -10140,7 +10140,7 @@ fn sip029_coinbase_change() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -10361,7 +10361,7 @@ fn clarity_cost_spend_down() { test_observer::spawn(); test_observer::register(&mut naka_conf, &[EventKeyType::MinedBlocks]); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -10622,7 +10622,7 @@ fn consensus_hash_event_dispatcher() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::AnyEvent]); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -11063,7 +11063,7 @@ fn mine_invalid_principal_from_consensus_buff() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::AnyEvent]); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -11182,7 +11182,7 @@ fn reload_miner_config() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::AnyEvent]); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -11328,7 +11328,7 @@ fn rbf_on_config_change() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::AnyEvent]); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -11508,7 +11508,7 @@ fn large_mempool_base(strategy: MemPoolWalkStrategy, set_fee: impl Fn() -> u64) naka_conf.node.working_dir ); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -11849,7 +11849,7 @@ fn larger_mempool() { naka_conf.node.working_dir ); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -12123,7 +12123,7 @@ fn v3_transaction_api_endpoint() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::MinedBlocks]); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -12292,7 +12292,7 @@ fn handle_considered_txs_foreign_key_failure() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -12434,7 +12434,7 @@ fn empty_mempool_sleep_ms() { // see the effect in the test. conf.miner.empty_mempool_sleep_time = Duration::from_secs(30); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -12563,7 +12563,7 @@ fn miner_constructs_replay_block() { &[EventKeyType::AnyEvent, EventKeyType::MinedBlocks], ); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -12828,7 +12828,7 @@ fn test_sip_031_activation() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -13158,7 +13158,7 @@ fn test_sip_031_last_phase() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -13482,7 +13482,7 @@ fn test_sip_031_last_phase_out_of_epoch() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -13681,7 +13681,7 @@ fn test_sip_031_last_phase_coinbase_matches_activation() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); diff --git a/stacks-node/src/tests/neon_integrations.rs b/stacks-node/src/tests/neon_integrations.rs index 1744993bf9..415379ab31 100644 --- a/stacks-node/src/tests/neon_integrations.rs +++ b/stacks-node/src/tests/neon_integrations.rs @@ -1136,7 +1136,7 @@ fn bitcoind_integration_test() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1244,7 +1244,7 @@ fn confirm_unparsed_ongoing_ops() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1326,7 +1326,7 @@ fn most_recent_utxo_integration_test() { let (conf, _) = neon_integration_test_conf(); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1580,7 +1580,7 @@ fn deep_contract() { amount: spender_bal, }); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1690,7 +1690,7 @@ fn liquid_ustx_integration() { amount: spender_bal, }); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1821,7 +1821,7 @@ fn lockup_integration() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1943,7 +1943,7 @@ fn stx_transfer_btc_integration_test() { amount: 100300, }); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2192,7 +2192,7 @@ fn stx_delegate_btc_integration_test() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2471,7 +2471,7 @@ fn stack_stx_burn_op_test() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2868,7 +2868,7 @@ fn vote_for_aggregate_key_burn_op_test() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3116,7 +3116,7 @@ fn bitcoind_resubmission_test() { amount: 100300, }); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3234,7 +3234,7 @@ fn bitcoind_forking_test() { let (conf, miner_account) = neon_integration_test_conf(); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3342,7 +3342,7 @@ fn download_err_in_btc_reorg() { conf.node.mine_microblocks = false; conf.burnchain.pox_reward_length = Some(1000); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3465,7 +3465,7 @@ fn should_fix_2771() { let (conf, _miner_account) = neon_integration_test_conf(); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3574,7 +3574,7 @@ fn filter_low_fee_tx_integration_test() { }) .collect(); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3663,7 +3663,7 @@ fn filter_long_runtime_tx_integration_test() { }) .collect(); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3768,7 +3768,7 @@ fn miner_submit_twice() { // included 1 or more transaction, but they could have made a second attempt with // more transactions. - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3877,7 +3877,7 @@ fn size_check_integration_test() { conf.miner.first_attempt_time_ms = i64::MAX as u64; conf.miner.subsequent_attempt_time_ms = i64::MAX as u64; - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4002,7 +4002,7 @@ fn block_replay_integration_test() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4143,7 +4143,7 @@ fn cost_voting_integration() { amount: spender_bal, }); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4502,7 +4502,7 @@ fn mining_events_integration_test() { ], ); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4791,7 +4791,7 @@ fn setup_block_limit_test(strategy: MemPoolWalkStrategy) -> (Vec( node_config_modifier(&mut naka_conf); info!("Make new BitcoinCoreController"); - let mut btcd_controller = BitcoinCoreController::new(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) diff --git a/stacks-node/src/tests/stackerdb.rs b/stacks-node/src/tests/stackerdb.rs index 6212dd6fcc..f35a57ecc2 100644 --- a/stacks-node/src/tests/stackerdb.rs +++ b/stacks-node/src/tests/stackerdb.rs @@ -163,7 +163,7 @@ fn test_stackerdb_load_store() { test_observer::spawn(); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -300,7 +300,7 @@ fn test_stackerdb_event_observer() { test_observer::spawn(); - let mut btcd_controller = BitcoinCoreController::new(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); btcd_controller .start_bitcoind() .map_err(|_e| ()) From 949d157b784fba866f630b9b7379edb5201491e1 Mon Sep 17 00:00:00 2001 From: Federico De Felici Date: Mon, 18 Aug 2025 11:26:22 +0200 Subject: [PATCH 02/10] chore: use config as reference, #6250 --- .../burnchains/bitcoin_regtest_controller.rs | 46 ++++---- stacks-node/src/tests/bitcoin_regtest.rs | 16 +-- .../src/tests/bitcoin_rpc_integrations.rs | 40 +++---- stacks-node/src/tests/epoch_205.rs | 8 +- stacks-node/src/tests/epoch_21.rs | 26 ++--- stacks-node/src/tests/epoch_22.rs | 6 +- stacks-node/src/tests/epoch_23.rs | 2 +- stacks-node/src/tests/epoch_24.rs | 4 +- .../src/tests/nakamoto_integrations.rs | 90 +++++++-------- stacks-node/src/tests/neon_integrations.rs | 104 +++++++++--------- stacks-node/src/tests/signer/mod.rs | 2 +- stacks-node/src/tests/stackerdb.rs | 4 +- 12 files changed, 175 insertions(+), 173 deletions(-) diff --git a/stacks-node/src/burnchains/bitcoin_regtest_controller.rs b/stacks-node/src/burnchains/bitcoin_regtest_controller.rs index 74002bbf47..7c4a71f793 100644 --- a/stacks-node/src/burnchains/bitcoin_regtest_controller.rs +++ b/stacks-node/src/burnchains/bitcoin_regtest_controller.rs @@ -3255,7 +3255,7 @@ mod tests { let config = utils::create_config(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3280,7 +3280,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.wallet_name = String::from("mywallet"); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3308,7 +3308,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3349,7 +3349,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3373,7 +3373,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3421,7 +3421,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3452,7 +3452,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3480,7 +3480,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3522,7 +3522,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3581,7 +3581,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3630,7 +3630,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3681,7 +3681,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3764,7 +3764,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3837,7 +3837,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3882,7 +3882,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3932,7 +3932,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -3982,7 +3982,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -4018,7 +4018,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -4058,7 +4058,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -4103,7 +4103,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -4150,7 +4150,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -4183,7 +4183,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -4224,7 +4224,7 @@ mod tests { let mut config = utils::create_config(); config.burnchain.local_mining_public_key = Some(miner_pubkey.to_hex()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); diff --git a/stacks-node/src/tests/bitcoin_regtest.rs b/stacks-node/src/tests/bitcoin_regtest.rs index 7392261392..813aa972f7 100644 --- a/stacks-node/src/tests/bitcoin_regtest.rs +++ b/stacks-node/src/tests/bitcoin_regtest.rs @@ -32,17 +32,19 @@ type BitcoinResult = Result; pub struct BitcoinCoreController { bitcoind_process: Option, - config: Config, args: Vec, + data_path: String, + config: Config, } impl BitcoinCoreController { /// Create a [`BitcoinCoreController`] from Stacks Configuration, mainly using [`stacks::config::BurnchainConfig`] - pub fn from_stx_config(config: Config) -> Self { + pub fn from_stx_config(config: &Config) -> Self { let mut result = BitcoinCoreController { bitcoind_process: None, - config: config.clone(), //TODO: clone can be removed once args: vec![], + data_path: config.get_burnchain_path_str(), + config: config.clone(), }; result.add_arg("-regtest"); @@ -55,14 +57,14 @@ impl BitcoinCoreController { result.add_arg("-server=1"); result.add_arg("-listenonion=0"); result.add_arg("-rpcbind=127.0.0.1"); - result.add_arg(format!("-datadir={}", config.get_burnchain_path_str())); + result.add_arg(format!("-datadir={}", result.data_path)); let peer_port = config.burnchain.peer_port; if peer_port == BURNCHAIN_CONFIG_PEER_PORT_DISABLED { info!("Peer Port is disabled. So `-listen=0` flag will be used"); result.add_arg("-listen=0"); } else { - result.add_arg(format!("-port={}", peer_port)); + result.add_arg(format!("-port={peer_port}")); } result.add_arg(format!("-rpcport={}", config.burnchain.rpc_port)); @@ -85,7 +87,7 @@ impl BitcoinCoreController { /// Start Bitcoind process pub fn start_bitcoind(&mut self) -> BitcoinResult<()> { - std::fs::create_dir_all(self.config.get_burnchain_path_str()).unwrap(); + std::fs::create_dir_all(&self.data_path).unwrap(); let mut command = Command::new("bitcoind"); command.stdout(Stdio::piped()); @@ -212,7 +214,7 @@ fn bitcoind_integration(segwit_flag: bool) { }); // Setup up a bitcoind controller - let mut controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut controller = BitcoinCoreController::from_stx_config(&conf); // Start bitcoind let _res = controller.start_bitcoind(); diff --git a/stacks-node/src/tests/bitcoin_rpc_integrations.rs b/stacks-node/src/tests/bitcoin_rpc_integrations.rs index f038fae713..4cd9461827 100644 --- a/stacks-node/src/tests/bitcoin_rpc_integrations.rs +++ b/stacks-node/src/tests/bitcoin_rpc_integrations.rs @@ -86,7 +86,7 @@ fn test_rpc_call_fails_when_bitcond_with_auth_but_rpc_no_auth() { let config_with_auth = utils::create_stx_config(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config_with_auth.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config_with_auth); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -112,7 +112,7 @@ fn test_rpc_call_fails_when_bitcond_no_auth_and_rpc_no_auth() { config_no_auth.burnchain.username = None; config_no_auth.burnchain.password = None; - let mut btcd_controller = BitcoinCoreController::from_stx_config(config_no_auth.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config_no_auth); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -152,7 +152,7 @@ fn test_get_blockchain_info_ok() { let config = utils::create_stx_config(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -178,7 +178,7 @@ fn test_wallet_listing_and_creation_ok() { let config = utils::create_stx_config(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -215,7 +215,7 @@ fn test_wallet_creation_fails_if_already_exists() { let config = utils::create_stx_config(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -251,7 +251,7 @@ fn test_get_new_address_for_each_address_type() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -306,7 +306,7 @@ fn test_generate_to_address_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -333,7 +333,7 @@ fn test_list_unspent_empty_with_empty_wallet() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -357,7 +357,7 @@ fn test_list_unspent_with_defaults() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -389,7 +389,7 @@ fn test_list_unspent_one_address_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -442,7 +442,7 @@ fn test_list_unspent_two_addresses_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -505,7 +505,7 @@ fn test_generate_block_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -534,7 +534,7 @@ fn test_get_raw_transaction_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .add_arg("-fallbackfee=0.0002") .start_bitcoind() @@ -576,7 +576,7 @@ fn test_get_transaction_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .add_arg("-fallbackfee=0.0002") .start_bitcoind() @@ -614,7 +614,7 @@ fn test_get_descriptor_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -644,7 +644,7 @@ fn test_import_descriptor_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -679,7 +679,7 @@ fn test_stop_bitcoind_ok() { let config = utils::create_stx_config(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -699,7 +699,7 @@ fn test_invalidate_block_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -738,7 +738,7 @@ fn test_get_block_hash_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); @@ -761,7 +761,7 @@ fn test_send_raw_transaction_rebroadcast_ok() { let mut config = utils::create_stx_config(); config.burnchain.wallet_name = "my_wallet".to_string(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(config.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); btcd_controller .add_arg("-fallbackfee=0.0002") .start_bitcoind() diff --git a/stacks-node/src/tests/epoch_205.rs b/stacks-node/src/tests/epoch_205.rs index 9948a5dfc1..3643f6ffb6 100644 --- a/stacks-node/src/tests/epoch_205.rs +++ b/stacks-node/src/tests/epoch_205.rs @@ -116,7 +116,7 @@ fn test_exact_block_costs() { &[EventKeyType::AnyEvent, EventKeyType::MinedBlocks], ); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -346,7 +346,7 @@ fn test_dynamic_db_method_costs() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -506,7 +506,7 @@ fn transition_empty_blocks() { let keychain = Keychain::default(conf.node.seed.clone()); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -774,7 +774,7 @@ fn test_cost_limit_switch_version205() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) diff --git a/stacks-node/src/tests/epoch_21.rs b/stacks-node/src/tests/epoch_21.rs index 8141c71753..cf3bd98471 100644 --- a/stacks-node/src/tests/epoch_21.rs +++ b/stacks-node/src/tests/epoch_21.rs @@ -103,7 +103,7 @@ fn advance_to_2_1( )); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -602,7 +602,7 @@ fn transition_fixes_bitcoin_rigidity() { ); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -1480,7 +1480,7 @@ fn transition_removes_pox_sunset() { conf.burnchain.epochs = Some(epochs); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -1766,7 +1766,7 @@ fn transition_empty_blocks() { ); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -2120,7 +2120,7 @@ fn test_pox_reorgs_three_flaps() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&confs[0]); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -2638,7 +2638,7 @@ fn test_pox_reorg_one_flap() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&confs[0]); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -3045,7 +3045,7 @@ fn test_pox_reorg_flap_duel() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&confs[0]); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -3461,7 +3461,7 @@ fn test_pox_reorg_flap_reward_cycles() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&confs[0]); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -3871,7 +3871,7 @@ fn test_pox_missing_five_anchor_blocks() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&confs[0]); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -4253,7 +4253,7 @@ fn test_sortition_divergence_pre_21() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&confs[0]); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -4601,7 +4601,7 @@ fn trait_invocation_cross_epoch() { ); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -4864,7 +4864,7 @@ fn test_v1_unlock_height_with_current_stackers() { ); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -5117,7 +5117,7 @@ fn test_v1_unlock_height_with_delay_and_current_stackers() { ); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) diff --git a/stacks-node/src/tests/epoch_22.rs b/stacks-node/src/tests/epoch_22.rs index 6f127a7df6..fdab5cf356 100644 --- a/stacks-node/src/tests/epoch_22.rs +++ b/stacks-node/src/tests/epoch_22.rs @@ -153,7 +153,7 @@ fn disable_pox() { ); burnchain_config.pox_constants = pox_constants.clone(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -677,7 +677,7 @@ fn pox_2_unlock_all() { ); burnchain_config.pox_constants = pox_constants.clone(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -1375,7 +1375,7 @@ fn test_pox_reorg_one_flap() { burnchain_configs.push(burnchain_config); } - let mut btcd_controller = BitcoinCoreController::from_stx_config(confs[0].clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&confs[0]); btcd_controller .start_bitcoind() .map_err(|_e| ()) diff --git a/stacks-node/src/tests/epoch_23.rs b/stacks-node/src/tests/epoch_23.rs index 39df3ce3fe..1689632834 100644 --- a/stacks-node/src/tests/epoch_23.rs +++ b/stacks-node/src/tests/epoch_23.rs @@ -134,7 +134,7 @@ fn trait_invocation_behavior() { ); burnchain_config.pox_constants = pox_constants; - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) diff --git a/stacks-node/src/tests/epoch_24.rs b/stacks-node/src/tests/epoch_24.rs index 824b8637b5..cbb0d6579a 100644 --- a/stacks-node/src/tests/epoch_24.rs +++ b/stacks-node/src/tests/epoch_24.rs @@ -175,7 +175,7 @@ fn fix_to_pox_contract() { ); burnchain_config.pox_constants = pox_constants.clone(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -803,7 +803,7 @@ fn verify_auto_unlock_behavior() { .unwrap() + 1; - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) diff --git a/stacks-node/src/tests/nakamoto_integrations.rs b/stacks-node/src/tests/nakamoto_integrations.rs index a7e9a10c16..3b1ec13477 100644 --- a/stacks-node/src/tests/nakamoto_integrations.rs +++ b/stacks-node/src/tests/nakamoto_integrations.rs @@ -1582,7 +1582,7 @@ fn simple_neon_integration() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1807,7 +1807,7 @@ fn restarting_miner() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2032,7 +2032,7 @@ fn flash_blocks_on_epoch_3_FLAKY() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2279,7 +2279,7 @@ fn mine_multiple_per_tenure_integration() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2494,7 +2494,7 @@ fn multiple_miners() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2723,7 +2723,7 @@ fn correct_burn_outs() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3036,7 +3036,7 @@ fn block_proposal_api_endpoint() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::BlockProposal]); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3413,7 +3413,7 @@ fn miner_writes_proposed_block_to_stackerdb() { &[EventKeyType::AnyEvent, EventKeyType::MinedBlocks], ); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3517,7 +3517,7 @@ fn vote_for_aggregate_key_burn_op() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3746,7 +3746,7 @@ fn follower_bootup_simple() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4067,7 +4067,7 @@ fn follower_bootup_across_multiple_cycles() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4294,7 +4294,7 @@ fn follower_bootup_custom_chain_id() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4642,7 +4642,7 @@ fn burn_ops_integration_test() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -5229,7 +5229,7 @@ fn forked_tenure_is_ignored() { let miner_sk = naka_conf.miner.mining_key.clone().unwrap(); let miner_pk = StacksPublicKey::from_private(&miner_sk); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -5584,7 +5584,7 @@ fn check_block_heights() { let recipient = PrincipalData::from(StacksAddress::burn_address(false)); let stacker_sk = setup_stacker(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -6029,7 +6029,7 @@ fn nakamoto_attempt_time() { test_observer::spawn(); test_observer::register(&mut naka_conf, &[EventKeyType::BlockProposal]); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -6333,7 +6333,7 @@ fn clarity_burn_state() { test_observer::spawn(); test_observer::register(&mut naka_conf, &[EventKeyType::MinedBlocks]); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -6604,7 +6604,7 @@ fn signer_chainstate() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -7139,7 +7139,7 @@ fn continue_tenure_extend() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -7586,7 +7586,7 @@ fn check_block_times() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -7978,7 +7978,7 @@ fn check_block_info() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -8611,7 +8611,7 @@ fn check_block_info_rewards() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -8956,7 +8956,7 @@ fn mock_mining() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -9174,7 +9174,7 @@ fn utxo_check_on_startup_panic() { } last.start_height = 131; - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -9250,7 +9250,7 @@ fn utxo_check_on_startup_recover() { } last.start_height = 131; - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -9318,7 +9318,7 @@ fn v3_signer_api_endpoint() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::BlockProposal]); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -9481,7 +9481,7 @@ fn v3_blockbyheight_api_endpoint() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::BlockProposal]); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -9600,7 +9600,7 @@ fn nakamoto_lockup_events() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -9778,7 +9778,7 @@ fn skip_mining_long_tx() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -10140,7 +10140,7 @@ fn sip029_coinbase_change() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -10361,7 +10361,7 @@ fn clarity_cost_spend_down() { test_observer::spawn(); test_observer::register(&mut naka_conf, &[EventKeyType::MinedBlocks]); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -10622,7 +10622,7 @@ fn consensus_hash_event_dispatcher() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::AnyEvent]); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -11063,7 +11063,7 @@ fn mine_invalid_principal_from_consensus_buff() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::AnyEvent]); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -11182,7 +11182,7 @@ fn reload_miner_config() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::AnyEvent]); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -11328,7 +11328,7 @@ fn rbf_on_config_change() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::AnyEvent]); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -11508,7 +11508,7 @@ fn large_mempool_base(strategy: MemPoolWalkStrategy, set_fee: impl Fn() -> u64) naka_conf.node.working_dir ); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -11849,7 +11849,7 @@ fn larger_mempool() { naka_conf.node.working_dir ); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -12123,7 +12123,7 @@ fn v3_transaction_api_endpoint() { test_observer::spawn(); test_observer::register(&mut conf, &[EventKeyType::MinedBlocks]); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -12292,7 +12292,7 @@ fn handle_considered_txs_foreign_key_failure() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -12434,7 +12434,7 @@ fn empty_mempool_sleep_ms() { // see the effect in the test. conf.miner.empty_mempool_sleep_time = Duration::from_secs(30); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -12563,7 +12563,7 @@ fn miner_constructs_replay_block() { &[EventKeyType::AnyEvent, EventKeyType::MinedBlocks], ); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -12828,7 +12828,7 @@ fn test_sip_031_activation() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -13158,7 +13158,7 @@ fn test_sip_031_last_phase() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -13482,7 +13482,7 @@ fn test_sip_031_last_phase_out_of_epoch() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -13681,7 +13681,7 @@ fn test_sip_031_last_phase_coinbase_matches_activation() { test_observer::spawn(); test_observer::register_any(&mut naka_conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); diff --git a/stacks-node/src/tests/neon_integrations.rs b/stacks-node/src/tests/neon_integrations.rs index 415379ab31..46f73c6f2e 100644 --- a/stacks-node/src/tests/neon_integrations.rs +++ b/stacks-node/src/tests/neon_integrations.rs @@ -1136,7 +1136,7 @@ fn bitcoind_integration_test() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1244,7 +1244,7 @@ fn confirm_unparsed_ongoing_ops() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1326,7 +1326,7 @@ fn most_recent_utxo_integration_test() { let (conf, _) = neon_integration_test_conf(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1580,7 +1580,7 @@ fn deep_contract() { amount: spender_bal, }); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1690,7 +1690,7 @@ fn liquid_ustx_integration() { amount: spender_bal, }); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1821,7 +1821,7 @@ fn lockup_integration() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -1943,7 +1943,7 @@ fn stx_transfer_btc_integration_test() { amount: 100300, }); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2192,7 +2192,7 @@ fn stx_delegate_btc_integration_test() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2471,7 +2471,7 @@ fn stack_stx_burn_op_test() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -2868,7 +2868,7 @@ fn vote_for_aggregate_key_burn_op_test() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3116,7 +3116,7 @@ fn bitcoind_resubmission_test() { amount: 100300, }); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3234,7 +3234,7 @@ fn bitcoind_forking_test() { let (conf, miner_account) = neon_integration_test_conf(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3342,7 +3342,7 @@ fn download_err_in_btc_reorg() { conf.node.mine_microblocks = false; conf.burnchain.pox_reward_length = Some(1000); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3465,7 +3465,7 @@ fn should_fix_2771() { let (conf, _miner_account) = neon_integration_test_conf(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3574,7 +3574,7 @@ fn filter_low_fee_tx_integration_test() { }) .collect(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3663,7 +3663,7 @@ fn filter_long_runtime_tx_integration_test() { }) .collect(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3768,7 +3768,7 @@ fn miner_submit_twice() { // included 1 or more transaction, but they could have made a second attempt with // more transactions. - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -3877,7 +3877,7 @@ fn size_check_integration_test() { conf.miner.first_attempt_time_ms = i64::MAX as u64; conf.miner.subsequent_attempt_time_ms = i64::MAX as u64; - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4002,7 +4002,7 @@ fn block_replay_integration_test() { test_observer::spawn(); test_observer::register_any(&mut conf); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4143,7 +4143,7 @@ fn cost_voting_integration() { amount: spender_bal, }); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4502,7 +4502,7 @@ fn mining_events_integration_test() { ], ); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .expect("Failed starting bitcoind"); @@ -4791,7 +4791,7 @@ fn setup_block_limit_test(strategy: MemPoolWalkStrategy) -> (Vec( node_config_modifier(&mut naka_conf); info!("Make new BitcoinCoreController"); - let mut btcd_controller = BitcoinCoreController::from_stx_config(naka_conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&naka_conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) diff --git a/stacks-node/src/tests/stackerdb.rs b/stacks-node/src/tests/stackerdb.rs index f35a57ecc2..a4e9f381be 100644 --- a/stacks-node/src/tests/stackerdb.rs +++ b/stacks-node/src/tests/stackerdb.rs @@ -163,7 +163,7 @@ fn test_stackerdb_load_store() { test_observer::spawn(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) @@ -300,7 +300,7 @@ fn test_stackerdb_event_observer() { test_observer::spawn(); - let mut btcd_controller = BitcoinCoreController::from_stx_config(conf.clone()); + let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); btcd_controller .start_bitcoind() .map_err(|_e| ()) From 9bea182bdbd8fd8b7aeda70152890b8b2e9b2ac3 Mon Sep 17 00:00:00 2001 From: Federico De Felici Date: Mon, 18 Aug 2025 13:07:55 +0200 Subject: [PATCH 03/10] test: add bitcoind start/stop/kill tests, #6250 --- stacks-node/src/tests/bitcoin_regtest.rs | 105 +++++++++++++++++++---- 1 file changed, 87 insertions(+), 18 deletions(-) diff --git a/stacks-node/src/tests/bitcoin_regtest.rs b/stacks-node/src/tests/bitcoin_regtest.rs index 813aa972f7..cb1a7fc754 100644 --- a/stacks-node/src/tests/bitcoin_regtest.rs +++ b/stacks-node/src/tests/bitcoin_regtest.rs @@ -12,7 +12,7 @@ use stacks::core::StacksEpochId; use stacks_common::util::hash::hex_bytes; use super::PUBLISH_CONTRACT; -use crate::burnchains::bitcoin_regtest_controller::BitcoinRPCRequest; +use crate::burnchains::rpc::bitcoin_rpc_client::BitcoinRpcClient; use crate::helium::RunLoop; use crate::tests::to_addr; use crate::Config; @@ -35,6 +35,7 @@ pub struct BitcoinCoreController { args: Vec, data_path: String, config: Config, + rpc_client: BitcoinRpcClient, } impl BitcoinCoreController { @@ -45,6 +46,7 @@ impl BitcoinCoreController { args: vec![], data_path: config.get_burnchain_path_str(), config: config.clone(), + rpc_client: BitcoinRpcClient::from_stx_config(config).expect("rpc client creation failed!"), }; result.add_arg("-regtest"); @@ -94,7 +96,7 @@ impl BitcoinCoreController { command.args(self.args.clone()); - eprintln!("bitcoind spawn: {command:?}"); + info!("bitcoind spawn: {command:?}"); let mut process = match command.spawn() { Ok(child) => child, @@ -115,7 +117,7 @@ impl BitcoinCoreController { } } - eprintln!("bitcoind startup finished"); + info!("bitcoind startup finished"); self.bitcoind_process = Some(process); @@ -124,22 +126,11 @@ impl BitcoinCoreController { pub fn stop_bitcoind(&mut self) -> Result<(), BitcoinCoreError> { if let Some(mut bitcoind_process) = self.bitcoind_process.take() { - let res = BitcoinRPCRequest::stop_bitcoind(&self.config) + let res = self.rpc_client.stop() .map_err(|e| BitcoinCoreError::StopFailed(format!("{e:?}")))?; - - if let Some(err) = res.get("error") { - if !err.is_null() { - return Err(BitcoinCoreError::StopFailed(format!("{err}"))); - } - } else if let Some(_result) = res.get("result") { - // Expected, continue - } else { - return Err(BitcoinCoreError::StopFailed(format!( - "Invalid response: {res:?}" - ))); - } - - bitcoind_process.wait().unwrap(); + info!("bitcoind stop message: '{res}'"); + bitcoind_process.wait().map_err(|e| BitcoinCoreError::StopFailed(format!("{e:?}")))?; + info!("bitcoind stopped!"); } Ok(()) } @@ -149,6 +140,10 @@ impl BitcoinCoreController { bitcoind_process.kill().unwrap(); } } + + pub fn is_running(&self) -> bool { + self.bitcoind_process.is_some() + } } impl Drop for BitcoinCoreController { @@ -157,6 +152,80 @@ impl Drop for BitcoinCoreController { } } +#[cfg(test)] +mod tests { + use std::path::Path; + + use super::*; + mod utils { + use std::net::TcpListener; + use stacks::util::get_epoch_time_nanos; + + use super::*; + + pub fn create_config() -> Config { + let mut config = Config::default(); + config.burnchain.magic_bytes = "T3".as_bytes().into(); + config.burnchain.username = Some(String::from("user")); + config.burnchain.password = Some(String::from("12345")); + // overriding default "0.0.0.0" because doesn't play nicely on Windows. + config.burnchain.peer_host = String::from("127.0.0.1"); + // avoiding peer port biding to reduce the number of ports to bind to. + config.burnchain.peer_port = BURNCHAIN_CONFIG_PEER_PORT_DISABLED; + + //Ask the OS for a free port. Not guaranteed to stay free, + //after TcpListner is dropped, but good enough for testing + //and starting bitcoind right after config is created + let tmp_listener = + TcpListener::bind("127.0.0.1:0").expect("Failed to bind to get a free port"); + let port = tmp_listener.local_addr().unwrap().port(); + + config.burnchain.rpc_port = port; + + let now = get_epoch_time_nanos(); + let dir = format!("/tmp/regtest-ctrl-{port}-{now}"); + config.node.working_dir = dir; + + config + } + } + + #[test] + fn test_bitcoind_start_and_stop() { + let config = utils::create_config(); + let data_path_str = config.get_burnchain_path_str(); + let data_path = Path::new(data_path_str.as_str()); + + let mut bitcoind = BitcoinCoreController::from_stx_config(&config); + + bitcoind.start_bitcoind().expect("should start!"); + assert!(bitcoind.is_running(), "should be running after start!"); + assert!(data_path.exists(), "data path should exists after start!"); + + bitcoind.stop_bitcoind().expect("should stop!"); + assert!(!bitcoind.is_running(), "should be not running after stop!"); + assert!(data_path.exists(), "data path should exists after stop!"); + } + + #[test] + fn test_bitcoind_start_and_kill() { + let config = utils::create_config(); + let data_path_str = config.get_burnchain_path_str(); + let data_path = Path::new(data_path_str.as_str()); + + let mut bitcoind = BitcoinCoreController::from_stx_config(&config); + + bitcoind.start_bitcoind().expect("should start!"); + assert!(bitcoind.is_running(), "should be running after start!"); + assert!(data_path.exists(), "data path should exists after start!"); + + bitcoind.kill_bitcoind();//.expect("should stop!"); + assert!(!bitcoind.is_running(), "should be not running after stop!"); + assert!(data_path.exists(), "data path should exists after stop!"); + } +} + + const BITCOIND_INT_TEST_COMMITS: u64 = 11000; #[test] From ea4ab9ab3036163807e78910e0b5451d1fb9fd4f Mon Sep 17 00:00:00 2001 From: Federico De Felici Date: Mon, 18 Aug 2025 13:22:19 +0200 Subject: [PATCH 04/10] chore: improve bitcoind kill method signature and add doc, #6250 --- stacks-node/src/tests/bitcoin_regtest.rs | 54 +++++++++++++++--------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/stacks-node/src/tests/bitcoin_regtest.rs b/stacks-node/src/tests/bitcoin_regtest.rs index cb1a7fc754..26930a1b85 100644 --- a/stacks-node/src/tests/bitcoin_regtest.rs +++ b/stacks-node/src/tests/bitcoin_regtest.rs @@ -26,15 +26,21 @@ pub enum BitcoinCoreError { SpawnFailed(String), #[error("bitcoind stop failed: {0}")] StopFailed(String), + #[error("bitcoind kill failed: {0}")] + KillFailed(String), } type BitcoinResult = Result; +/// Represent a bitcoind process instance pub struct BitcoinCoreController { + /// Process child reference bitcoind_process: Option, + /// Arguments used to start the process args: Vec, + /// The data-dir path used by bitcoind data_path: String, - config: Config, + /// An rpc client to call bitcoind rpc api rpc_client: BitcoinRpcClient, } @@ -45,8 +51,8 @@ impl BitcoinCoreController { bitcoind_process: None, args: vec![], data_path: config.get_burnchain_path_str(), - config: config.clone(), - rpc_client: BitcoinRpcClient::from_stx_config(config).expect("rpc client creation failed!"), + rpc_client: BitcoinRpcClient::from_stx_config(config) + .expect("rpc client creation failed!"), }; result.add_arg("-regtest"); @@ -124,23 +130,35 @@ impl BitcoinCoreController { Ok(()) } - pub fn stop_bitcoind(&mut self) -> Result<(), BitcoinCoreError> { + /// Gracefully stop bitcoind process + pub fn stop_bitcoind(&mut self) -> BitcoinResult<()> { if let Some(mut bitcoind_process) = self.bitcoind_process.take() { - let res = self.rpc_client.stop() + let res = self + .rpc_client + .stop() .map_err(|e| BitcoinCoreError::StopFailed(format!("{e:?}")))?; - info!("bitcoind stop message: '{res}'"); - bitcoind_process.wait().map_err(|e| BitcoinCoreError::StopFailed(format!("{e:?}")))?; - info!("bitcoind stopped!"); + info!("bitcoind stop started with message: '{res}'"); + bitcoind_process + .wait() + .map_err(|e| BitcoinCoreError::StopFailed(format!("{e:?}")))?; + info!("bitcoind stop finished"); } Ok(()) } - pub fn kill_bitcoind(&mut self) { + /// Kill bitcoind process + pub fn kill_bitcoind(&mut self) -> BitcoinResult<()> { if let Some(mut bitcoind_process) = self.bitcoind_process.take() { - bitcoind_process.kill().unwrap(); + info!("bitcoind kill started"); + bitcoind_process + .kill() + .map_err(|e| BitcoinCoreError::KillFailed(format!("{e:?}")))?; + info!("bitcoind kill finished"); } + Ok(()) } + /// Check if bitcoind process is running pub fn is_running(&self) -> bool { self.bitcoind_process.is_some() } @@ -148,7 +166,7 @@ impl BitcoinCoreController { impl Drop for BitcoinCoreController { fn drop(&mut self) { - self.kill_bitcoind(); + self.kill_bitcoind().unwrap(); } } @@ -159,6 +177,7 @@ mod tests { use super::*; mod utils { use std::net::TcpListener; + use stacks::util::get_epoch_time_nanos; use super::*; @@ -197,13 +216,13 @@ mod tests { let data_path = Path::new(data_path_str.as_str()); let mut bitcoind = BitcoinCoreController::from_stx_config(&config); - + bitcoind.start_bitcoind().expect("should start!"); assert!(bitcoind.is_running(), "should be running after start!"); assert!(data_path.exists(), "data path should exists after start!"); bitcoind.stop_bitcoind().expect("should stop!"); - assert!(!bitcoind.is_running(), "should be not running after stop!"); + assert!(!bitcoind.is_running(), "should not be running after stop!"); assert!(data_path.exists(), "data path should exists after stop!"); } @@ -214,18 +233,17 @@ mod tests { let data_path = Path::new(data_path_str.as_str()); let mut bitcoind = BitcoinCoreController::from_stx_config(&config); - + bitcoind.start_bitcoind().expect("should start!"); assert!(bitcoind.is_running(), "should be running after start!"); assert!(data_path.exists(), "data path should exists after start!"); - bitcoind.kill_bitcoind();//.expect("should stop!"); - assert!(!bitcoind.is_running(), "should be not running after stop!"); + bitcoind.kill_bitcoind().expect("should kill!"); + assert!(!bitcoind.is_running(), "should not be running after stop!"); assert!(data_path.exists(), "data path should exists after stop!"); } } - const BITCOIND_INT_TEST_COMMITS: u64 = 11000; #[test] @@ -638,6 +656,4 @@ fn bitcoind_integration(segwit_flag: bool) { }, ); run_loop.start(num_rounds).unwrap(); - - controller.kill_bitcoind(); } From 9094024eff3ffdd73af539ae820bae5c5323e95a Mon Sep 17 00:00:00 2001 From: Federico De Felici Date: Mon, 18 Aug 2025 14:33:23 +0200 Subject: [PATCH 05/10] chore: add bitcoin core controller docs, #6250 --- stacks-node/src/tests/bitcoin_regtest.rs | 39 +++++++++++++++++++----- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/stacks-node/src/tests/bitcoin_regtest.rs b/stacks-node/src/tests/bitcoin_regtest.rs index 26930a1b85..d5e65517d6 100644 --- a/stacks-node/src/tests/bitcoin_regtest.rs +++ b/stacks-node/src/tests/bitcoin_regtest.rs @@ -1,3 +1,24 @@ +// Copyright (C) 2025 Stacks Open Internet Foundation +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Bitcoin Core module +//! +//! This module provides convenient APIs for managing a `bitcoind` process, +//! including utilities to quickly start and stop instances for testing or +//! development purposes. + use std::env; use std::io::{BufRead, BufReader}; use std::process::{Child, Command, Stdio}; @@ -20,27 +41,31 @@ use crate::Config; // Value usable as `BurnchainConfig::peer_port` to avoid bitcoind peer port binding pub const BURNCHAIN_CONFIG_PEER_PORT_DISABLED: u16 = 0; +/// Errors that can occur when managing a `bitcoind` process. #[derive(Debug, thiserror::Error)] pub enum BitcoinCoreError { + /// Returned when the `bitcoind` process fails to start. #[error("bitcoind spawn failed: {0}")] SpawnFailed(String), + /// Returned when an attempt to stop the `bitcoind` process fails. #[error("bitcoind stop failed: {0}")] StopFailed(String), + /// Returned when an attempt to forcibly kill the `bitcoind` process fails. #[error("bitcoind kill failed: {0}")] KillFailed(String), } type BitcoinResult = Result; -/// Represent a bitcoind process instance +/// Represents a managed `bitcoind` process instance. pub struct BitcoinCoreController { - /// Process child reference + /// Handle to the spawned `bitcoind` process. bitcoind_process: Option, - /// Arguments used to start the process + /// Command-line arguments used to launch the process. args: Vec, - /// The data-dir path used by bitcoind + /// Path to the data directory used by `bitcoind`. data_path: String, - /// An rpc client to call bitcoind rpc api + /// RPC client for communicating with the `bitcoind` instance. rpc_client: BitcoinRpcClient, } @@ -239,8 +264,8 @@ mod tests { assert!(data_path.exists(), "data path should exists after start!"); bitcoind.kill_bitcoind().expect("should kill!"); - assert!(!bitcoind.is_running(), "should not be running after stop!"); - assert!(data_path.exists(), "data path should exists after stop!"); + assert!(!bitcoind.is_running(), "should not be running after kill!"); + assert!(data_path.exists(), "data path should exists after kill!"); } } From d72f99134a2379c4f04fc1805c088ab3845b9494 Mon Sep 17 00:00:00 2001 From: Federico De Felici Date: Mon, 18 Aug 2025 16:34:05 +0200 Subject: [PATCH 06/10] chore: remove BitcoinRPCRequest::stop_bitcoind(), #6250 --- .../src/burnchains/bitcoin_regtest_controller.rs | 11 ----------- stacks-node/src/tests/bitcoin_regtest.rs | 10 ++++++++++ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/stacks-node/src/burnchains/bitcoin_regtest_controller.rs b/stacks-node/src/burnchains/bitcoin_regtest_controller.rs index 7c4a71f793..dad429acda 100644 --- a/stacks-node/src/burnchains/bitcoin_regtest_controller.rs +++ b/stacks-node/src/burnchains/bitcoin_regtest_controller.rs @@ -2793,17 +2793,6 @@ impl BitcoinRPCRequest { Ok(()) } - pub fn stop_bitcoind(config: &Config) -> RPCResult { - let payload = BitcoinRPCRequest { - method: "stop".to_string(), - params: vec![], - id: "stacks".to_string(), - jsonrpc: "2.0".to_string(), - }; - - BitcoinRPCRequest::send(config, payload) - } - pub fn send(config: &Config, payload: BitcoinRPCRequest) -> RPCResult { let request = BitcoinRPCRequest::build_rpc_request(config, &payload); let timeout = Duration::from_secs(u64::from(config.burnchain.timeout)); diff --git a/stacks-node/src/tests/bitcoin_regtest.rs b/stacks-node/src/tests/bitcoin_regtest.rs index d5e65517d6..f81608bc8b 100644 --- a/stacks-node/src/tests/bitcoin_regtest.rs +++ b/stacks-node/src/tests/bitcoin_regtest.rs @@ -235,7 +235,12 @@ mod tests { } #[test] + #[ignore] fn test_bitcoind_start_and_stop() { + if env::var("BITCOIND_TEST") != Ok("1".into()) { + return; + } + let config = utils::create_config(); let data_path_str = config.get_burnchain_path_str(); let data_path = Path::new(data_path_str.as_str()); @@ -252,7 +257,12 @@ mod tests { } #[test] + #[ignore] fn test_bitcoind_start_and_kill() { + if env::var("BITCOIND_TEST") != Ok("1".into()) { + return; + } + let config = utils::create_config(); let data_path_str = config.get_burnchain_path_str(); let data_path = Path::new(data_path_str.as_str()); From 4f2e7494b5acd8783e316b4e744365563c5b0d4e Mon Sep 17 00:00:00 2001 From: Federico De Felici Date: Tue, 19 Aug 2025 13:21:07 +0200 Subject: [PATCH 07/10] test: improve testing api, #6250 --- .../src/burnchains/rpc/bitcoin_rpc_client/mod.rs | 2 +- .../src/burnchains/rpc/rpc_transport/mod.rs | 2 +- stacks-node/src/tests/bitcoin_regtest.rs | 13 ++++++++++--- stacks-node/src/tests/bitcoin_rpc_integrations.rs | 15 ++++++++------- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/stacks-node/src/burnchains/rpc/bitcoin_rpc_client/mod.rs b/stacks-node/src/burnchains/rpc/bitcoin_rpc_client/mod.rs index e4c9e644b1..c514a984a8 100644 --- a/stacks-node/src/burnchains/rpc/bitcoin_rpc_client/mod.rs +++ b/stacks-node/src/burnchains/rpc/bitcoin_rpc_client/mod.rs @@ -334,7 +334,7 @@ impl<'de> Deserialize<'de> for BurnchainHeaderHashWrapperResponse { } /// Client for interacting with a Bitcoin RPC service. -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct BitcoinRpcClient { /// The client ID to identify the source of the requests. client_id: String, diff --git a/stacks-node/src/burnchains/rpc/rpc_transport/mod.rs b/stacks-node/src/burnchains/rpc/rpc_transport/mod.rs index e8462b189f..a62227c020 100644 --- a/stacks-node/src/burnchains/rpc/rpc_transport/mod.rs +++ b/stacks-node/src/burnchains/rpc/rpc_transport/mod.rs @@ -127,7 +127,7 @@ pub enum RpcAuth { /// /// This struct encapsulates the target URL, optional authentication, /// and an internal HTTP client. -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct RpcTransport { /// Host and port of the target JSON-RPC server. peer: PeerHost, diff --git a/stacks-node/src/tests/bitcoin_regtest.rs b/stacks-node/src/tests/bitcoin_regtest.rs index f81608bc8b..99228938dc 100644 --- a/stacks-node/src/tests/bitcoin_regtest.rs +++ b/stacks-node/src/tests/bitcoin_regtest.rs @@ -70,14 +70,21 @@ pub struct BitcoinCoreController { } impl BitcoinCoreController { - /// Create a [`BitcoinCoreController`] from Stacks Configuration, mainly using [`stacks::config::BurnchainConfig`] + /// Create a [`BitcoinCoreController`] from Stacks Configuration pub fn from_stx_config(config: &Config) -> Self { + let client = + BitcoinRpcClient::from_stx_config(config).expect("rpc client creation failed!"); + Self::from_stx_config_and_client(config, client) + } + + /// Create a [`BitcoinCoreController`] from Stacks Configuration (mainly using [`stacks::config::BurnchainConfig`]) + /// and an rpc client [`BitcoinRpcClient`] + pub fn from_stx_config_and_client(config: &Config, client: BitcoinRpcClient) -> Self { let mut result = BitcoinCoreController { bitcoind_process: None, args: vec![], data_path: config.get_burnchain_path_str(), - rpc_client: BitcoinRpcClient::from_stx_config(config) - .expect("rpc client creation failed!"), + rpc_client: client, }; result.add_arg("-regtest"); diff --git a/stacks-node/src/tests/bitcoin_rpc_integrations.rs b/stacks-node/src/tests/bitcoin_rpc_integrations.rs index 4cd9461827..05135c866e 100644 --- a/stacks-node/src/tests/bitcoin_rpc_integrations.rs +++ b/stacks-node/src/tests/bitcoin_rpc_integrations.rs @@ -64,12 +64,12 @@ mod utils { config } - pub fn create_client_no_auth_from_stx_config(config: Config) -> BitcoinRpcClient { + pub fn create_client_no_auth_from_stx_config(config: &Config) -> BitcoinRpcClient { BitcoinRpcClient::new( - config.burnchain.peer_host, + config.burnchain.peer_host.clone(), config.burnchain.rpc_port, RpcAuth::None, - config.burnchain.wallet_name, + config.burnchain.wallet_name.clone(), config.burnchain.timeout, "stacks".to_string(), ) @@ -91,7 +91,7 @@ fn test_rpc_call_fails_when_bitcond_with_auth_but_rpc_no_auth() { .start_bitcoind() .expect("bitcoind should be started!"); - let client = utils::create_client_no_auth_from_stx_config(config_with_auth); + let client = utils::create_client_no_auth_from_stx_config(&config_with_auth); let err = client.get_blockchain_info().expect_err("Should fail!"); @@ -112,13 +112,14 @@ fn test_rpc_call_fails_when_bitcond_no_auth_and_rpc_no_auth() { config_no_auth.burnchain.username = None; config_no_auth.burnchain.password = None; - let mut btcd_controller = BitcoinCoreController::from_stx_config(&config_no_auth); + let client = utils::create_client_no_auth_from_stx_config(&config_no_auth); + + let mut btcd_controller = + BitcoinCoreController::from_stx_config_and_client(&config_no_auth, client.clone()); btcd_controller .start_bitcoind() .expect("bitcoind should be started!"); - let client = utils::create_client_no_auth_from_stx_config(config_no_auth); - let err = client.get_blockchain_info().expect_err("Should fail!"); assert!( From da1bf1d39fa62d2b41d05647fa9112487843350c Mon Sep 17 00:00:00 2001 From: Federico De Felici Date: Thu, 21 Aug 2025 09:04:11 +0200 Subject: [PATCH 08/10] chore: remove deprecated helium-related tests, #6250 --- .github/workflows/bitcoin-tests.yml | 1 - stacks-node/src/tests/bitcoin_regtest.rs | 426 ----------------------- 2 files changed, 427 deletions(-) diff --git a/.github/workflows/bitcoin-tests.yml b/.github/workflows/bitcoin-tests.yml index 419a1b6e1b..41e1f95bc4 100644 --- a/.github/workflows/bitcoin-tests.yml +++ b/.github/workflows/bitcoin-tests.yml @@ -58,7 +58,6 @@ jobs: exclude: # The following tests are excluded from CI runs. Some of these may be # worth investigating adding back into the CI - - test-name: tests::bitcoin_regtest::bitcoind_integration_test_segwit - test-name: tests::nakamoto_integrations::consensus_hash_event_dispatcher - test-name: tests::neon_integrations::atlas_integration_test - test-name: tests::neon_integrations::atlas_stress_integration_test diff --git a/stacks-node/src/tests/bitcoin_regtest.rs b/stacks-node/src/tests/bitcoin_regtest.rs index 99228938dc..078033cea4 100644 --- a/stacks-node/src/tests/bitcoin_regtest.rs +++ b/stacks-node/src/tests/bitcoin_regtest.rs @@ -23,19 +23,7 @@ use std::env; use std::io::{BufRead, BufReader}; use std::process::{Child, Command, Stdio}; -use clarity::vm::costs::ExecutionCost; -use stacks::chainstate::burn::operations::BlockstackOperationType::{ - LeaderBlockCommit, LeaderKeyRegister, -}; -use stacks::chainstate::stacks::StacksPrivateKey; -use stacks::config::InitialBalance; -use stacks::core::StacksEpochId; -use stacks_common::util::hash::hex_bytes; - -use super::PUBLISH_CONTRACT; use crate::burnchains::rpc::bitcoin_rpc_client::BitcoinRpcClient; -use crate::helium::RunLoop; -use crate::tests::to_addr; use crate::Config; // Value usable as `BurnchainConfig::peer_port` to avoid bitcoind peer port binding @@ -285,417 +273,3 @@ mod tests { assert!(data_path.exists(), "data path should exists after kill!"); } } - -const BITCOIND_INT_TEST_COMMITS: u64 = 11000; - -#[test] -#[ignore] -fn bitcoind_integration_test() { - if env::var("BITCOIND_TEST") != Ok("1".into()) { - return; - } - bitcoind_integration(false); -} - -#[test] -#[ignore] -fn bitcoind_integration_test_segwit() { - if env::var("BITCOIND_TEST") != Ok("1".into()) { - return; - } - bitcoind_integration(true); -} - -fn bitcoind_integration(segwit_flag: bool) { - let mut conf = super::new_test_conf(); - conf.burnchain.commit_anchor_block_within = 2000; - conf.burnchain.burn_fee_cap = BITCOIND_INT_TEST_COMMITS; - conf.burnchain.mode = "helium".to_string(); - conf.burnchain.peer_host = "127.0.0.1".to_string(); - conf.burnchain.rpc_port = 18443; - conf.burnchain.username = Some("helium-node".to_string()); - conf.burnchain.password = Some("secret".to_string()); - conf.burnchain.local_mining_public_key = Some("04ee0b1602eb18fef7986887a7e8769a30c9df981d33c8380d255edef003abdcd243a0eb74afdf6740e6c423e62aec631519a24cf5b1d62bf8a3e06ddc695dcb77".to_string()); - - conf.miner.first_attempt_time_ms = i64::MAX as u64; - conf.miner.subsequent_attempt_time_ms = i64::MAX as u64; - conf.miner.segwit = segwit_flag; - - conf.initial_balances.push(InitialBalance { - address: to_addr( - &StacksPrivateKey::from_hex( - "043ff5004e3d695060fa48ac94c96049b8c14ef441c50a184a6a3875d2a000f3", - ) - .unwrap(), - ) - .into(), - amount: 1000, - }); - conf.initial_balances.push(InitialBalance { - address: to_addr( - &StacksPrivateKey::from_hex( - "b1cf9cee5083f421c84d7cb53be5edf2801c3c78d63d53917aee0bdc8bd160ee01", - ) - .unwrap(), - ) - .into(), - amount: 1000, - }); - - // Setup up a bitcoind controller - let mut controller = BitcoinCoreController::from_stx_config(&conf); - // Start bitcoind - let _res = controller.start_bitcoind(); - - let num_rounds = 6; - let mut run_loop = RunLoop::new(conf.clone()); - - run_loop - .callbacks - .on_burn_chain_initialized(|burnchain_controller| { - burnchain_controller.bootstrap_chain(2001); - }); - - // In this serie of tests, the callback is fired post-burnchain-sync, pre-stacks-sync - run_loop - .callbacks - .on_new_burn_chain_state(|round, burnchain_tip, chain_tip| { - let block = &burnchain_tip.block_snapshot; - let expected_total_burn = BITCOIND_INT_TEST_COMMITS * (round + 1); - assert_eq!(block.total_burn, expected_total_burn); - assert!(block.sortition); - assert_eq!(block.num_sortitions, round + 1); - assert_eq!(block.block_height, round + 2003); - let leader_key = "f888e0cab5c16de8edf72b544a189ece5c0b95cd9178606c970789ac71d17bb4"; - - match round { - 0 => { - let state_transition = &burnchain_tip.state_transition; - assert!(state_transition.accepted_ops.len() == 1); - assert!(state_transition.consumed_leader_keys.len() == 1); - - for op in &state_transition.accepted_ops { - match op { - LeaderKeyRegister(_op) => { - unreachable!(); - } - LeaderBlockCommit(op) => { - assert_eq!( - burnchain_tip.state_transition.consumed_leader_keys[0] - .public_key - .to_hex(), - leader_key - ); - assert!(op.parent_block_ptr == 0); - assert!(op.parent_vtxindex == 0); - assert_eq!(op.burn_fee, BITCOIND_INT_TEST_COMMITS); - } - _ => panic!("Unexpected operation"), - } - } - } - 1 => { - let state_transition = &burnchain_tip.state_transition; - assert!(state_transition.accepted_ops.len() == 1); - assert!(state_transition.consumed_leader_keys.len() == 1); - - for op in &state_transition.accepted_ops { - match op { - LeaderKeyRegister(_op) => { - unreachable!(); - } - LeaderBlockCommit(op) => { - assert_eq!( - burnchain_tip.state_transition.consumed_leader_keys[0] - .public_key - .to_hex(), - leader_key - ); - assert_eq!(op.parent_block_ptr, 2003); - assert_eq!(op.burn_fee, BITCOIND_INT_TEST_COMMITS); - } - _ => panic!("Unexpected operation"), - } - } - - assert!( - burnchain_tip.block_snapshot.parent_burn_header_hash - == chain_tip.metadata.burn_header_hash - ); - } - 2 => { - let state_transition = &burnchain_tip.state_transition; - assert!(state_transition.accepted_ops.len() == 1); - assert!(state_transition.consumed_leader_keys.len() == 1); - - for op in &state_transition.accepted_ops { - match op { - LeaderKeyRegister(_op) => { - unreachable!(); - } - LeaderBlockCommit(op) => { - assert_eq!( - burnchain_tip.state_transition.consumed_leader_keys[0] - .public_key - .to_hex(), - leader_key - ); - assert_eq!(op.parent_block_ptr, 2004); - assert_eq!(op.burn_fee, BITCOIND_INT_TEST_COMMITS); - } - _ => panic!("Unexpected operation"), - } - } - - assert!( - burnchain_tip.block_snapshot.parent_burn_header_hash - == chain_tip.metadata.burn_header_hash - ); - } - 3 => { - let state_transition = &burnchain_tip.state_transition; - assert!(state_transition.accepted_ops.len() == 1); - assert!(state_transition.consumed_leader_keys.len() == 1); - - for op in &state_transition.accepted_ops { - match op { - LeaderKeyRegister(_op) => { - unreachable!(); - } - LeaderBlockCommit(op) => { - assert_eq!( - burnchain_tip.state_transition.consumed_leader_keys[0] - .public_key - .to_hex(), - leader_key - ); - assert_eq!(op.parent_block_ptr, 2005); - assert_eq!(op.burn_fee, BITCOIND_INT_TEST_COMMITS); - } - _ => panic!("Unexpected operation"), - } - } - - assert!( - burnchain_tip.block_snapshot.parent_burn_header_hash - == chain_tip.metadata.burn_header_hash - ); - } - 4 => { - let state_transition = &burnchain_tip.state_transition; - assert!(state_transition.accepted_ops.len() == 1); - assert!(state_transition.consumed_leader_keys.len() == 1); - - for op in &state_transition.accepted_ops { - match op { - LeaderKeyRegister(_op) => { - unreachable!(); - } - LeaderBlockCommit(op) => { - assert_eq!( - burnchain_tip.state_transition.consumed_leader_keys[0] - .public_key - .to_hex(), - leader_key - ); - assert_eq!(op.parent_block_ptr, 2006); - assert_eq!(op.burn_fee, BITCOIND_INT_TEST_COMMITS); - } - _ => panic!("Unexpected operation"), - } - } - - assert!( - burnchain_tip.block_snapshot.parent_burn_header_hash - == chain_tip.metadata.burn_header_hash - ); - } - 5 => { - let state_transition = &burnchain_tip.state_transition; - assert!(state_transition.accepted_ops.len() == 1); - assert!(state_transition.consumed_leader_keys.len() == 1); - - for op in &state_transition.accepted_ops { - match op { - LeaderKeyRegister(_op) => { - unreachable!(); - } - LeaderBlockCommit(op) => { - assert_eq!( - burnchain_tip.state_transition.consumed_leader_keys[0] - .public_key - .to_hex(), - leader_key - ); - assert_eq!(op.parent_block_ptr, 2007); - assert_eq!(op.burn_fee, BITCOIND_INT_TEST_COMMITS); - } - _ => panic!("Unexpected operation"), - } - } - - assert!( - burnchain_tip.block_snapshot.parent_burn_header_hash - == chain_tip.metadata.burn_header_hash - ); - } - _ => {} - } - }); - - // Use tenure's hook for submitting transactions - run_loop.callbacks.on_new_tenure(|round, _burnchain_tip, chain_tip, tenure| { - let mut chainstate_copy = tenure.open_chainstate(); - let sortdb = tenure.open_fake_sortdb(); - - match round { - 1 => { - // On round 1, publish the KV contract - // $ cat /tmp/out.clar - // (define-map store { key: (string-ascii 32) } { value: (string-ascii 32) }) - // (define-public (get-value (key (string-ascii 32))) - // (begin - // (print (concat "Getting key " key)) - // (match (map-get? store { key: key }) - // entry (ok (get value entry)) - // (err 0)))) - // (define-public (set-value (key (string-ascii 32)) (value (string-ascii 32))) - // (begin - // (print (concat "Setting key " key)) - // (map-set store { key: key } { value: value }) - // (ok 'true))) - // ./blockstack-cli --testnet publish 043ff5004e3d695060fa48ac94c96049b8c14ef441c50a184a6a3875d2a000f3 0 0 store /tmp/out.clar - let header_hash = chain_tip.block.block_hash(); - let consensus_hash = chain_tip.metadata.consensus_hash; - tenure.mem_pool.submit_raw(&mut chainstate_copy, &sortdb, &consensus_hash, &header_hash, PUBLISH_CONTRACT.to_owned(), &ExecutionCost::max_value(), - &StacksEpochId::Epoch20,).unwrap(); - }, - 2 => { - // On round 2, publish a "get:foo" transaction - // ./blockstack-cli --testnet contract-call 043ff5004e3d695060fa48ac94c96049b8c14ef441c50a184a6a3875d2a000f3 10 1 STGT7GSMZG7EA0TS6MVSKT5JC1DCDFGZWJJZXN8A store get-value -e \"foo\" - let header_hash = chain_tip.block.block_hash(); - let consensus_hash = chain_tip.metadata.consensus_hash; - let get_foo = "8080000000040021a3c334fc0ee50359353799e8b2605ac6be1fe40000000000000001000000000000000a0100b7ff8b6c20c427b4f4f09c1ad7e50027e2b076b2ddc0ab55e64ef5ea3771dd4763a79bc5a2b1a79b72ce03dd146ccf24b84942d675a815819a8b85aa8065dfaa030200000000021a21a3c334fc0ee50359353799e8b2605ac6be1fe40573746f7265096765742d76616c7565000000010d00000003666f6f"; - tenure.mem_pool.submit_raw(&mut chainstate_copy, &sortdb, &consensus_hash, &header_hash,hex_bytes(get_foo).unwrap().to_vec(), &ExecutionCost::max_value(), - &StacksEpochId::Epoch20,).unwrap(); - }, - 3 => { - // On round 3, publish a "set:foo=bar" transaction - // ./blockstack-cli --testnet contract-call 043ff5004e3d695060fa48ac94c96049b8c14ef441c50a184a6a3875d2a000f3 10 2 STGT7GSMZG7EA0TS6MVSKT5JC1DCDFGZWJJZXN8A store set-value -e \"foo\" -e \"bar\" - let header_hash = chain_tip.block.block_hash(); - let consensus_hash = chain_tip.metadata.consensus_hash; - let set_foo_bar = "8080000000040021a3c334fc0ee50359353799e8b2605ac6be1fe40000000000000002000000000000000a010142a01caf6a32b367664869182f0ebc174122a5a980937ba259d44cc3ebd280e769a53dd3913c8006ead680a6e1c98099fcd509ce94b0a4e90d9f4603b101922d030200000000021a21a3c334fc0ee50359353799e8b2605ac6be1fe40573746f7265097365742d76616c7565000000020d00000003666f6f0d00000003626172"; - tenure.mem_pool.submit_raw(&mut chainstate_copy, &sortdb, &consensus_hash, &header_hash,hex_bytes(set_foo_bar).unwrap().to_vec(), &ExecutionCost::max_value(), - &StacksEpochId::Epoch20,).unwrap(); - }, - 4 => { - // On round 4, publish a "get:foo" transaction - // ./blockstack-cli --testnet contract-call 043ff5004e3d695060fa48ac94c96049b8c14ef441c50a184a6a3875d2a000f3 10 3 STGT7GSMZG7EA0TS6MVSKT5JC1DCDFGZWJJZXN8A store get-value -e \"foo\" - let header_hash = chain_tip.block.block_hash(); - let consensus_hash = chain_tip.metadata.consensus_hash; - let get_foo = "8080000000040021a3c334fc0ee50359353799e8b2605ac6be1fe40000000000000003000000000000000a010046c2c1c345231443fef9a1f64fccfef3e1deacc342b2ab5f97612bb3742aa799038b20aea456789aca6b883e52f84a31adfee0bc2079b740464877af8f2f87d2030200000000021a21a3c334fc0ee50359353799e8b2605ac6be1fe40573746f7265096765742d76616c7565000000010d00000003666f6f"; - tenure.mem_pool.submit_raw(&mut chainstate_copy, &sortdb, &consensus_hash, &header_hash,hex_bytes(get_foo).unwrap().to_vec(), &ExecutionCost::max_value(), - &StacksEpochId::Epoch20,).unwrap(); - }, - 5 => { - // On round 5, publish a stacks transaction - // ./blockstack-cli --testnet token-transfer b1cf9cee5083f421c84d7cb53be5edf2801c3c78d63d53917aee0bdc8bd160ee01 10 0 ST195Q2HPXY576N4CT2A0R94D7DRYSX54A5X3YZTH 1000 - let header_hash = chain_tip.block.block_hash(); - let consensus_hash = chain_tip.metadata.consensus_hash; - let transfer_1000_stx = "80800000000400b71a091b4b8b7661a661c620966ab6573bc2dcd30000000000000000000000000000000a0000393810832bacd44cfc4024980876135de6b95429bdb610d5ce96a92c9ee9bfd81ec77ea0f1748c8515fc9a1589e51d8b92bf028e3e84ade1249682c05271d5b803020000000000051a525b8a36ef8a73548cd0940c248d3b71ecf4a45100000000000003e800000000000000000000000000000000000000000000000000000000000000000000"; - tenure.mem_pool.submit_raw(&mut chainstate_copy, &sortdb, &consensus_hash, &header_hash,hex_bytes(transfer_1000_stx).unwrap().to_vec(), &ExecutionCost::max_value(), - &StacksEpochId::Epoch20,).unwrap(); - }, - _ => {} - }; - }); - - // Use block's hook for asserting expectations - // In this serie of tests, the callback is fired post-burnchain-sync, post-stacks-sync - run_loop.callbacks.on_new_stacks_chain_state( - |round, burnchain_tip, chain_tip, _chain_state, _burn_dbconn| { - match round { - 0 => { - // Inspecting the chain at round 0. - // - Chain length should be 1. - assert!(chain_tip.metadata.stacks_block_height == 1); - - // Block #1 should only have 0 txs - assert!(chain_tip.block.txs.len() == 1); - - assert!( - chain_tip.block.header.block_hash() - == burnchain_tip.block_snapshot.winning_stacks_block_hash - ); - } - 1 => { - // Inspecting the chain at round 1. - // - Chain length should be 2. - assert!(chain_tip.metadata.stacks_block_height == 2); - - // Block #2 should only have 2 txs - assert!(chain_tip.block.txs.len() == 2); - - assert!( - chain_tip.block.header.block_hash() - == burnchain_tip.block_snapshot.winning_stacks_block_hash - ); - } - 2 => { - // Inspecting the chain at round 2. - // - Chain length should be 3. - assert!(chain_tip.metadata.stacks_block_height == 3); - - // Block #3 should only have 2 txs - assert!(chain_tip.block.txs.len() == 2); - - assert!( - chain_tip.block.header.block_hash() - == burnchain_tip.block_snapshot.winning_stacks_block_hash - ); - } - 3 => { - // Inspecting the chain at round 3. - // - Chain length should be 4. - assert!(chain_tip.metadata.stacks_block_height == 4); - - // Block #4 should only have 2 txs - assert!(chain_tip.block.txs.len() == 2); - - assert!( - chain_tip.block.header.block_hash() - == burnchain_tip.block_snapshot.winning_stacks_block_hash - ); - } - 4 => { - // Inspecting the chain at round 4. - // - Chain length should be 5. - assert!(chain_tip.metadata.stacks_block_height == 5); - - // Block #5 should only have 2 txs - assert!(chain_tip.block.txs.len() == 2); - - assert!( - chain_tip.block.header.block_hash() - == burnchain_tip.block_snapshot.winning_stacks_block_hash - ); - } - 5 => { - // Inspecting the chain at round 5. - // - Chain length should be 6. - assert!(chain_tip.metadata.stacks_block_height == 6); - - // Block #6 should only have 2 txs - assert!(chain_tip.block.txs.len() == 2); - - assert!( - chain_tip.block.header.block_hash() - == burnchain_tip.block_snapshot.winning_stacks_block_hash - ); - } - _ => {} - } - }, - ); - run_loop.start(num_rounds).unwrap(); -} From 34299771a8a0a582aa265c837d36fa958cce2374 Mon Sep 17 00:00:00 2001 From: Federico De Felici Date: Thu, 21 Aug 2025 11:56:50 +0200 Subject: [PATCH 09/10] chore: move btc-core-ctrl related tests from neon_integration.rs, #6250 --- stacks-node/src/tests/bitcoin_regtest.rs | 32 +++++++++++++++++ stacks-node/src/tests/neon_integrations.rs | 42 ---------------------- 2 files changed, 32 insertions(+), 42 deletions(-) diff --git a/stacks-node/src/tests/bitcoin_regtest.rs b/stacks-node/src/tests/bitcoin_regtest.rs index 078033cea4..fd625a37bc 100644 --- a/stacks-node/src/tests/bitcoin_regtest.rs +++ b/stacks-node/src/tests/bitcoin_regtest.rs @@ -195,6 +195,7 @@ mod tests { use std::path::Path; use super::*; + use crate::{BitcoinRegtestController, BurnchainController}; mod utils { use std::net::TcpListener; @@ -272,4 +273,35 @@ mod tests { assert!(!bitcoind.is_running(), "should not be running after kill!"); assert!(data_path.exists(), "data path should exists after kill!"); } + + #[test] + #[ignore] + fn test_bitcoind_restart_with_bootstrapped_chain_data() { + if env::var("BITCOIND_TEST") != Ok("1".into()) { + return; + } + + let config = utils::create_config(); + + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); + btcd_controller + .start_bitcoind() + .expect("Failed starting bitcoind"); + + let btc_controller = BitcoinRegtestController::new(config, None); + btc_controller.bootstrap_chain(201); + info!("Chain bootstrapped..."); + + btcd_controller + .stop_bitcoind() + .expect("Failed to stop bitcoind"); + + btcd_controller + .start_bitcoind() + .expect("Failed to restart bitcoind"); + + btcd_controller + .stop_bitcoind() + .expect("Failed to re-stop bitcoind"); + } } diff --git a/stacks-node/src/tests/neon_integrations.rs b/stacks-node/src/tests/neon_integrations.rs index 46f73c6f2e..4d28ddb7ca 100644 --- a/stacks-node/src/tests/neon_integrations.rs +++ b/stacks-node/src/tests/neon_integrations.rs @@ -10024,45 +10024,3 @@ fn listunspent_max_utxos() { let utxos = res.expect("Failed to get utxos"); assert_eq!(utxos.num_utxos(), 10); } - -#[test] -#[ignore] -/// Test out stopping bitcoind and restarting it -fn start_stop_bitcoind() { - if env::var("BITCOIND_TEST") != Ok("1".into()) { - return; - } - - let (mut conf, _miner_account) = neon_integration_test_conf(); - let prom_port = gen_random_port(); - let localhost = "127.0.0.1"; - let prom_bind = format!("{localhost}:{prom_port}"); - conf.node.prometheus_bind = Some(prom_bind); - - conf.burnchain.max_rbf = 1000000; - - let mut btcd_controller = BitcoinCoreController::from_stx_config(&conf); - btcd_controller - .start_bitcoind() - .expect("Failed starting bitcoind"); - - let btc_regtest_controller = BitcoinRegtestController::new(conf, None); - - btc_regtest_controller.bootstrap_chain(201); - - eprintln!("Chain bootstrapped..."); - - btcd_controller - .stop_bitcoind() - .expect("Failed to stop bitcoind"); - - thread::sleep(Duration::from_secs(5)); - - btcd_controller - .start_bitcoind() - .expect("Failed to start bitcoind"); - - btcd_controller - .stop_bitcoind() - .expect("Failed to stop bitcoind"); -} From 4a9dfd9c337630154a31e16c76b285e0d6587b68 Mon Sep 17 00:00:00 2001 From: Federico De Felici Date: Thu, 21 Aug 2025 11:57:13 +0200 Subject: [PATCH 10/10] chore: introduced bitcoin module structure, #6250 --- .../bitcoin/core_controller.rs} | 117 ---------------- stacks-node/src/burnchains/bitcoin/mod.rs | 21 +++ .../burnchains/bitcoin_regtest_controller.rs | 4 +- stacks-node/src/burnchains/mod.rs | 1 + .../bitcoin/core_controller_integrations.rs | 132 ++++++++++++++++++ stacks-node/src/tests/bitcoin/mod.rs | 20 +++ .../src/tests/bitcoin_rpc_integrations.rs | 2 +- stacks-node/src/tests/epoch_205.rs | 2 +- stacks-node/src/tests/epoch_21.rs | 2 +- stacks-node/src/tests/epoch_22.rs | 2 +- stacks-node/src/tests/epoch_23.rs | 2 +- stacks-node/src/tests/epoch_24.rs | 2 +- stacks-node/src/tests/mod.rs | 2 +- .../src/tests/nakamoto_integrations.rs | 2 +- stacks-node/src/tests/neon_integrations.rs | 2 +- stacks-node/src/tests/signer/mod.rs | 2 +- stacks-node/src/tests/stackerdb.rs | 2 +- 17 files changed, 187 insertions(+), 130 deletions(-) rename stacks-node/src/{tests/bitcoin_regtest.rs => burnchains/bitcoin/core_controller.rs} (62%) create mode 100644 stacks-node/src/burnchains/bitcoin/mod.rs create mode 100644 stacks-node/src/tests/bitcoin/core_controller_integrations.rs create mode 100644 stacks-node/src/tests/bitcoin/mod.rs diff --git a/stacks-node/src/tests/bitcoin_regtest.rs b/stacks-node/src/burnchains/bitcoin/core_controller.rs similarity index 62% rename from stacks-node/src/tests/bitcoin_regtest.rs rename to stacks-node/src/burnchains/bitcoin/core_controller.rs index fd625a37bc..dee30556fe 100644 --- a/stacks-node/src/tests/bitcoin_regtest.rs +++ b/stacks-node/src/burnchains/bitcoin/core_controller.rs @@ -19,7 +19,6 @@ //! including utilities to quickly start and stop instances for testing or //! development purposes. -use std::env; use std::io::{BufRead, BufReader}; use std::process::{Child, Command, Stdio}; @@ -189,119 +188,3 @@ impl Drop for BitcoinCoreController { self.kill_bitcoind().unwrap(); } } - -#[cfg(test)] -mod tests { - use std::path::Path; - - use super::*; - use crate::{BitcoinRegtestController, BurnchainController}; - mod utils { - use std::net::TcpListener; - - use stacks::util::get_epoch_time_nanos; - - use super::*; - - pub fn create_config() -> Config { - let mut config = Config::default(); - config.burnchain.magic_bytes = "T3".as_bytes().into(); - config.burnchain.username = Some(String::from("user")); - config.burnchain.password = Some(String::from("12345")); - // overriding default "0.0.0.0" because doesn't play nicely on Windows. - config.burnchain.peer_host = String::from("127.0.0.1"); - // avoiding peer port biding to reduce the number of ports to bind to. - config.burnchain.peer_port = BURNCHAIN_CONFIG_PEER_PORT_DISABLED; - - //Ask the OS for a free port. Not guaranteed to stay free, - //after TcpListner is dropped, but good enough for testing - //and starting bitcoind right after config is created - let tmp_listener = - TcpListener::bind("127.0.0.1:0").expect("Failed to bind to get a free port"); - let port = tmp_listener.local_addr().unwrap().port(); - - config.burnchain.rpc_port = port; - - let now = get_epoch_time_nanos(); - let dir = format!("/tmp/regtest-ctrl-{port}-{now}"); - config.node.working_dir = dir; - - config - } - } - - #[test] - #[ignore] - fn test_bitcoind_start_and_stop() { - if env::var("BITCOIND_TEST") != Ok("1".into()) { - return; - } - - let config = utils::create_config(); - let data_path_str = config.get_burnchain_path_str(); - let data_path = Path::new(data_path_str.as_str()); - - let mut bitcoind = BitcoinCoreController::from_stx_config(&config); - - bitcoind.start_bitcoind().expect("should start!"); - assert!(bitcoind.is_running(), "should be running after start!"); - assert!(data_path.exists(), "data path should exists after start!"); - - bitcoind.stop_bitcoind().expect("should stop!"); - assert!(!bitcoind.is_running(), "should not be running after stop!"); - assert!(data_path.exists(), "data path should exists after stop!"); - } - - #[test] - #[ignore] - fn test_bitcoind_start_and_kill() { - if env::var("BITCOIND_TEST") != Ok("1".into()) { - return; - } - - let config = utils::create_config(); - let data_path_str = config.get_burnchain_path_str(); - let data_path = Path::new(data_path_str.as_str()); - - let mut bitcoind = BitcoinCoreController::from_stx_config(&config); - - bitcoind.start_bitcoind().expect("should start!"); - assert!(bitcoind.is_running(), "should be running after start!"); - assert!(data_path.exists(), "data path should exists after start!"); - - bitcoind.kill_bitcoind().expect("should kill!"); - assert!(!bitcoind.is_running(), "should not be running after kill!"); - assert!(data_path.exists(), "data path should exists after kill!"); - } - - #[test] - #[ignore] - fn test_bitcoind_restart_with_bootstrapped_chain_data() { - if env::var("BITCOIND_TEST") != Ok("1".into()) { - return; - } - - let config = utils::create_config(); - - let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); - btcd_controller - .start_bitcoind() - .expect("Failed starting bitcoind"); - - let btc_controller = BitcoinRegtestController::new(config, None); - btc_controller.bootstrap_chain(201); - info!("Chain bootstrapped..."); - - btcd_controller - .stop_bitcoind() - .expect("Failed to stop bitcoind"); - - btcd_controller - .start_bitcoind() - .expect("Failed to restart bitcoind"); - - btcd_controller - .stop_bitcoind() - .expect("Failed to re-stop bitcoind"); - } -} diff --git a/stacks-node/src/burnchains/bitcoin/mod.rs b/stacks-node/src/burnchains/bitcoin/mod.rs new file mode 100644 index 0000000000..26119f5588 --- /dev/null +++ b/stacks-node/src/burnchains/bitcoin/mod.rs @@ -0,0 +1,21 @@ +// Copyright (C) 2025 Stacks Open Internet Foundation +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Bitcoin Module +//! +//! Entry point for all bitcoin related modules + +#[cfg(test)] +pub mod core_controller; diff --git a/stacks-node/src/burnchains/bitcoin_regtest_controller.rs b/stacks-node/src/burnchains/bitcoin_regtest_controller.rs index dad429acda..3b6644ab0b 100644 --- a/stacks-node/src/burnchains/bitcoin_regtest_controller.rs +++ b/stacks-node/src/burnchains/bitcoin_regtest_controller.rs @@ -2823,7 +2823,7 @@ mod tests { use stacks_common::util::secp256k1::Secp256k1PrivateKey; use super::*; - use crate::tests::bitcoin_regtest::BitcoinCoreController; + use crate::burnchains::bitcoin::core_controller::BitcoinCoreController; use crate::Keychain; mod utils { @@ -2834,7 +2834,7 @@ mod tests { use stacks::util::vrf::{VRFPrivateKey, VRFPublicKey}; use super::*; - use crate::tests::bitcoin_regtest::BURNCHAIN_CONFIG_PEER_PORT_DISABLED; + use crate::burnchains::bitcoin::core_controller::BURNCHAIN_CONFIG_PEER_PORT_DISABLED; use crate::util::get_epoch_time_nanos; pub fn create_config() -> Config { diff --git a/stacks-node/src/burnchains/mod.rs b/stacks-node/src/burnchains/mod.rs index 8bca0d1b85..aedad169a8 100644 --- a/stacks-node/src/burnchains/mod.rs +++ b/stacks-node/src/burnchains/mod.rs @@ -1,3 +1,4 @@ +pub mod bitcoin; pub mod bitcoin_regtest_controller; pub mod mocknet_controller; pub mod rpc; diff --git a/stacks-node/src/tests/bitcoin/core_controller_integrations.rs b/stacks-node/src/tests/bitcoin/core_controller_integrations.rs new file mode 100644 index 0000000000..fde788a2ea --- /dev/null +++ b/stacks-node/src/tests/bitcoin/core_controller_integrations.rs @@ -0,0 +1,132 @@ +// Copyright (C) 2025 Stacks Open Internet Foundation +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Integration tests for [`BitcoinCoreController`] + +use std::env; +use std::path::Path; + +use crate::burnchains::bitcoin::core_controller::BitcoinCoreController; +use crate::{BitcoinRegtestController, BurnchainController}; + +mod utils { + use std::net::TcpListener; + + use stacks::config::Config; + use stacks::util::get_epoch_time_nanos; + + use crate::burnchains::bitcoin::core_controller::BURNCHAIN_CONFIG_PEER_PORT_DISABLED; + + pub fn create_config() -> Config { + let mut config = Config::default(); + config.burnchain.magic_bytes = "T3".as_bytes().into(); + config.burnchain.username = Some(String::from("user")); + config.burnchain.password = Some(String::from("12345")); + // overriding default "0.0.0.0" because doesn't play nicely on Windows. + config.burnchain.peer_host = String::from("127.0.0.1"); + // avoiding peer port biding to reduce the number of ports to bind to. + config.burnchain.peer_port = BURNCHAIN_CONFIG_PEER_PORT_DISABLED; + + //Ask the OS for a free port. Not guaranteed to stay free, + //after TcpListner is dropped, but good enough for testing + //and starting bitcoind right after config is created + let tmp_listener = + TcpListener::bind("127.0.0.1:0").expect("Failed to bind to get a free port"); + let port = tmp_listener.local_addr().unwrap().port(); + + config.burnchain.rpc_port = port; + + let now = get_epoch_time_nanos(); + let dir = format!("/tmp/regtest-ctrl-{port}-{now}"); + config.node.working_dir = dir; + + config + } +} + +#[test] +#[ignore] +fn test_bitcoind_start_and_stop() { + if env::var("BITCOIND_TEST") != Ok("1".into()) { + return; + } + + let config = utils::create_config(); + let data_path_str = config.get_burnchain_path_str(); + let data_path = Path::new(data_path_str.as_str()); + + let mut bitcoind = BitcoinCoreController::from_stx_config(&config); + + bitcoind.start_bitcoind().expect("should start!"); + assert!(bitcoind.is_running(), "should be running after start!"); + assert!(data_path.exists(), "data path should exists after start!"); + + bitcoind.stop_bitcoind().expect("should stop!"); + assert!(!bitcoind.is_running(), "should not be running after stop!"); + assert!(data_path.exists(), "data path should exists after stop!"); +} + +#[test] +#[ignore] +fn test_bitcoind_start_and_kill() { + if env::var("BITCOIND_TEST") != Ok("1".into()) { + return; + } + + let config = utils::create_config(); + let data_path_str = config.get_burnchain_path_str(); + let data_path = Path::new(data_path_str.as_str()); + + let mut bitcoind = BitcoinCoreController::from_stx_config(&config); + + bitcoind.start_bitcoind().expect("should start!"); + assert!(bitcoind.is_running(), "should be running after start!"); + assert!(data_path.exists(), "data path should exists after start!"); + + bitcoind.kill_bitcoind().expect("should kill!"); + assert!(!bitcoind.is_running(), "should not be running after kill!"); + assert!(data_path.exists(), "data path should exists after kill!"); +} + +#[test] +#[ignore] +fn test_bitcoind_restart_with_bootstrapped_chain_data() { + if env::var("BITCOIND_TEST") != Ok("1".into()) { + return; + } + + let config = utils::create_config(); + + let mut btcd_controller = BitcoinCoreController::from_stx_config(&config); + btcd_controller + .start_bitcoind() + .expect("Failed starting bitcoind"); + + let btc_controller = BitcoinRegtestController::new(config, None); + btc_controller.bootstrap_chain(201); + info!("Chain bootstrapped..."); + + btcd_controller + .stop_bitcoind() + .expect("Failed to stop bitcoind"); + + btcd_controller + .start_bitcoind() + .expect("Failed to restart bitcoind"); + + btcd_controller + .stop_bitcoind() + .expect("Failed to re-stop bitcoind"); +} diff --git a/stacks-node/src/tests/bitcoin/mod.rs b/stacks-node/src/tests/bitcoin/mod.rs new file mode 100644 index 0000000000..9e7b9792fe --- /dev/null +++ b/stacks-node/src/tests/bitcoin/mod.rs @@ -0,0 +1,20 @@ +// Copyright (C) 2025 Stacks Open Internet Foundation +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +//! Bitcoin Integration Test Module +//! +//! Entry point for all bitcoin related test modules + +mod core_controller_integrations; diff --git a/stacks-node/src/tests/bitcoin_rpc_integrations.rs b/stacks-node/src/tests/bitcoin_rpc_integrations.rs index 05135c866e..433e5f5b0a 100644 --- a/stacks-node/src/tests/bitcoin_rpc_integrations.rs +++ b/stacks-node/src/tests/bitcoin_rpc_integrations.rs @@ -22,12 +22,12 @@ use stacks::burnchains::bitcoin::BitcoinNetworkType; use stacks::core::BITCOIN_REGTEST_FIRST_BLOCK_HASH; use stacks::types::chainstate::BurnchainHeaderHash; +use crate::burnchains::bitcoin::core_controller::BitcoinCoreController; use crate::burnchains::rpc::bitcoin_rpc_client::test_utils::AddressType; use crate::burnchains::rpc::bitcoin_rpc_client::{ BitcoinRpcClient, BitcoinRpcClientError, ImportDescriptorsRequest, Timestamp, }; use crate::burnchains::rpc::rpc_transport::RpcError; -use crate::tests::bitcoin_regtest::BitcoinCoreController; mod utils { use std::net::TcpListener; diff --git a/stacks-node/src/tests/epoch_205.rs b/stacks-node/src/tests/epoch_205.rs index 3643f6ffb6..32d9bf793a 100644 --- a/stacks-node/src/tests/epoch_205.rs +++ b/stacks-node/src/tests/epoch_205.rs @@ -24,7 +24,7 @@ use stacks_common::codec::StacksMessageCodec; use stacks_common::types::chainstate::{BlockHeaderHash, BurnchainHeaderHash, VRFSeed}; use stacks_common::util::hash::hex_bytes; -use crate::tests::bitcoin_regtest::BitcoinCoreController; +use crate::burnchains::bitcoin::core_controller::BitcoinCoreController; use crate::tests::neon_integrations::*; use crate::tests::{run_until_burnchain_height, select_transactions_where}; use crate::{neon, BitcoinRegtestController, BurnchainController, Keychain}; diff --git a/stacks-node/src/tests/epoch_21.rs b/stacks-node/src/tests/epoch_21.rs index cf3bd98471..b742234001 100644 --- a/stacks-node/src/tests/epoch_21.rs +++ b/stacks-node/src/tests/epoch_21.rs @@ -36,13 +36,13 @@ use stacks_common::util::hash::{Hash160, Sha256Sum}; use stacks_common::util::secp256k1::{Secp256k1PrivateKey, Secp256k1PublicKey}; use stacks_common::util::sleep_ms; +use crate::burnchains::bitcoin::core_controller::BitcoinCoreController; use crate::burnchains::bitcoin_regtest_controller::UTXO; use crate::neon::RunLoopCounter; use crate::operations::BurnchainOpSigner; use crate::stacks_common::address::AddressHashMode; use crate::stacks_common::types::Address; use crate::stacks_common::util::hash::{bytes_to_hex, hex_bytes}; -use crate::tests::bitcoin_regtest::BitcoinCoreController; use crate::tests::neon_integrations::*; use crate::tests::*; use crate::{neon, BitcoinRegtestController, BurnchainController, Keychain}; diff --git a/stacks-node/src/tests/epoch_22.rs b/stacks-node/src/tests/epoch_22.rs index fdab5cf356..a306b430f4 100644 --- a/stacks-node/src/tests/epoch_22.rs +++ b/stacks-node/src/tests/epoch_22.rs @@ -19,10 +19,10 @@ use stacks_common::util::secp256k1::Secp256k1PublicKey; use stacks_common::util::sleep_ms; use super::neon_integrations::get_account; +use crate::burnchains::bitcoin::core_controller::BitcoinCoreController; use crate::neon_node::StacksNode; use crate::stacks_common::types::Address; use crate::stacks_common::util::hash::bytes_to_hex; -use crate::tests::bitcoin_regtest::BitcoinCoreController; use crate::tests::epoch_21::wait_pox_stragglers; use crate::tests::neon_integrations::*; use crate::tests::*; diff --git a/stacks-node/src/tests/epoch_23.rs b/stacks-node/src/tests/epoch_23.rs index 1689632834..75b9cb5183 100644 --- a/stacks-node/src/tests/epoch_23.rs +++ b/stacks-node/src/tests/epoch_23.rs @@ -24,7 +24,7 @@ use stacks::core::test_util::make_contract_call; use stacks::core::{self, EpochList, STACKS_EPOCH_MAX}; use stacks_common::util::sleep_ms; -use crate::tests::bitcoin_regtest::BitcoinCoreController; +use crate::burnchains::bitcoin::core_controller::BitcoinCoreController; use crate::tests::neon_integrations::*; use crate::tests::*; use crate::{neon, BitcoinRegtestController, BurnchainController}; diff --git a/stacks-node/src/tests/epoch_24.rs b/stacks-node/src/tests/epoch_24.rs index cbb0d6579a..d979fd2fee 100644 --- a/stacks-node/src/tests/epoch_24.rs +++ b/stacks-node/src/tests/epoch_24.rs @@ -37,8 +37,8 @@ use stacks_common::util::hash::{bytes_to_hex, hex_bytes, Hash160}; use stacks_common::util::secp256k1::Secp256k1PublicKey; use stacks_common::util::sleep_ms; +use crate::burnchains::bitcoin::core_controller::BitcoinCoreController; use crate::stacks_common::codec::StacksMessageCodec; -use crate::tests::bitcoin_regtest::BitcoinCoreController; use crate::tests::neon_integrations::{ get_account, get_chain_info, get_pox_info, neon_integration_test_conf, next_block_and_wait, submit_tx, test_observer, wait_for_runloop, diff --git a/stacks-node/src/tests/mod.rs b/stacks-node/src/tests/mod.rs index 6e35c9bb97..567eba245d 100644 --- a/stacks-node/src/tests/mod.rs +++ b/stacks-node/src/tests/mod.rs @@ -44,7 +44,7 @@ use crate::tests::neon_integrations::{get_chain_info, next_block_and_wait}; use crate::BitcoinRegtestController; mod atlas; -pub mod bitcoin_regtest; +mod bitcoin; mod bitcoin_rpc_integrations; mod epoch_205; mod epoch_21; diff --git a/stacks-node/src/tests/nakamoto_integrations.rs b/stacks-node/src/tests/nakamoto_integrations.rs index 3b1ec13477..768b4686b3 100644 --- a/stacks-node/src/tests/nakamoto_integrations.rs +++ b/stacks-node/src/tests/nakamoto_integrations.rs @@ -114,7 +114,7 @@ use stacks_signer::chainstate::ProposalEvalConfig; use stacks_signer::signerdb::{BlockInfo, BlockState, ExtraBlockInfo, SignerDb}; use stacks_signer::v0::SpawnedSigner; -use super::bitcoin_regtest::BitcoinCoreController; +use crate::burnchains::bitcoin::core_controller::BitcoinCoreController; use crate::nakamoto_node::miner::{ fault_injection_stall_miner, fault_injection_unstall_miner, TEST_BLOCK_ANNOUNCE_STALL, TEST_BROADCAST_PROPOSAL_STALL, TEST_P2P_BROADCAST_SKIP, TEST_P2P_BROADCAST_STALL, diff --git a/stacks-node/src/tests/neon_integrations.rs b/stacks-node/src/tests/neon_integrations.rs index 4d28ddb7ca..6adbeea23a 100644 --- a/stacks-node/src/tests/neon_integrations.rs +++ b/stacks-node/src/tests/neon_integrations.rs @@ -84,8 +84,8 @@ use stacks_common::util::{get_epoch_time_ms, get_epoch_time_secs, sleep_ms}; use tokio::io::{AsyncReadExt as _, AsyncWriteExt as _}; use tokio::net::{TcpListener, TcpStream}; -use super::bitcoin_regtest::BitcoinCoreController; use super::{ADDR_4, SK_1, SK_2, SK_3}; +use crate::burnchains::bitcoin::core_controller::BitcoinCoreController; use crate::burnchains::bitcoin_regtest_controller::{self, addr2str, BitcoinRPCRequest, UTXO}; use crate::neon_node::RelayerThread; use crate::operations::BurnchainOpSigner; diff --git a/stacks-node/src/tests/signer/mod.rs b/stacks-node/src/tests/signer/mod.rs index ac40b3a27b..8df700c7b8 100644 --- a/stacks-node/src/tests/signer/mod.rs +++ b/stacks-node/src/tests/signer/mod.rs @@ -70,9 +70,9 @@ use super::nakamoto_integrations::{ use super::neon_integrations::{ copy_dir_all, get_account, get_sortition_info_ch, submit_tx_fallible, Account, }; +use crate::burnchains::bitcoin::core_controller::BitcoinCoreController; use crate::neon::Counters; use crate::run_loop::boot_nakamoto; -use crate::tests::bitcoin_regtest::BitcoinCoreController; use crate::tests::nakamoto_integrations::{ naka_neon_integration_conf, next_block_and_wait_for_commits, POX_4_DEFAULT_STACKER_BALANCE, }; diff --git a/stacks-node/src/tests/stackerdb.rs b/stacks-node/src/tests/stackerdb.rs index a4e9f381be..2fc840d4f5 100644 --- a/stacks-node/src/tests/stackerdb.rs +++ b/stacks-node/src/tests/stackerdb.rs @@ -24,7 +24,7 @@ use stacks_common::types::chainstate::StacksAddress; use stacks_common::util::hash::Sha512Trunc256Sum; use {reqwest, serde_json}; -use super::bitcoin_regtest::BitcoinCoreController; +use crate::burnchains::bitcoin::core_controller::BitcoinCoreController; use crate::burnchains::BurnchainController; use crate::tests::neon_integrations::{ neon_integration_test_conf, next_block_and_wait, submit_tx, test_observer, wait_for_runloop,