run-tests: add 'vm' command

This commit is contained in:
Erik Arvstedt 2021-03-26 23:23:22 +01:00
parent aea1706e49
commit 3cce822c64
No known key found for this signature in database
GPG Key ID: 33312B944DD97846
3 changed files with 49 additions and 0 deletions

View File

@ -45,9 +45,14 @@ the host system.
git clone https://github.com/fort-nix/nix-bitcoin
cd nix-bitcoin/test
# Run a node in a VM. No tests are executed.
./run-tests.sh vm
systemctl status bitcoind
# Run a Python test shell inside a VM node
./run-tests.sh debug
print(succeed("systemctl status bitcoind"))
run_test("bitcoind")
# Run a node in a container. Requires systemd and root privileges.
./run-tests.sh container

View File

@ -61,5 +61,23 @@ name: testConfig:
};
};
# This allows running a test scenario in a regular NixOS VM.
# No tests are executed.
vmWithoutTests = (pkgs.nixos {
imports = [
testConfig
"${toString pkgs.path}/nixos/modules/virtualisation/qemu-vm.nix"
];
virtualisation.graphics = false;
services.mingetty.autologinUser = "root";
# Provide a shortcut for instant poweroff from within the machine
environment.systemPackages = with pkgs; [
(lowPrio (writeScriptBin "q" ''
echo o >/proc/sysrq-trigger
''))
];
}).vm;
config = testConfig;
}

View File

@ -42,6 +42,14 @@
# For now, creating NixOS containers requires root permissions.
# See ./lib/make-container.sh for a complete documentation.
#
# Run a test scenario in a regular NixOS VM.
# No tests are executed, the machine's serial console is attached to your terminal.
# ./run-tests.sh [--scenario <scenario>] vm
#
# This is useful for directly exploring a test configuration without the
# intermediate Python REPL layer.
# Run command 'q' inside the machine for instant poweroff.
#
# Run tests from a snapshot copy of the source files
# ./run-tests.sh --copy-src|-c ...
#
@ -170,6 +178,24 @@ container() {
"$scriptDir/lib/make-container.sh" "$@"
}
# Run a regular NixOS VM
vm() {
export TMPDIR=$(mktemp -d /tmp/nix-bitcoin-vm.XXX)
runAtExit+="rm -rf $TMPDIR;"
nix-build --out-link $TMPDIR/vm -E "((import \"$scriptDir/tests.nix\" {}).getTest \"$scenario\").vmWithoutTests"
echo "VM stats: CPUs: $numCPUs, memory: $memoryMiB MiB"
extraNetOpts=
[[ $NB_TEST_ENABLE_NETWORK ]] || extraNetOpts='restrict=on'
USE_TMPDIR=1 \
NIX_DISK_IMAGE=$TMPDIR/img.qcow2 \
QEMU_OPTS="-smp $numCPUs -m $memoryMiB -nographic $QEMU_OPTS" \
QEMU_NET_OPTS="$extraNetOpts $QEMU_NET_OPTS" \
$TMPDIR/vm/bin/run-*-vm
}
doBuild() {
name=$1
shift