Add fake multinode system tests. #75
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: 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 |