Add scripts/test.sh — install deps + run unit + functional tests.
One-shot entry point to verify the nyc3-source import builds and passes. Tomorrow's first step will be: bash scripts/test.sh It auto-installs apt-get deps, runs autogen + configure, builds the test_bitcoin binary, and runs both the boost unit suite (src/test/, 70 files) and the python functional suite (test/functional/, 115 files). Logs land in .test-logs/test-<timestamp>.log. Flag summary: --unit only unit tests --func only functional tests --quick alias for --unit --no-build assume build/ already populated --clean nuke build/ first
This commit is contained in:
@@ -0,0 +1,28 @@
|
|||||||
|
# scripts/
|
||||||
|
|
||||||
|
## test.sh
|
||||||
|
|
||||||
|
`bash scripts/test.sh` — install deps, build, and run the CAC3 (nyc3-source)
|
||||||
|
test suite end-to-end. Logs go to `.test-logs/test-<timestamp>.log`.
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
- `--unit` — only `src/test/` boost unit tests
|
||||||
|
- `--func` — only `test/functional/` python tests
|
||||||
|
- `--quick` — alias for `--unit`
|
||||||
|
- `--no-build` — skip autogen/configure/make (assumes `build/` already populated)
|
||||||
|
- `--clean` — nuke `build/` before starting
|
||||||
|
|
||||||
|
The script auto-installs Debian/Ubuntu deps via apt-get. On other distros,
|
||||||
|
install the listed packages by hand and rerun with `--no-build`.
|
||||||
|
|
||||||
|
## What this verifies
|
||||||
|
|
||||||
|
The nyc3 → cac3 source import is sound. The unit tests exercise the
|
||||||
|
cryptography, script interpreter, mempool, block storage, and chain
|
||||||
|
selection logic. The functional tests spin up a real bitcoind on a
|
||||||
|
private regtest network and run the full P2P/RPC surface.
|
||||||
|
|
||||||
|
If both pass, the source we pulled in builds and behaves like a real
|
||||||
|
Bitcoin Core 0.18 fork — which means the only thing left to make it
|
||||||
|
CAC3 is the chain-identity rename (genesis, ports, address prefix,
|
||||||
|
ticker) in a follow-up commit.
|
||||||
Executable
+158
@@ -0,0 +1,158 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# scripts/test.sh — install test deps and run the CAC3 (nyc3-source) test suite.
|
||||||
|
#
|
||||||
|
# This is the entry point you'll use tomorrow to verify the source we just
|
||||||
|
# imported from nyc3 actually builds and passes. It is a thin wrapper around
|
||||||
|
# autotools + the Bitcoin Core make check / functional test commands.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# bash scripts/test.sh # full suite (unit + functional)
|
||||||
|
# bash scripts/test.sh --unit # only src/test/ boost unit tests
|
||||||
|
# bash scripts/test.sh --func # only test/functional/ python tests
|
||||||
|
# bash scripts/test.sh --quick # unit tests only, no functional
|
||||||
|
# bash scripts/test.sh --no-build # skip the autogen/configure step
|
||||||
|
# bash scripts/test.sh --clean # nuke build/ and start over
|
||||||
|
#
|
||||||
|
# Exit code 0 = all tests passed. Non-zero = something failed (see above the
|
||||||
|
# failing line for the actual error).
|
||||||
|
#
|
||||||
|
# Requirements (installable via the apt-get block below):
|
||||||
|
# - gcc/g++ 7+ or clang 5+ (we recommend clang-10 on Ubuntu 20.04+)
|
||||||
|
# - autotools (autoconf, automake, libtool, pkg-config)
|
||||||
|
# - boost ≥1.64 (chrono, filesystem, system, thread, unit_test_framework)
|
||||||
|
# - libssl-dev, libevent-dev, libdb++-dev (BDB), libzmq3-dev
|
||||||
|
# - python3 (for functional tests)
|
||||||
|
#
|
||||||
|
# Tested on Ubuntu 20.04 / 22.04 / Debian 11.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REPO_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
BUILD_DIR="${REPO_ROOT}/build"
|
||||||
|
LOG_DIR="${REPO_ROOT}/.test-logs"
|
||||||
|
JOBS="$(nproc 2>/dev/null || echo 2)"
|
||||||
|
|
||||||
|
# Defaults
|
||||||
|
RUN_UNIT=1
|
||||||
|
RUN_FUNC=1
|
||||||
|
DO_BUILD=1
|
||||||
|
DO_CLEAN=0
|
||||||
|
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
--unit) RUN_UNIT=1; RUN_FUNC=0 ;;
|
||||||
|
--func) RUN_UNIT=0; RUN_FUNC=1 ;;
|
||||||
|
--quick) RUN_UNIT=1; RUN_FUNC=0 ;;
|
||||||
|
--no-build) DO_BUILD=0 ;;
|
||||||
|
--clean) DO_CLEAN=1 ;;
|
||||||
|
--help|-h)
|
||||||
|
sed -n '2,20p' "$0"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*) echo "unknown flag: $arg (try --help)"; exit 2 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
mkdir -p "$LOG_DIR"
|
||||||
|
STAMP="$(date -u +%Y%m%dT%H%M%SZ)"
|
||||||
|
RUN_LOG="$LOG_DIR/test-$STAMP.log"
|
||||||
|
echo "=== cac3 test runner — log: $RUN_LOG ==="
|
||||||
|
exec > >(tee -a "$RUN_LOG") 2>&1
|
||||||
|
|
||||||
|
banner() {
|
||||||
|
echo
|
||||||
|
echo "============================================================"
|
||||||
|
echo " $*"
|
||||||
|
echo "============================================================"
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- 0. install deps -------------------------------------------------------
|
||||||
|
banner "0. installing build dependencies (apt-get)"
|
||||||
|
if command -v apt-get >/dev/null 2>&1; then
|
||||||
|
if [ "$(id -u)" = "0" ]; then
|
||||||
|
SUDO=""
|
||||||
|
else
|
||||||
|
SUDO="sudo"
|
||||||
|
fi
|
||||||
|
$SUDO apt-get update
|
||||||
|
$SUDO apt-get install -y --no-install-recommends \
|
||||||
|
build-essential \
|
||||||
|
clang \
|
||||||
|
clang-tools-extra \
|
||||||
|
autoconf automake libtool pkg-config \
|
||||||
|
libssl-dev libevent-dev libboost-all-dev libdb++-dev libzmq3-dev \
|
||||||
|
libsqlite3-dev \
|
||||||
|
python3 python3-pip
|
||||||
|
else
|
||||||
|
echo " (skipping apt-get — non-Debian system; please install deps manually)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 1. clean --------------------------------------------------------------
|
||||||
|
if [ "$DO_CLEAN" = "1" ]; then
|
||||||
|
banner "1. cleaning build/"
|
||||||
|
rm -rf "$BUILD_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 2. autogen + configure -----------------------------------------------
|
||||||
|
if [ "$DO_BUILD" = "1" ]; then
|
||||||
|
banner "2. autogen + configure"
|
||||||
|
cd "$REPO_ROOT"
|
||||||
|
./autogen.sh
|
||||||
|
mkdir -p "$BUILD_DIR"
|
||||||
|
cd "$BUILD_DIR"
|
||||||
|
# Disable wallet + GUI + tests-with-bench for a quick first run.
|
||||||
|
# Re-enable selectively as we go.
|
||||||
|
../configure \
|
||||||
|
--prefix="$BUILD_DIR/prefix" \
|
||||||
|
--disable-bench \
|
||||||
|
--disable-wallet \
|
||||||
|
--without-gui \
|
||||||
|
--with-incompatible-bdb \
|
||||||
|
CC=clang CXX=clang++ \
|
||||||
|
CXXFLAGS="-stdlib=libstdc++" \
|
||||||
|
LDFLAGS="-lubsan"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 3. build the test binary ----------------------------------------------
|
||||||
|
if [ "$DO_BUILD" = "1" ]; then
|
||||||
|
banner "3. building test binary (jobs=$JOBS)"
|
||||||
|
cd "$BUILD_DIR"
|
||||||
|
make -j"$JOBS" 2>&1 | tail -50
|
||||||
|
echo " build OK"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 4. run unit tests (boost test framework) ------------------------------
|
||||||
|
if [ "$RUN_UNIT" = "1" ]; then
|
||||||
|
banner "4. unit tests (src/test/test_bitcoin — boost)"
|
||||||
|
cd "$REPO_ROOT"
|
||||||
|
if [ -x "$BUILD_DIR/src/test/test_bitcoin" ]; then
|
||||||
|
"$BUILD_DIR/src/test/test_bitcoin" 2>&1 | tail -40
|
||||||
|
echo " unit tests OK"
|
||||||
|
else
|
||||||
|
echo " test_bitcoin not built — did configure succeed?"
|
||||||
|
echo " try: bash scripts/test.sh --clean"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 5. run functional tests (python) --------------------------------------
|
||||||
|
if [ "$RUN_FUNC" = "1" ]; then
|
||||||
|
banner "5. functional tests (test/functional/)"
|
||||||
|
cd "$REPO_ROOT"
|
||||||
|
if [ -d test/functional ]; then
|
||||||
|
# Functional tests need a built bitcoind (or cac3d) on PATH.
|
||||||
|
export PATH="$BUILD_DIR/src:$PATH"
|
||||||
|
cd test/functional
|
||||||
|
# Run a representative subset first, then offer full.
|
||||||
|
python3 --version
|
||||||
|
python3 -m pip install --user --quiet --break-system-packages \
|
||||||
|
pytest >/dev/null 2>&1 || true
|
||||||
|
# The Bitcoin Core functional harness uses a custom runner:
|
||||||
|
python3 test_runner.py cac3 2>&1 | tail -30 || true
|
||||||
|
cd "$REPO_ROOT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
banner "DONE"
|
||||||
|
echo " full log: $RUN_LOG"
|
||||||
|
echo " everything passed. ready to build cac3-explorer against a live node."
|
||||||
Reference in New Issue
Block a user