Re: [PATCH 3/5] colo: Introduce high-level test suite
On Tue, 2 Jun 2020 14:19:08 +0200 Philippe Mathieu-Daudé wrote: > +Cleber/Wainer > > On 5/11/20 2:27 PM, Lukas Straub wrote: > > Add high-level test relying on the colo resource-agent to test > > all failover cases while checking guest network connectivity. > > > > Signed-off-by: Lukas Straub > > --- > > scripts/colo-resource-agent/crm_master | 44 ++ > > scripts/colo-resource-agent/crm_resource | 12 + > > tests/acceptance/colo.py | 689 +++ > > 3 files changed, 745 insertions(+) > > create mode 100755 scripts/colo-resource-agent/crm_master > > create mode 100755 scripts/colo-resource-agent/crm_resource > > create mode 100644 tests/acceptance/colo.py > > > > diff --git a/scripts/colo-resource-agent/crm_master > > b/scripts/colo-resource-agent/crm_master > > new file mode 100755 > > index 00..886f523bda > > --- /dev/null > > +++ b/scripts/colo-resource-agent/crm_master > > @@ -0,0 +1,44 @@ > > +#!/bin/bash > > + > > +# Fake crm_master for COLO testing > > +# > > +# Copyright (c) Lukas Straub > > +# > > +# This work is licensed under the terms of the GNU GPL, version 2 or > > +# later. See the COPYING file in the top-level directory. > > + > > +TMPDIR="$HA_RSCTMP" > > +score=0 > > +query=0 > > + > > +OPTIND=1 > > +while getopts 'Qql:Dv:N:G' opt; do > > +case "$opt" in > > +Q|q) > > +# Noop > > +;; > > +"l") > > +# Noop > > +;; > > +"D") > > +score=0 > > +;; > > +"v") > > +score=$OPTARG > > +;; > > +"N") > > +TMPDIR="$COLO_TEST_REMOTE_TMP" > > +;; > > +"G") > > +query=1 > > +;; > > +esac > > +done > > + > > +if (( query )); then > > +cat "${TMPDIR}/master_score" || exit 1 > > +else > > +echo $score > "${TMPDIR}/master_score" || exit 1 > > +fi > > + > > +exit 0 > > diff --git a/scripts/colo-resource-agent/crm_resource > > b/scripts/colo-resource-agent/crm_resource > > new file mode 100755 > > index 00..ad69ff3c6b > > --- /dev/null > > +++ b/scripts/colo-resource-agent/crm_resource > > @@ -0,0 +1,12 @@ > > +#!/bin/sh > > + > > +# Fake crm_resource for COLO testing > > +# > > +# Copyright (c) Lukas Straub > > +# > > +# This work is licensed under the terms of the GNU GPL, version 2 or > > +# later. See the COPYING file in the top-level directory. > > + > > +# Noop > > + > > +exit 0 > > diff --git a/tests/acceptance/colo.py b/tests/acceptance/colo.py > > new file mode 100644 > > index 00..465513fb6c > > --- /dev/null > > +++ b/tests/acceptance/colo.py > > @@ -0,0 +1,689 @@ > > +# High-level test suite for qemu COLO testing all failover cases while > > checking > > +# guest network connectivity > > +# > > +# Copyright (c) Lukas Straub > > +# > > +# This work is licensed under the terms of the GNU GPL, version 2 or > > +# later. See the COPYING file in the top-level directory. > > + > > +# HOWTO: > > +# > > +# This test has the following parameters: > > +# bridge_name: name of the bridge interface to connect qemu to > > +# host_address: ip address of the bridge interface > > +# guest_address: ip address that the guest gets from the dhcp server > > +# bridge_helper: path to the brige helper > > +#(default: /usr/lib/qemu/qemu-bridge-helper) > > +# install_cmd: command to run to install iperf3 and memtester in the guest > > +# (default: "sudo -n dnf -q -y install iperf3 memtester") > > +# > > +# To run the network tests, you have to specify the parameters. > > +# > > +# Example for running the colo tests: > > +# make check-acceptance FEDORA_31_ARCHES="x86_64" AVOCADO_TAGS="-t colo \ > > +# -p bridge_name=br0 -p host_address=192.168.220.1 \ > > +# -p guest_address=192.168.220.222" > > +# > > +# The colo tests currently only use x86_64 test vm images. With the > > +# FEDORA_31_ARCHES make variable as in the example, only the x86_64 images > > will > > +# be downloaded. > > +# > > +# If you're running the network tests as an unprivileged user, you need to > > set > > +# the suid bit on the bridge helper (chmod +s ). > > +# > > +# The dhcp server should assign a static ip to the guest, else the test > > may be > > +# unreliable. The Mac address for the guest is always 52:54:00:12:34:56. > > + > > + > > +import select > > +import sys > > +import subprocess > > +import shutil > > +import os > > +import signal > > +import os.path > > +import time > > +import tempfile > > + > > +from avocado import Test > > +from avocado import skipUnless > > +from avocado.utils import network > > +from avocado.utils import vmimage > > +from avocado.utils import cloudinit > > +from avocado.utils import ssh > > +from avocado.utils.path import find_command > > + > > +from avocado_qemu import pick_default_qemu_bin, BUILD_DIR, SOURCE_DIR > > +from qemu.qmp import QEMUMonitorProtocol > > + > > +def iperf3_available(): > > +try: > > +
Re: [PATCH 3/5] colo: Introduce high-level test suite
+Cleber/Wainer On 5/11/20 2:27 PM, Lukas Straub wrote: > Add high-level test relying on the colo resource-agent to test > all failover cases while checking guest network connectivity. > > Signed-off-by: Lukas Straub > --- > scripts/colo-resource-agent/crm_master | 44 ++ > scripts/colo-resource-agent/crm_resource | 12 + > tests/acceptance/colo.py | 689 +++ > 3 files changed, 745 insertions(+) > create mode 100755 scripts/colo-resource-agent/crm_master > create mode 100755 scripts/colo-resource-agent/crm_resource > create mode 100644 tests/acceptance/colo.py > > diff --git a/scripts/colo-resource-agent/crm_master > b/scripts/colo-resource-agent/crm_master > new file mode 100755 > index 00..886f523bda > --- /dev/null > +++ b/scripts/colo-resource-agent/crm_master > @@ -0,0 +1,44 @@ > +#!/bin/bash > + > +# Fake crm_master for COLO testing > +# > +# Copyright (c) Lukas Straub > +# > +# This work is licensed under the terms of the GNU GPL, version 2 or > +# later. See the COPYING file in the top-level directory. > + > +TMPDIR="$HA_RSCTMP" > +score=0 > +query=0 > + > +OPTIND=1 > +while getopts 'Qql:Dv:N:G' opt; do > +case "$opt" in > +Q|q) > +# Noop > +;; > +"l") > +# Noop > +;; > +"D") > +score=0 > +;; > +"v") > +score=$OPTARG > +;; > +"N") > +TMPDIR="$COLO_TEST_REMOTE_TMP" > +;; > +"G") > +query=1 > +;; > +esac > +done > + > +if (( query )); then > +cat "${TMPDIR}/master_score" || exit 1 > +else > +echo $score > "${TMPDIR}/master_score" || exit 1 > +fi > + > +exit 0 > diff --git a/scripts/colo-resource-agent/crm_resource > b/scripts/colo-resource-agent/crm_resource > new file mode 100755 > index 00..ad69ff3c6b > --- /dev/null > +++ b/scripts/colo-resource-agent/crm_resource > @@ -0,0 +1,12 @@ > +#!/bin/sh > + > +# Fake crm_resource for COLO testing > +# > +# Copyright (c) Lukas Straub > +# > +# This work is licensed under the terms of the GNU GPL, version 2 or > +# later. See the COPYING file in the top-level directory. > + > +# Noop > + > +exit 0 > diff --git a/tests/acceptance/colo.py b/tests/acceptance/colo.py > new file mode 100644 > index 00..465513fb6c > --- /dev/null > +++ b/tests/acceptance/colo.py > @@ -0,0 +1,689 @@ > +# High-level test suite for qemu COLO testing all failover cases while > checking > +# guest network connectivity > +# > +# Copyright (c) Lukas Straub > +# > +# This work is licensed under the terms of the GNU GPL, version 2 or > +# later. See the COPYING file in the top-level directory. > + > +# HOWTO: > +# > +# This test has the following parameters: > +# bridge_name: name of the bridge interface to connect qemu to > +# host_address: ip address of the bridge interface > +# guest_address: ip address that the guest gets from the dhcp server > +# bridge_helper: path to the brige helper > +#(default: /usr/lib/qemu/qemu-bridge-helper) > +# install_cmd: command to run to install iperf3 and memtester in the guest > +# (default: "sudo -n dnf -q -y install iperf3 memtester") > +# > +# To run the network tests, you have to specify the parameters. > +# > +# Example for running the colo tests: > +# make check-acceptance FEDORA_31_ARCHES="x86_64" AVOCADO_TAGS="-t colo \ > +# -p bridge_name=br0 -p host_address=192.168.220.1 \ > +# -p guest_address=192.168.220.222" > +# > +# The colo tests currently only use x86_64 test vm images. With the > +# FEDORA_31_ARCHES make variable as in the example, only the x86_64 images > will > +# be downloaded. > +# > +# If you're running the network tests as an unprivileged user, you need to > set > +# the suid bit on the bridge helper (chmod +s ). > +# > +# The dhcp server should assign a static ip to the guest, else the test may > be > +# unreliable. The Mac address for the guest is always 52:54:00:12:34:56. > + > + > +import select > +import sys > +import subprocess > +import shutil > +import os > +import signal > +import os.path > +import time > +import tempfile > + > +from avocado import Test > +from avocado import skipUnless > +from avocado.utils import network > +from avocado.utils import vmimage > +from avocado.utils import cloudinit > +from avocado.utils import ssh > +from avocado.utils.path import find_command > + > +from avocado_qemu import pick_default_qemu_bin, BUILD_DIR, SOURCE_DIR > +from qemu.qmp import QEMUMonitorProtocol > + > +def iperf3_available(): > +try: > +find_command("iperf3") > +except CmdNotFoundError: > +return False > +return True > + > +class ColoTest(Test): > + > +# Constants > +OCF_SUCCESS = 0 > +OCF_ERR_GENERIC = 1 > +OCF_ERR_ARGS = 2 > +OCF_ERR_UNIMPLEMENTED = 3 > +OCF_ERR_PERM = 4 > +OCF_ERR_INSTALLED = 5 > +OCF_ERR_CONFIGURED = 6 > +OCF_NOT_RUNNING = 7 > +