72 lines
2.2 KiB
Bash
72 lines
2.2 KiB
Bash
|
|
#!/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 $*
|
||
|
|
"
|