Skip to content

tests: add ipoe shared + chap-secrets auth, add ipoe+chap-secrets + lua #203

tests: add ipoe shared + chap-secrets auth, add ipoe+chap-secrets + lua

tests: add ipoe shared + chap-secrets auth, add ipoe+chap-secrets + lua #203

Workflow file for this run

name: Run tests
on:
workflow_dispatch:
pull_request:
push:
branches:
- master
jobs:
Test-in-Qemu:
#if: ${{ false }} # disable for now
runs-on: ubuntu-24.04
name: Test in Qemu (${{ matrix.distro }})
strategy:
fail-fast: false
matrix:
include:
- distro: Ubuntu-24.04
image: https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
untar: false
format: qcow2
- distro: Ubuntu-22.04
image: https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
untar: false
format: qcow2
- distro: Ubuntu-20.04
image: https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img
untar: false
format: qcow2
- distro: Debian13
image: https://cloud.debian.org/images/cloud/trixie/daily/latest/debian-13-generic-amd64-daily.tar.xz
untar: true
format: raw
- distro: Debian12
image: https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.tar.xz
untar: true
format: raw
- distro: Debian11
image: https://cdimage.debian.org/images/cloud/bullseye/latest/debian-11-generic-amd64.tar.xz
untar: true
format: raw
steps:
- name: Check out repository code
uses: actions/checkout@v4
with:
fetch-depth: 0
path: "accel-ppp"
- name: Install qemu and required tools
run: >
sudo apt update &&
NEEDRESTART_SUSPEND=1 DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true sudo -E apt -y install qemu-system-x86 qemu-utils cloud-image-utils cpu-checker cloud-image-utils wget openssh-client screen
- name: Check kvm support
run: sudo kvm-ok
- name: Prepare cloud-init image disk
run: |
ssh-keygen -t ed25519 -q -N "" -f ssh-key
echo "instance-id: $(uuidgen || echo i-abcdefg)" > init-meta
echo "#cloud-config" > init-data
echo "package_update: true" >> init-data
echo "package_upgrade: true" >> init-data
echo "package_reboot_if_required: false" >> init-data
echo "users:" >> init-data
echo " - default" >> init-data
echo " - name: user" >> init-data
echo " shell: /bin/bash" >> init-data
echo " sudo: ALL=(ALL) NOPASSWD:ALL" >> init-data
echo " ssh_authorized_keys:" >> init-data
echo " - "`cat ssh-key.pub` >> init-data
echo "power_state:">> init-data
echo " mode: poweroff">> init-data
cat init-data
cloud-localds init.img init-data init-meta
- name: Download, unpack and resize target OS cloud image
if: ${{ matrix.untar }}
run: |
wget -nv ${{ matrix.image }}
mkdir img
tar -xf *.tar.xz -C img
qemu-img resize -f ${{ matrix.format }} img/`ls -1 img` +2G
- name: Download and resize target OS cloud image
if: ${{ !matrix.untar }}
run: |
mkdir img
wget -nv ${{ matrix.image }} -O img/image
qemu-img resize -f ${{ matrix.format }} img/`ls -1 img` +2G
- name: Run target OS first time (for cloud-init actions)
run: sudo qemu-system-x86_64 -enable-kvm -cpu host -m 4096 -nographic -drive format=${{ matrix.format }},file=img/`ls -1 img` -drive format=raw,file=init.img
- name: Run target OS
run: sudo screen -dmS qemu qemu-system-x86_64 -enable-kvm -cpu host -net nic -net user,hostfwd=tcp::2222-:22 -m 4096 -nographic -drive format=${{ matrix.format }},file=img/`ls -1 img`
- name: Check that target OS is running
run: |
sleep 1
sudo screen -ls
- name: Wait for ssh connection
timeout-minutes: 30
run: >
while ! ssh -o StrictHostKeyChecking=accept-new -p2222 -o ConnectTimeout=5 -i ssh-key user@localhost "exit 0";
do
echo "Trying to establish ssh connection";
sleep 5;
done;
cat ~/.ssh/known_hosts
- name: Display free space, current dir, kernel version and test sudo
run: |
ssh -i ssh-key -p2222 user@localhost "df -h"
ssh -i ssh-key -p2222 user@localhost "pwd"
ssh -i ssh-key -p2222 user@localhost "uname -a"
ssh -i ssh-key -p2222 user@localhost "sudo cat /etc/passwd"
- name: Install build tools (on target OS)
run: >
ssh -i ssh-key -p2222 user@localhost "sudo apt -y install
git build-essential cmake gcc linux-headers-\`uname -r\`
libpcre2-dev libssl-dev liblua5.1-0-dev kmod python3-pip
libxml2-dev libxslt1-dev zlib1g-dev
iproute2 ppp pppoe isc-dhcp-client timelimit &&
(sudo apt -y install python3-pytest python3-pytest-dependency python3-pytest-order ||
sudo pip3 install pytest pytest-dependency pytest-order ||
sudo pip3 install --break-system-packages pytest pytest-dependency pytest-order)"
- name: Copy source code to target OS
run: |
tar -Jcf accel-ppp.tar.xz accel-ppp
scp -i ssh-key -P2222 accel-ppp.tar.xz user@localhost:
ssh -i ssh-key -p2222 user@localhost "tar -xf accel-ppp.tar.xz"
- name: Build accel-ppp
run: >
ssh -i ssh-key -p2222 user@localhost "cd accel-ppp &&
mkdir build && cd build &&
cmake -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE -DCMAKE_INSTALL_PREFIX=/usr
-DKDIR=/usr/src/linux-headers-\`uname -r\`
-DLUA=TRUE -DSHAPER=TRUE -DRADIUS=TRUE .. &&
make && sudo make install"
- name: Run tests (not related to ipoe and vlan_mon drivers)
timeout-minutes: 5
run: >
ssh -i ssh-key -p2222 user@localhost "cd accel-ppp/tests &&
sudo python3 -m pytest -Wall --order-dependencies -v -m \"not ipoe_driver and not vlan_mon_driver\""
- name: Display processes and dmesg after tests
if: ${{ always() }}
run: >
ssh -i ssh-key -p2222 user@localhost "ps aux | grep accel- &&
sudo dmesg"
- name: Insert ipoe kernel module
run: >
ssh -i ssh-key -p2222 user@localhost "cd accel-ppp &&
sudo insmod build/drivers/ipoe/driver/ipoe.ko &&
lsmod | grep ipoe "
- name: Run tests (not related to vlan_mon drivers)
timeout-minutes: 5
if: ${{ always() }}
run: >
ssh -i ssh-key -p2222 user@localhost "cd accel-ppp/tests &&
sudo python3 -m pytest -Wall --order-dependencies -v -m \"not vlan_mon_driver\""
- name: Display processes and dmesg after tests
if: ${{ always() }}
run: >
ssh -i ssh-key -p2222 user@localhost "ps aux | grep accel- &&
sudo dmesg"
- name: Insert vlan_mon kernel module
run: >
ssh -i ssh-key -p2222 user@localhost "cd accel-ppp &&
sudo insmod build/drivers/vlan_mon/driver/vlan_mon.ko &&
lsmod | grep vlan_mon"
- name: Run tests (all)
timeout-minutes: 5
run: >
ssh -i ssh-key -p2222 user@localhost "cd accel-ppp/tests &&
sudo python3 -m pytest -Wall --order-dependencies -v"
- name: Display processes and dmesg after tests
if: ${{ always() }}
run: >
ssh -i ssh-key -p2222 user@localhost "ps aux | grep accel- &&
sudo dmesg"
Test-in-Alpine:
#if: ${{ false }} # disable for now
runs-on: ubuntu-24.04
name: Test in Qemu (Alpine)
steps:
- name: Check out repository code
uses: actions/checkout@v4
with:
fetch-depth: 0
path: "accel-ppp"
- name: Install qemu and required tools
run: >
sudo apt update &&
NEEDRESTART_SUSPEND=1 DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true sudo -E apt -y install qemu-system-x86 qemu-utils cloud-image-utils cpu-checker cloud-image-utils wget openssh-client screen
- name: Check kvm support
run: sudo kvm-ok
- name: Prepare cloud-init image disk
run: |
ssh-keygen -t ed25519 -q -N "" -f ssh-key
echo "instance-id: $(uuidgen || echo i-abcdefg)" > init-meta
echo "#cloud-config" > init-data
echo "package_update: true" >> init-data
echo "package_upgrade: true" >> init-data
echo "package_reboot_if_required: false" >> init-data
echo "users:" >> init-data
echo " - default" >> init-data
echo " - name: alpine" >> init-data
echo " shell: /bin/bash" >> init-data
echo " ssh_authorized_keys:" >> init-data
echo " - "`cat ssh-key.pub` >> init-data
echo "power_state:">> init-data
echo " mode: poweroff">> init-data
cat init-data
cloud-localds init.img init-data init-meta
- name: Download and resize target OS cloud image
run: |
mkdir img
# we need to use metal image because virt image doesn't provide pppoe driver (https://gitlab.alpinelinux.org/alpine/aports/-/issues/13739)
wget -nv https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/cloud/nocloud_alpine-3.20.2-x86_64-bios-cloudinit-metal-r0.qcow2 -O img/image
qemu-img resize -f qcow2 img/`ls -1 img` +2G
- name: Run target OS first time (for cloud-init actions)
run: sudo qemu-system-x86_64 -enable-kvm -cpu host -m 4096 -nographic -drive format=qcow2,file=img/`ls -1 img` -drive format=raw,file=init.img
- name: Run target OS
run: sudo screen -dmS qemu qemu-system-x86_64 -enable-kvm -cpu host -net nic -net user,hostfwd=tcp::2222-:22 -m 4096 -nographic -drive format=qcow2,file=img/`ls -1 img`
- name: Check that target OS is running
run: |
sleep 1
sudo screen -ls
- name: Wait for ssh connection
timeout-minutes: 30
run: >
while ! ssh -o StrictHostKeyChecking=accept-new -p2222 -o ConnectTimeout=5 -i ssh-key alpine@localhost "exit 0";
do
echo "Trying to establish ssh connection";
sleep 5;
done;
cat ~/.ssh/known_hosts
- name: Display free space, current dir, kernel version and test doas
run: |
ssh -i ssh-key -p2222 alpine@localhost "df -h"
ssh -i ssh-key -p2222 alpine@localhost "pwd"
ssh -i ssh-key -p2222 alpine@localhost "uname -a"
ssh -i ssh-key -p2222 alpine@localhost "doas cat /etc/passwd"
- name: Install build tools (on target OS)
run: >
ssh -i ssh-key -p2222 alpine@localhost "doas apk add --no-cache git cmake make g++ pcre2-dev libressl-dev linux-headers libucontext-dev lua5.1-dev linux-lts-dev py3-pip
ppp ppp-pppoe &&
(doas pip3 install pytest pytest-dependency pytest-order || doas pip3 install --break-system-packages pytest pytest-dependency pytest-order)"
- name: Copy source code to target OS
run: |
tar -Jcf accel-ppp.tar.xz accel-ppp
scp -i ssh-key -P2222 accel-ppp.tar.xz alpine@localhost:
ssh -i ssh-key -p2222 alpine@localhost "tar -xf accel-ppp.tar.xz"
- name: Build accel-ppp
run: >
ssh -i ssh-key -p2222 alpine@localhost "cd accel-ppp &&
mkdir build && cd build &&
cmake -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE -DCMAKE_INSTALL_PREFIX=/usr
-DKDIR=/usr/src/linux-headers-\`uname -r\`
-DLUA=TRUE -DSHAPER=TRUE -DRADIUS=TRUE .. &&
make && doas make install"
- name: Run tests (not related to ipoe and vlan_mon drivers)
timeout-minutes: 5
run: >
ssh -i ssh-key -p2222 alpine@localhost "cd accel-ppp/tests &&
doas python3 -m pytest -Wall --order-dependencies -v -m \"not ipoe_driver and not vlan_mon_driver\""
- name: Display processes and dmesg after tests
if: ${{ always() }}
run: >
ssh -i ssh-key -p2222 alpine@localhost "ps aux | grep accel- &&
doas dmesg"
- name: Insert ipoe kernel module
run: >
ssh -i ssh-key -p2222 alpine@localhost "cd accel-ppp &&
doas insmod build/drivers/ipoe/driver/ipoe.ko &&
lsmod | grep ipoe "
- name: Run tests (not related to vlan_mon drivers)
timeout-minutes: 5
if: ${{ always() }}
run: >
ssh -i ssh-key -p2222 alpine@localhost "cd accel-ppp/tests &&
doas python3 -m pytest -Wall --order-dependencies -v -m \"not vlan_mon_driver\""
- name: Display processes and dmesg after tests
if: ${{ always() }}
run: >
ssh -i ssh-key -p2222 alpine@localhost "ps aux | grep accel- &&
doas dmesg"
- name: Insert vlan_mon kernel module
run: >
ssh -i ssh-key -p2222 alpine@localhost "cd accel-ppp &&
doas insmod build/drivers/vlan_mon/driver/vlan_mon.ko &&
lsmod | grep vlan_mon"
- name: Run tests (all)
timeout-minutes: 5
run: >
ssh -i ssh-key -p2222 alpine@localhost "cd accel-ppp/tests &&
doas python3 -m pytest -Wall --order-dependencies -v"
- name: Display processes and dmesg after tests
if: ${{ always() }}
run: >
ssh -i ssh-key -p2222 alpine@localhost "ps aux | grep accel- &&
doas dmesg"
Test-in-GH:
#if: ${{ false }} # disable for now
strategy:
fail-fast: false
matrix:
distro: ["ubuntu-24.04", "ubuntu-22.04", "ubuntu-20.04"]
runs-on: ${{ matrix.distro }}
steps:
- name: Install build tools (using apt)
run: >
sudo apt update &&
NEEDRESTART_SUSPEND=1 DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true sudo -E apt -y install
git build-essential cmake gcc linux-headers-`uname -r`
libpcre2-dev libssl-dev liblua5.1-0-dev kmod python3-pip
iproute2 ppp pppoe isc-dhcp-client
- name: Install testing tools (using pip)
run: >
sudo apt -y install python3-pytest python3-pytest-dependency python3-pytest-order ||
sudo pip3 install pytest pytest-dependency pytest-order ||
sudo pip3 install --break-system-packages pytest pytest-dependency pytest-order
- name: Check out repository code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: mkdir build
run: mkdir build
- name: cmake
working-directory: ./build
run: >
cmake -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE -DCMAKE_INSTALL_PREFIX=/usr
-DKDIR=/usr/src/linux-headers-`uname -r`
-DLUA=TRUE -DSHAPER=TRUE -DRADIUS=TRUE ..
- name: make && make install
working-directory: ./build
run: make && sudo make install
- name: Insert and check kernel modules (ipoe and vlan-mon)
# if: ${{ false }}
run: |
sudo insmod build/drivers/vlan_mon/driver/vlan_mon.ko
sudo insmod build/drivers/ipoe/driver/ipoe.ko
lsmod | grep ipoe
lsmod | grep vlan_mon
- name: Run tests
timeout-minutes: 5
working-directory: ./tests
run: sudo python3 -m pytest -Wall --order-dependencies -v
Test-in-GH-Coverage:
#if: ${{ false }} # disable for now
strategy:
fail-fast: false
matrix:
distro: ["ubuntu-24.04", "ubuntu-22.04", "ubuntu-20.04"]
runs-on: ${{ matrix.distro }}
steps:
- name: Install build tools (using apt)
run: >
sudo apt update &&
NEEDRESTART_SUSPEND=1 DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true sudo -E apt -y install
git build-essential cmake gcc linux-headers-`uname -r`
libpcre2-dev libssl-dev liblua5.1-0-dev kmod python3-pip
iproute2 ppp pppoe isc-dhcp-client
- name: Install testing tools
run: >
sudo apt -y install python3-pytest python3-pytest-dependency python3-pytest-order gcovr ||
sudo pip3 install pytest pytest-dependency pytest-order gcovr ||
sudo pip3 install --break-system-packages pytest pytest-dependency pytest-order gcovr
- name: Check out repository code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: mkdir build
run: mkdir build
- name: cmake (with coverage)
working-directory: ./build
run: >
cmake -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE -DCMAKE_INSTALL_PREFIX=/usr
-DKDIR=/usr/src/linux-headers-`uname -r`
-DLUA=TRUE -DSHAPER=TRUE -DRADIUS=TRUE
-DCMAKE_C_FLAGS="--coverage -O0" ..
- name: make && make install
working-directory: ./build
run: make && sudo make install
- name: Insert and check kernel modules (ipoe and vlan-mon)
# if: ${{ false }}
run: |
sudo insmod build/drivers/vlan_mon/driver/vlan_mon.ko
sudo insmod build/drivers/ipoe/driver/ipoe.ko
lsmod | grep ipoe
lsmod | grep vlan_mon
- name: Run tests (for coverage report) (fail is ok)
timeout-minutes: 5
working-directory: ./tests
run: sudo python3 -m pytest -Wall --order-dependencies -v || exit 0
- name: Generate coverage reports (default(txt), csv, html)
run: |
mkdir -p tests/report
gcovr --config=tests/gcovr.conf --output=tests/report/accel-ppp.txt
gcovr --config=tests/gcovr.conf --csv --output=tests/report/accel-ppp.csv
gcovr --config=tests/gcovr.conf --html --html-details --output=tests/report/accel-ppp.html
- name: Show default coverage report
run: cat tests/report/accel-ppp.txt
- name: Upload coverage report
# if: ${{ false }}
uses: actions/upload-artifact@v4
with:
name: coverage-report-on-${{ matrix.distro }}
path: tests/report/
if-no-files-found: error