#!/bin/bash # Run integration tests inside a Node container with access to host libvirt. # # Usage: sudo ./scripts/test-integration.sh [vitest args...] # Example: sudo ./scripts/test-integration.sh -t k3s set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" # Detect real user (even when running via sudo) REAL_USER="${SUDO_USER:-$(whoami)}" REAL_HOME="/home/${REAL_USER}" echo "==> Running integration tests in container" echo " Project: ${PROJECT_ROOT}" echo " User: ${REAL_USER}" echo " SSH key: ${REAL_HOME}/.ssh/" echo "" # Check prerequisites if ! command -v podman &>/dev/null && ! command -v docker &>/dev/null; then echo "ERROR: podman or docker required" exit 1 fi RUNTIME="podman" if ! command -v podman &>/dev/null; then RUNTIME="docker" fi # Check libvirt socket if [ ! -S /var/run/libvirt/libvirt-sock ]; then echo "ERROR: libvirt socket not found at /var/run/libvirt/libvirt-sock" echo " Is libvirtd running? Try: sudo systemctl start libvirtd" exit 1 fi # Create a temp dir for cloud-init artifacts (avoids SELinux /tmp relabel) WORK_TMP="/var/tmp/lab-integration-$$" mkdir -p "${WORK_TMP}" trap "rm -rf ${WORK_TMP}" EXIT exec $RUNTIME run --rm \ --name lab-integration-test \ --privileged \ --security-opt label=disable \ --network=host \ -v "${PROJECT_ROOT}:${PROJECT_ROOT}" \ -v "${REAL_HOME}/.ssh:${REAL_HOME}/.ssh:ro" \ -v "/var/run/libvirt/libvirt-sock:/var/run/libvirt/libvirt-sock" \ -v "/var/lib/libvirt/images:/var/lib/libvirt/images" \ -v "${WORK_TMP}:/tmp/lab-integration-tests" \ -w "${PROJECT_ROOT}" \ -e "SSH_KEY_PATH=${REAL_HOME}/.ssh/id_rsa" \ -e "HOME=${REAL_HOME}" \ node:22-bookworm \ bash -c " # Install system deps for libvirt client + cloud-init ISO creation apt-get update -qq && apt-get install -y -qq libvirt-clients virtinst genisoimage openssh-client qemu-utils sudo >/dev/null 2>&1 # Install pnpm corepack enable && corepack prepare pnpm@9 --activate >/dev/null 2>&1 echo '==> Installing project dependencies...' pnpm install --frozen-lockfile 2>/dev/null echo '==> Running integration tests...' echo '' pnpm run test:integration $* "