Add test script to contrib folder - #33
Open
rustaceanrob wants to merge 1 commit into
Open
Conversation
xyzconstant
reviewed
Jul 25, 2026
xyzconstant
left a comment
Contributor
There was a problem hiding this comment.
tACK 4992ba0
Tested in macOS and Ubuntu. LGTM, left one inline nit.
Also, I think a good addition would be a datadir env config, so it doesn't mess with the default datadir and always runs over a fresh setup.
I have this diff locally with that datadir option, and it works, also the fallback datadir path is unaffected:
diff --git a/contrib/run-tests.sh b/contrib/run-tests.sh
index 4e7c4a9..1076a5d 100755
--- a/contrib/run-tests.sh
+++ b/contrib/run-tests.sh
@@ -15,6 +15,7 @@ fi
BITCOIN_SRC=$(cd "$1" && pwd)
REPO_ROOT=$(cd "$(dirname "$0")/.." && pwd)
BITCOIN_BIN="$BITCOIN_SRC/build/bin/bitcoin"
+TEMP_DATADIR=/tmp/capnp-types-tests
echo "==> Building Bitcoin Core in $BITCOIN_SRC"
(
@@ -26,17 +27,19 @@ echo "==> Building Bitcoin Core in $BITCOIN_SRC"
stop_bitcoin() {
if [ -n "${BITCOIN_STARTED:-}" ]; then
echo "==> Stopping bitcoin"
- "$BITCOIN_BIN" rpc -chain=regtest stop || true
+ "$BITCOIN_BIN" rpc -chain=regtest -datadir="$TEMP_DATADIR" stop || true
fi
}
trap stop_bitcoin EXIT
echo "==> Starting bitcoin node (regtest, IPC)"
-"$BITCOIN_BIN" node -chain=regtest -ipcbind=unix -server -debug=ipc -daemon
+rm -rf "$TEMP_DATADIR"
+mkdir -p "$TEMP_DATADIR"
+"$BITCOIN_BIN" node -chain=regtest -ipcbind=unix -server -debug=ipc -datadir="$TEMP_DATADIR" -daemon
BITCOIN_STARTED=1
echo "==> Running cargo test"
(
cd "$REPO_ROOT"
- BITCOIN_BIN="$BITCOIN_BIN" cargo test
+ BITCOIN_BIN="$BITCOIN_BIN" BITCOIN_DATADIR="$TEMP_DATADIR" cargo test
)
diff --git a/tests/util/bitcoin_core.rs b/tests/util/bitcoin_core.rs
index b830e16..1efebab 100644
--- a/tests/util/bitcoin_core.rs
+++ b/tests/util/bitcoin_core.rs
@@ -5,7 +5,8 @@ use std::{
};
use crate::util::bitcoin_core_wallet::{
- bitcoin_rpc_json, bitcoin_test_wallet, ensure_wallet_loaded, mine_blocks_to_new_address,
+ bitcoin_datadir, bitcoin_rpc_json, bitcoin_test_wallet, ensure_wallet_loaded,
+ mine_blocks_to_new_address,
};
use bitcoin_capnp_types::{
init_capnp::init,
@@ -23,15 +24,20 @@ use tokio_util::compat::{Compat, TokioAsyncReadCompatExt, TokioAsyncWriteCompatE
static CHAIN_SETUP: Once = Once::new();
pub fn unix_socket_path() -> PathBuf {
- let home_dir_string = std::env::var("HOME").unwrap();
- let home_dir = home_dir_string.parse::<PathBuf>().unwrap();
- let bitcoin_dir = if cfg!(target_os = "macos") {
- home_dir
- .join("Library")
- .join("Application Support")
- .join("Bitcoin")
- } else {
- home_dir.join(".bitcoin")
+ let bitcoin_dir = match bitcoin_datadir() {
+ Some(datadir) => datadir.parse::<PathBuf>().unwrap(),
+ None => {
+ let home_dir_string = std::env::var("HOME").unwrap();
+ let home_dir = home_dir_string.parse::<PathBuf>().unwrap();
+ if cfg!(target_os = "macos") {
+ home_dir
+ .join("Library")
+ .join("Application Support")
+ .join("Bitcoin")
+ } else {
+ home_dir.join(".bitcoin")
+ }
+ }
};
let regtest_dir = bitcoin_dir.join("regtest");
regtest_dir.join("node.sock")
diff --git a/tests/util/bitcoin_core_wallet.rs b/tests/util/bitcoin_core_wallet.rs
index 9c37fdf..e8fb4db 100644
--- a/tests/util/bitcoin_core_wallet.rs
+++ b/tests/util/bitcoin_core_wallet.rs
@@ -9,6 +9,10 @@ fn bitcoin_bin() -> String {
std::env::var("BITCOIN_BIN").unwrap_or_else(|_| "bitcoin".to_owned())
}
+pub fn bitcoin_datadir() -> Option<String> {
+ std::env::var("BITCOIN_DATADIR").ok()
+}
+
fn bitcoin_rpc(wallet: Option<&str>, args: &[&str]) -> Result<String, String> {
let owned_args: Vec<String> = args.iter().map(|arg| (*arg).to_owned()).collect();
bitcoin_rpc_owned(wallet, &owned_args)
@@ -29,6 +33,9 @@ pub fn bitcoin_test_wallet() -> String {
fn bitcoin_rpc_owned(wallet: Option<&str>, args: &[String]) -> Result<String, String> {
let mut command = Command::new(bitcoin_bin());
command.arg("rpc").arg("-chain=regtest").arg("-rpcwait");
+ if let Some(datadir) = bitcoin_datadir() {
+ command.arg(format!("-datadir={datadir}"));
+ }
if let Some(wallet) = wallet {
command.arg(format!("-rpcwallet={wallet}"));
}Overall, I think this script is fine since it simplifies the development workflow.
| # Build Bitcoin Core, launch a regtest node with IPC enabled, run the | ||
| # integration test suite against it, and shut the node down. | ||
| # | ||
| # Usage: contrib/run-integration-tests.sh <path-to-bitcoin-source> |
Contributor
There was a problem hiding this comment.
Suggested change
| # Usage: contrib/run-integration-tests.sh <path-to-bitcoin-source> | |
| # Usage: contrib/run-tests.sh <path-to-bitcoin-source> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Completing each step to run the integration tests isn't great, and all that is needed is a path to the bitcoin core source code, so this adds a shell script to build and run everything in a single script.