Skip to content

Add fake multinode system tests. #75

Add fake multinode system tests.

Add fake multinode system tests. #75

name: System tests using ovn-fake-multinode
on:
push:
pull_request:
schedule:
# Run Sunday at midnight
- cron: '0 0 * * 0'
workflow_dispatch:
env:
REGISTRY: ghcr.io
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true
jobs:
build:
env:
RUNC_CMD: podman
OS_IMAGE: "fedora:36"
# https://github.com/actions/runner-images/issues/6282
XDG_RUNTIME_DIR: ''
name: Build ovn-fake-multinode image
runs-on: ubuntu-20.04
steps:
- name: Check out ovn-fake-multi-node
uses: actions/checkout@v3
with:
repository: 'ovn-org/ovn-fake-multinode'
path: 'ovn-fake-multinode'
ref: 'v0.1'
- name: Log in to the GH Container registry
uses: docker/login-action@v1.12.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# Check out ovn and ovs separately inside ovn-fake-multinode/ovn and ovn-fake-multinode/ovs
# ovn-fake-multinode builds and installs ovs from ovn-fake-multinode/ovs
# and it builds and installs ovn from ovn-fake-multinode/ovn. It uses the ovs submodule for ovn compilation.
- name: Check out ovn
uses: actions/checkout@v3
with:
path: 'ovn-fake-multinode/ovn'
submodules: recursive
- name: Check out ovs master
uses: actions/checkout@v3
with:
path: 'ovn-fake-multinode/ovs'
repository: 'openvswitch/ovs'
ref: 'master'
- name: Install dependencies
run: |
sudo apt update
sudo apt-get install -y podman
- name: Build ovn-fake-multi-node main image
run: |
set -x
cd ovn-fake-multinode
sudo podman pull ghcr.io/ovn-org/ovn-fake-multinode/ovn-multinode-cinc:testing
sudo podman tag ghcr.io/ovn-org/ovn-fake-multinode/ovn-multinode-cinc:testing ovn/cinc:latest
sudo podman build -t ovn/ovn-multi-node --build-arg OVS_SRC_PATH=ovs --build-arg OVN_SRC_PATH=ovn --build-arg USE_OVN_RPMS=no -f fedora/ovn/Dockerfile .
mkdir -p /tmp/_output
sudo podman save ovn/ovn-multi-node:latest > /tmp/_output/ovn_main_image.tar
- name: Build ovn-fake-multi-node 22.03 image
run: |
set -x
cd ovn-fake-multinode/ovn
git fetch origin
git checkout -b branch-22.03 origin/branch-22.03
git status
cd ..
sudo podman build -t ovn/ovn-multi-node:22.03 --build-arg OVS_SRC_PATH=ovs --build-arg OVN_SRC_PATH=ovn --build-arg USE_OVN_RPMS=no -f fedora/ovn/Dockerfile .
mkdir -p /tmp/_output
sudo podman save ovn/ovn-multi-node:22.03 > /tmp/_output/ovn_22_03_image.tar
- uses: actions/upload-artifact@v3
with:
name: test-main-image
path: /tmp/_output/ovn_main_image.tar
- uses: actions/upload-artifact@v3
with:
name: test-22-03-image
path: /tmp/_output/ovn_22_03_image.tar
multinode-tests:
runs-on: ubuntu-20.04
timeout-minutes: 30
env:
RUNC_CMD: podman
OS_IMAGE: "fedora:36"
CENTRAL_IMAGE: ${{ matrix.cfg.central_image }}
ENABLE_SSL: no
CC: gcc
OPTS: "--disable-ssl"
dependencies: |
automake libtool gcc bc libjemalloc2 libjemalloc-dev \
libssl-dev llvm-dev libelf-dev libnuma-dev libpcap-dev \
selinux-policy-dev ncat python3-scapy isc-dhcp-server
# https://github.com/actions/runner-images/issues/6282
XDG_RUNTIME_DIR: ''
name: multinode tests ${{ join(matrix.cfg.*, ' ') }}
needs: [build]
strategy:
fail-fast: false
matrix:
cfg:
- { central_image: "ovn/ovn-multi-node:latest" }
- { central_image: "ovn/ovn-multi-node:22.03" }
steps:
- name: Free up disk space
run: sudo eatmydata apt-get remove --auto-remove -y aspnetcore-* dotnet-* libmono-* mono-* msbuild php-* php7* ghc-* zulu-*
- uses: actions/download-artifact@v3
with:
name: test-main-image
- uses: actions/download-artifact@v3
with:
name: test-22-03-image
- name: Load podman image
run: |
sudo podman load --input ovn_main_image.tar
sudo podman load --input ovn_22_03_image.tar
- name: Check out ovn-fake-multi-node
uses: actions/checkout@v3
with:
repository: 'ovn-org/ovn-fake-multinode'
path: 'ovn-fake-multinode'
ref: 'v0.1'
- name: Install dependencies
run: |
sudo apt update
sudo apt-get install -y podman openvswitch-switch
sudo systemctl start openvswitch-switch
sudo ovs-vsctl show
- name: Start basic cluster
run: |
pwd
ls -l
cd ovn-fake-multinode
sudo -E ./ovn_cluster.sh start
sudo podman exec -it ovn-central ovn-nbctl show
sudo podman exec -it ovn-central ovn-appctl -t ovn-northd version
sudo podman exec -it ovn-chassis-1 ovn-appctl -t ovn-controller version
- name: Run basic test script
run: |
cd ovn-fake-multinode
sudo ./.ci/test_basic.sh
- name: install required dependencies
run: sudo apt install -y ${{ env.dependencies }}
- name: install libunbound libunwind
run: sudo apt install -y libunbound-dev libunwind-dev
- name: update PATH
run: |
echo "$HOME/bin" >> $GITHUB_PATH
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: set up python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Check out ovn
uses: actions/checkout@v3
with:
path: 'ovn'
submodules: recursive
- name: Build OVN and trigger fake-multinode system tests
run: |
set -x
pwd
cd ovn
./.ci/linux-prepare.sh
./.ci/linux-build.sh
sudo make check-multinode || :
sudo podman exec -it ovn-central ovn-nbctl show || :
sudo podman exec -it ovn-central ovn-sbctl show || :
sudo podman exec -it ovn-chassis-1 ovs-vsctl show || :
sudo podman exec -it ovn-chassis-1 ip netns || :
sudo podman exec -it ovn-chassis-1 cat /var/log/ovn/ovn-controller.log || :
sudo cat tests/multinode-testsuite.dir/1/multinode-testsuite.log || :
- name: copy logs on failure
if: failure() || cancelled()
run: |
# upload-artifact@v3 throws exceptions if it tries to upload socket
# files and we could have some socket files in testsuite.dir.
# Also, upload-artifact@v3 doesn't work well enough with wildcards.
# So, we're just archiving everything here to avoid any issues.
mkdir logs
cp ovn/config.log ./logs/
# multinode tests are run as root, need to adjust permissions.
sudo chmod -R +r ovn/tests/multinode-testsuite.dir.* || true
cp -r ovn/tests/multinode-testsuite.dir.* ./logs/ || true
tar -czvf logs.tgz logs/
- name: upload logs on failure
if: failure() || cancelled()
uses: actions/upload-artifact@v3
with:
name: logs-linux-${{ join(matrix.cfg.*, '-') }}
path: logs.tgz
- name: Stop cluster
run: |
cd ovn-fake-multinode
sudo -E ./ovn_cluster.sh stop