Files
git.stella-ops.org/scripts/ebpf/docker-kernel-test.sh
2026-01-28 02:30:48 +02:00

138 lines
4.6 KiB
Bash

#!/bin/bash
# ============================================================================
# Docker-based eBPF Kernel Compatibility Test
# Tests eBPF code on different Ubuntu versions (targeting different kernels)
#
# Usage: ./docker-kernel-test.sh <base_image> <kernel_version> <distro_name>
# Example: ./docker-kernel-test.sh ubuntu:20.04 5.4 focal
# ============================================================================
set -euo pipefail
# Disable MSYS path conversion for Docker commands
export MSYS_NO_PATHCONV=1
export MSYS2_ARG_CONV_EXCL="*"
BASE_IMAGE="${1:-ubuntu:22.04}"
KERNEL_VERSION="${2:-5.15}"
DISTRO_NAME="${3:-jammy}"
# Get repo root
if [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]] || [[ -n "${WINDIR:-}" ]]; then
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -W 2>/dev/null || pwd)"
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -W 2>/dev/null || pwd)"
REPO_ROOT="${REPO_ROOT//\\//}"
else
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
fi
OUTPUT_DIR="${REPO_ROOT}/out"
echo "=============================================="
echo "eBPF Kernel Compatibility Test"
echo "=============================================="
echo "Base image: ${BASE_IMAGE}"
echo "Target kernel: ${KERNEL_VERSION}"
echo "Distro: ${DISTRO_NAME}"
echo "Repo root: ${REPO_ROOT}"
echo ""
mkdir -p "${OUTPUT_DIR}" 2>/dev/null || true
IMAGE_TAG="stellaops-ebpf-test:${DISTRO_NAME}"
# Check if image already exists
if ! docker image inspect "${IMAGE_TAG}" >/dev/null 2>&1; then
echo "Building test container image..."
# Use heredoc with docker build
docker build -t "${IMAGE_TAG}" --build-arg BASE_IMAGE="${BASE_IMAGE}" - <<'DOCKERFILE'
ARG BASE_IMAGE=ubuntu:22.04
FROM ${BASE_IMAGE}
ENV DEBIAN_FRONTEND=noninteractive
ENV DOTNET_NOLOGO=1
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
ENV TZ=UTC
RUN apt-get update && apt-get install -y \
curl wget ca-certificates apt-transport-https \
libc6 libicu-dev libssl-dev zlib1g \
&& rm -rf /var/lib/apt/lists/*
RUN wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh \
&& chmod +x dotnet-install.sh \
&& ./dotnet-install.sh --channel 10.0 --install-dir /usr/share/dotnet \
&& ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \
&& rm dotnet-install.sh
WORKDIR /src
DOCKERFILE
echo "Image built: ${IMAGE_TAG}"
else
echo "Using cached image: ${IMAGE_TAG}"
fi
echo ""
echo "Running tests in container..."
docker run --rm \
-v "${REPO_ROOT}:/src" \
-v "${OUTPUT_DIR}:/out" \
-e STELLAOPS_UPDATE_FIXTURES=false \
"${IMAGE_TAG}" \
/bin/bash -c "
cd /src
echo '=============================================='
echo 'Environment Info'
echo '=============================================='
uname -a
cat /etc/os-release | head -3
dotnet --version
echo ''
echo '=============================================='
echo 'Restoring packages'
echo '=============================================='
dotnet restore src/Signals/__Tests/StellaOps.Signals.Ebpf.Tests/StellaOps.Signals.Ebpf.Tests.csproj \
--configfile nuget.config 2>&1 | tail -5
echo ''
echo '=============================================='
echo 'Building'
echo '=============================================='
dotnet build src/Signals/__Tests/StellaOps.Signals.Ebpf.Tests/StellaOps.Signals.Ebpf.Tests.csproj \
-c Release 2>&1 | tail -8
echo ''
echo '=============================================='
echo 'Running Tests'
echo '=============================================='
dotnet test src/Signals/__Tests/StellaOps.Signals.Ebpf.Tests/StellaOps.Signals.Ebpf.Tests.csproj \
-c Release --no-build \
--logger 'trx;LogFileName=/out/ebpf-tests-${DISTRO_NAME}.trx' \
--logger 'console;verbosity=minimal'
TEST_EXIT_CODE=\$?
echo ''
echo '=============================================='
echo 'Test Results'
echo '=============================================='
if [ \$TEST_EXIT_CODE -eq 0 ]; then
echo 'Kernel ${KERNEL_VERSION} (${DISTRO_NAME}): ALL TESTS PASSED'
else
echo 'Kernel ${KERNEL_VERSION} (${DISTRO_NAME}): TESTS FAILED'
exit \$TEST_EXIT_CODE
fi
"
echo ""
echo "=============================================="
echo "Test complete for kernel ${KERNEL_VERSION}"
echo "=============================================="