The Python-based test infrastructure (pytest, tox, testinfra) is replaced with BATS (Bash Automated Testing System), matching the approach already used in FTL Changes: - Add test/run.sh — single entry point replacing all 15 tox.*.ini files; accepts DISTRO env var, builds the test image, installs BATS on demand, and selects test files based on distro family (debian/alpine/rhel) - Add test/helpers/mocks.bash — bash equivalents of conftest.py's mock_command*, mock_command_2, and mock_command_passthrough helpers; uses base64 transfer to write mock scripts into containers safely - Add test/test_automated_install.bats — replaces test_any_automated_install.py - Add test/test_utils.bats — replaces test_any_utils.py - Add test/test_selinux.bats — replaces test_centos_fedora_common_support.py; only run on CentOS/Fedora (rhel family) - Remove conftest.py, requirements.txt, setup.py, __init__.py - Remove all 15 tox.*.ini files - Remove all three Python test files - Update .github/workflows/test.yml: drop Python setup, tox invocation, and black formatting check; distro-test job now runs bash test/run.sh - Update .gitignore: remove Python-specific entries, add test/libs/ Signed-off-by: PromoFaux <PromoFaux@users.noreply.github.com> Signed-off-by: Adam Warner <me@adamwarner.co.uk>
85 lines
2.6 KiB
Bash
Executable File
85 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Distro selection
|
|
# ---------------------------------------------------------------------------
|
|
|
|
if [[ -z "${DISTRO:-}" ]]; then
|
|
echo "Error: DISTRO is required."
|
|
echo "Example: DISTRO=debian_12 bash test/run.sh"
|
|
echo ""
|
|
echo "Available distros:"
|
|
ls _*.Dockerfile | sed 's/^_//;s/\.Dockerfile$//' | sort
|
|
exit 1
|
|
fi
|
|
|
|
DOCKERFILE="_${DISTRO}.Dockerfile"
|
|
if [[ ! -f "$DOCKERFILE" ]]; then
|
|
echo "Error: Dockerfile not found: $DOCKERFILE"
|
|
exit 1
|
|
fi
|
|
|
|
# Determine distro family to select which test files to run.
|
|
# rhel: CentOS/Fedora — includes SELinux tests
|
|
# alpine: Alpine Linux
|
|
# debian: Debian/Ubuntu (default)
|
|
distro_family() {
|
|
case "$1" in
|
|
centos_* | fedora_*) echo "rhel" ;;
|
|
alpine_*) echo "alpine" ;;
|
|
*) echo "debian" ;;
|
|
esac
|
|
}
|
|
DISTRO_FAMILY=$(distro_family "$DISTRO")
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Build the test image
|
|
# ---------------------------------------------------------------------------
|
|
|
|
IMAGE_TAG="pihole_test:${DISTRO}"
|
|
|
|
docker buildx build \
|
|
--load \
|
|
--progress plain \
|
|
-f "$DOCKERFILE" \
|
|
-t "$IMAGE_TAG" \
|
|
../
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Install BATS and helper libraries (on-demand, not committed)
|
|
# ---------------------------------------------------------------------------
|
|
|
|
mkdir -p libs
|
|
if [[ ! -d libs/bats ]]; then
|
|
echo "Cloning bats-core..."
|
|
git clone --depth=1 --quiet https://github.com/bats-core/bats-core libs/bats
|
|
fi
|
|
if [[ ! -d libs/bats-support ]]; then
|
|
echo "Cloning bats-support..."
|
|
git clone --depth=1 --quiet https://github.com/bats-core/bats-support libs/bats-support
|
|
fi
|
|
if [[ ! -d libs/bats-assert ]]; then
|
|
echo "Cloning bats-assert..."
|
|
git clone --depth=1 --quiet https://github.com/bats-core/bats-assert libs/bats-assert
|
|
fi
|
|
|
|
BATS="${BATS:-libs/bats/bin/bats}"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Run tests
|
|
# ---------------------------------------------------------------------------
|
|
|
|
export IMAGE_TAG DISTRO DISTRO_FAMILY
|
|
|
|
TEST_FILES=(test_automated_install.bats test_utils.bats)
|
|
[[ "$DISTRO_FAMILY" == "rhel" ]] && TEST_FILES+=(test_selinux.bats)
|
|
|
|
# Use pretty output only when stdout is a real terminal; fall back to TAP in CI
|
|
BATS_FLAGS=()
|
|
[[ -t 1 ]] && BATS_FLAGS+=("-p")
|
|
"$BATS" "${BATS_FLAGS[@]}" "${TEST_FILES[@]}"
|