tests: add ping flood test #210
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: [push, pull_request] | |
# | |
# Make sure to update the copy of this in `iptfs-linux` as well. | |
# | |
jobs: | |
build-fast-kernel: | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Checkout kernel repository | |
uses: actions/checkout@v4 | |
with: | |
repository: LabNConsulting/iptfs-linux | |
ref: iptfs | |
path: linux | |
- name: Install build depencies | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y ccache device-tree-compiler libelf-dev xz-utils | |
- name: Kernel build cache | |
id: linux-cache | |
uses: actions/cache@v4 | |
with: | |
path: output-linux | |
# We need a unique key name in order for new versions to save | |
key: ${{ runner.os }}-kernel-${{ hashFiles('linux-fast.config', 'output-linux/**/*.[ch]', 'linux/**/*.[ch]') }} | |
restore-keys: | | |
key: ${{ runner.os }}-kernel- | |
- name: Build kernel | |
run: | | |
set -x | |
if [ -d output-linux ]; then | |
echo "Cache found, checking for config difference" | |
# If the kernel config is changed just wipe the cache | |
if ! diff -q -u1 linux-fast.config output-linux/.config -I '^[ \t]*#' -I '^[ \t]*$' 2>/dev/null; then | |
echo "Kernel configs differ erasing cache" | |
rm -rf output-linux | |
fi | |
fi | |
export CCACHE_DIR=$PWD/output-linux/.ccache | |
if [ ! -d output-linux ]; then | |
echo "Creating new output directory" | |
mkdir output-linux | |
cp linux-fast.config output-linux/.config | |
fi | |
cd output-linux | |
ccache -z | |
KBUILD_BUILD_TIMESTAMP='' make CC="ccache gcc" LINUXCONFIG=linux-fast.config O=$PWD -j2 -C ../linux | |
ccache -s | |
[ -e arch/x86/boot/bzImage ] && cp arch/x86/boot/bzImage .. | |
# Ccache keeps it's own objects | |
# make clean | |
- name: Archive kernel bzImage | |
uses: actions/upload-artifact@v4 | |
with: | |
name: kernel-bzImage | |
path: bzImage | |
retention-days: 1 | |
build-rootfs: | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 600 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Checkout repos | |
run: make setup SHALLOW_CLONE=1 | |
- name: Install build depencies | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y device-tree-compiler libelf-dev | |
- name: Buildroot Build Cache | |
id: buildroot-cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
output-buildroot | |
root-key | |
root-key.pub | |
key: ${{ runner.os }}-br-${{ hashFiles('buildroot-ci.config', 'buildroot/dl/**', 'output-buildroot/build/linux-custom/.config', 'output-buildroot/build/linux-custom/**/*.c', 'output-buildroot/build/linux-custom/**/*.h', 'root-key', 'root-key.pub') }} | |
restore-keys: | | |
key: ${{ runner.os }}-br- | |
- name: Build Rootfs | |
timeout-minutes: 540 | |
run: | | |
set -x | |
if [ -f output-buildroot.tar.xz ] || [ -f output-buildroot.tar.gz ]; then | |
echo "Cache found, extracting" | |
if [ -f output-buildroot.tar.xz ]; then | |
tar -xpJf output-buildroot.tar.xz | |
else | |
tar -xpzf output-buildroot.tar.gz | |
fi | |
# If the buildroot config is changed just wipe the cache | |
if ! diff -q -u1 buildroot-ci.config output-buildroot/.config -I '^[ \t]*#' -I '^[ \t]*$' 2>/dev/null; then | |
echo "Buildroot configs differ erasing cache" | |
rm -rf output-buildroot output-buildroot.tar.gz | |
fi | |
fi | |
if [ ! -d output-buildroot ]; then | |
echo "Creating new output directory" | |
mkdir -p output-buildroot | |
cp -p buildroot-ci.config output-buildroot/.config | |
else | |
make -C buildroot -j6 V=0 O=$PWD/output-buildroot iproute2-dirclean | |
fi | |
# make rootfs | |
echo "Starting build: $(date)" | |
make -C buildroot -j6 V=1 O=$PWD/output-buildroot LOCALVERSION='' > build-buildroot.txt 2>&1 | |
echo "Build complete: $(date)" | |
- name: Archive buildroot build log | |
if: ${{ always() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: buildroot-build-log | |
path: build-buildroot.txt | |
retention-days: 30 | |
if-no-files-found: error | |
- name: Archive buildroot rootfs.cpio.gz | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rootfs-compressed-cpio | |
path: output-buildroot/images/rootfs.cpio.gz | |
retention-days: 1 | |
if-no-files-found: error | |
- name: Archive buildroot root-key | |
uses: actions/upload-artifact@v4 | |
with: | |
name: root-key | |
path: | | |
root-key | |
root-key.pub | |
retention-days: 1 | |
if-no-files-found: error | |
test: | |
runs-on: ubuntu-22.04 | |
needs: ["build-fast-kernel", "build-rootfs"] | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Checkout kernel repository | |
uses: actions/checkout@v4 | |
with: | |
repository: LabNConsulting/iptfs-linux | |
ref: iptfs-ci | |
path: linux | |
- name: Install test depencies | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y qemu-system-x86 socat | |
sudo python3 -m pip install -U munet pytest pytest-asyncio scapy | |
# | |
# We only need to artifacts for buildroot | |
# | |
- name: Fetch buildroot rootfs.cpio.gz archive | |
uses: actions/download-artifact@v4 | |
with: | |
name: rootfs-compressed-cpio | |
- name: Fetch fast kernel | |
uses: actions/download-artifact@v4 | |
with: | |
name: kernel-bzImage | |
- name: Fetch root-key | |
uses: actions/download-artifact@v4 | |
with: | |
name: root-key | |
# Would be nice to loop this w/ and w/o coverage | |
- name: Prep tests | |
run: | | |
mkdir -p output-linux/arch/x86/boot/ | |
mv bzImage output-linux/arch/x86/boot/bzImage | |
mkdir -p output-buildroot/images/ | |
mv rootfs.cpio.gz output-buildroot/images/ | |
mkdir -p test-logs | |
- name: Print the environment under sudo | |
run: | | |
sudo -E env | |
qemu-system-x86_64 --version | |
munet --version | |
- name: Config test | |
run: | | |
set -e | |
set -o pipefail | |
tmpf=test-logs/results-config.txt | |
sudo -E env CI=$CI pytest -s tests/config |& tee $tmpf | |
grep -qvz SKIPPED $tmpf | |
- name: Errors test | |
run: | | |
set -e | |
set -o pipefail | |
tmpf=test-logs/results-errors.txt | |
sudo -E env CI=$CI pytest -s tests/errors |& tee $tmpf | |
grep -qvz SKIPPED $tmpf | |
- name: Simple test | |
run: | | |
set -e | |
set -o pipefail | |
tmpf=test-logs/results-simplenet.txt | |
sudo -E env CI=$CI pytest -s tests/simplenet |& tee $tmpf | |
grep -qvz SKIPPED $tmpf | |
# Restore longer running test once working | |
- name: UT packet test | |
run: | | |
set -e | |
set -o pipefail | |
tmpf=test-logs/results-utpkt.txt | |
sudo -E pytest -s tests/utpkt |& tee $tmpf | |
grep -qvz SKIPPED $tmpf | |
- name: Collect test logs | |
if: ${{ always() }} | |
run: | | |
sudo find /tmp/unet-test -name 'gcov-data.tgz' -exec rm {} + | |
sudo find /tmp/unet-test -type s -exec rm {} + | |
sudo tar -C /tmp/unet-test -cf - . | tar -C test-logs -xf - | |
tar -cjf test-logs.tar.bz2 test-logs | |
- name: Archive test logs tarball | |
if: ${{ always() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-logs-tar | |
path: test-logs.tar.bz2 | |
deploy: | |
runs-on: ubuntu-22.04 | |
if: startsWith(github.ref, 'refs/tags/') | |
needs: ["build-fast-kernel", "build-rootfs", "test"] | |
steps: | |
- name: Download kernel bzImage | |
uses: actions/download-artifact@v4 | |
with: | |
name: kernel-bzImage | |
- name: Download buildroot rootfs.cpio.gz | |
uses: actions/download-artifact@v4 | |
with: | |
name: rootfs-compressed-cpio | |
- name: Downlaod root-key | |
uses: actions/download-artifact@v4 | |
with: | |
name: root-key | |
- name: Deploy | |
uses: softprops/action-gh-release@v1 | |
with: | |
files: | | |
bzImage | |
root-key | |
root-key.pub | |
rootfs.cpio.gz |