From 8ea5dc8679eea1921888fec1a3d468c0b3ae09ce Mon Sep 17 00:00:00 2001 From: Pete Vander Giessen Date: Wed, 17 Jul 2019 20:11:28 +0000 Subject: [PATCH] Added automated testing via tox and zuul. Tweaked tests/basic_test.sh functional test so that it no longer requires multpass, and can run without kvm cpu extensions being enabled (not all machines in the game have cpu extensions.) Added tox.ini, wrapper script for building and installation, etc. Change-Id: I968116dd7bec412a55813c896d60cfc86c7070db --- .gitreview | 4 ++ .zuul.yaml | 13 ++++++ snap-overlay/bin/launch.sh | 4 +- snapcraft.yaml | 3 ++ test-requirements.txt | 1 + tests/basic-test.sh | 94 +++++++++++++++++++++++--------------- tools/install_and_build.sh | 16 +++++++ tox.ini | 18 ++++++++ 8 files changed, 113 insertions(+), 40 deletions(-) create mode 100644 .gitreview create mode 100644 .zuul.yaml create mode 100644 test-requirements.txt create mode 100755 tools/install_and_build.sh create mode 100644 tox.ini diff --git a/.gitreview b/.gitreview new file mode 100644 index 0000000..20a8cbd --- /dev/null +++ b/.gitreview @@ -0,0 +1,4 @@ +[gerrit] +host=review.opendev.org +port=29418 +project=x/microstack.git diff --git a/.zuul.yaml b/.zuul.yaml new file mode 100644 index 0000000..a018c01 --- /dev/null +++ b/.zuul.yaml @@ -0,0 +1,13 @@ +- job: + name: microstack-tox-snap-with-sudo + parent: openstack-tox-snap-with-sudo + timeout: 3600 + nodeset: ubuntu-bionic + +- project: + check: + jobs: + - microstack-tox-snap-with-sudo + gate: + jobs: + - microstack-tox-snap-with-sudo diff --git a/snap-overlay/bin/launch.sh b/snap-overlay/bin/launch.sh index b84cb19..8e2a673 100755 --- a/snap-overlay/bin/launch.sh +++ b/snap-overlay/bin/launch.sh @@ -59,8 +59,8 @@ while :; do fi if [[ $(openstack server list | grep $SERVER | grep ERROR) ]]; then openstack server list - echo "Uh-oh. There was an error. See /var/snap/microstack/common/logs for details." - break + echo "Uh-oh. There was an error. See /var/snap/microstack/common/log for details." + exit 1 fi done diff --git a/snapcraft.yaml b/snapcraft.yaml index 743fd82..0c3baea 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -551,6 +551,7 @@ parts: - libcaca0 - libfdt1 - libflac8 + - libglu1-mesa - libiscsi7 - libjpeg-turbo8 - libnspr4 @@ -562,6 +563,7 @@ parts: - librados2 - librbd1 - libsdl1.2debian + - libslang2 - libsndfile1 - libusb-1.0-0 - libusbredirparser1 @@ -573,6 +575,7 @@ parts: - libxdmcp6 - libxen-dev - libxext6 + - libpng16-16 build-packages: - acpica-tools - libaio-dev diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000..28ab56a --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1 @@ +petname diff --git a/tests/basic-test.sh b/tests/basic-test.sh index 9b705c9..1d582d2 100755 --- a/tests/basic-test.sh +++ b/tests/basic-test.sh @@ -5,91 +5,112 @@ # microstack snap, spin up a test instance, and verify that the test # instance is accessible, and can access the Internet. # -# The multipass snap and the petname debian package must be installed -# on the host system in order to run this test. -# # The basic test accepts two command line arguments: # # -u # First installs a released snap from the named # # channel, in order to test basic upgrade functionality. # -# -d # Specifies the distro of the multipass vm. -# ############################################################################## # Configuration and checks set -ex -UPGRADE_FROM="none" -DISTRO=18.04 +export PATH=/snap/bin:$PATH -while getopts u:d: option +UPGRADE_FROM="none" +FORCE_QEMU=false + +while getopts u:d:q option do case "${option}" in u) UPGRADE_FROM=${OPTARG};; - d) DISTRO=${OPTARG};; + q) FORCE_QEMU=true esac done -command -v multipass > /dev/null || (echo "Please install multipass."; exit 1); -command -v petname > /dev/null || (echo "Please install petname."; exit 1); if [ ! -f microstack_rocky_amd64.snap ]; then echo "microstack_rocky_amd64.snap not found." echo "Please run snapcraft before executing the tests." exit 1 fi -MACHINE=$(petname) +# Functions +dump_logs () { + export DUMP_DIR=/tmp + if [ $(whoami) == 'zuul' ]; then + export DUMP_DIR="/home/zuul/zuul-output/logs"; + fi + sudo tar cvzf $DUMP_DIR/dump.tar.gz \ + /var/snap/microstack/common/log \ + /var/log/syslog + sudo journalctl -xe --no-pager +} # Setup echo "++++++++++++++++++++++++++++++++++++++++++++++++++" -echo "++ Starting tests on $MACHINE. ++" -echo "++ Distro: $DISTRO ++" +echo "++ Starting tests on localhost ++" echo "++ Upgrade from: $UPGRADE_FROM ++" echo "++++++++++++++++++++++++++++++++++++++++++++++++++" -# Launch a machine and copy the snap to it. -multipass launch --cpus 2 --mem 16G $DISTRO --name $MACHINE -multipass copy-files microstack_rocky_amd64.snap $MACHINE: - # Possibly install a release of the snap before running a test. if [ "${UPGRADE_FROM}" != "none" ]; then - multipass exec $MACHINE -- sudo snap install --classic \ - --${UPGRADE_FROM} microstack + sudo snap install --classic --${UPGRADE_FROM} microstack fi # Install the snap under test -multipass exec $MACHINE -- \ - sudo snap install --classic --dangerous microstack*.snap +sudo snap install --classic --dangerous microstack*.snap + # Comment out the above and uncomment below to install the version of # the snap from the store. # TODO: add this as a flag. -#multipass exec $MACHINE -- \ -# sudo snap install --classic --edge microstack +# sudo snap install --classic --edge microstack + +# If kvm processor extensions not supported, switch to qemu +# TODO: just do this in the install step of the snap +if ! [ $(egrep "vmx|svm" /proc/cpuinfo | wc -l) -gt 0 ]; then + FORCE_QEMU=true; +fi +if [ "$FORCE_QEMU" == "true" ]; then + cat< /tmp/hypervisor.conf +[DEFAULT] +compute_driver = libvirt.LibvirtDriver + +[workarounds] +disable_rootwrap = True + +[libvirt] +virt_type = qemu +cpu_mode = host-model +EOF + sudo cp /tmp/hypervisor.conf \ + /var/snap/microstack/common/etc/nova/nova.conf.d/hypervisor.conf + sudo snap restart microstack +fi # Run microstack.launch -multipass exec $MACHINE -- /snap/bin/microstack.launch breakfast +/snap/bin/microstack.launch breakfast || (dump_logs && exit 1) # Verify that endpoints are setup correctly # List of endpoints should contain 10.20.20.1 -if ! multipass exec $MACHINE -- /snap/bin/microstack.openstack endpoint list | grep "10.20.20.1"; then +if ! /snap/bin/microstack.openstack endpoint list | grep "10.20.20.1"; then echo "Endpoints are not set to 10.20.20.1!"; exit 1; fi # List of endpoints should not contain localhost -if multipass exec $MACHINE -- /snap/bin/microstack.openstack endpoint list | grep "localhost"; then +if /snap/bin/microstack.openstack endpoint list | grep "localhost"; then echo "Endpoints are not set to 10.20.20.1!"; exit 1; fi # Verify that microstack.launch completed -IP=$(multipass exec $MACHINE -- /snap/bin/microstack.openstack server list | grep breakfast | cut -d" " -f9) +IP=$(/snap/bin/microstack.openstack server list | grep breakfast | cut -d" " -f9) echo "Waiting for ping..." PINGS=1 -MAX_PINGS=20 -until multipass exec $MACHINE -- ping -c 1 $IP &>/dev/null; do +MAX_PINGS=40 # We might sometimes be testing qemu emulation, so we + # want to give this some time ... +until ping -c 1 $IP &>/dev/null; do PINGS=$(($PINGS + 1)); if test $PINGS -gt $MAX_PINGS; then echo "Unable to ping machine!"; @@ -98,9 +119,9 @@ until multipass exec $MACHINE -- ping -c 1 $IP &>/dev/null; do done; ATTEMPTS=1 -MAX_ATTEMPTS=20 -until multipass exec $MACHINE -- \ - ssh -oStrictHostKeyChecking=no -i .ssh/id_microstack cirros@$IP -- \ +MAX_ATTEMPTS=40 # See above for note about qemu +until ssh -oStrictHostKeyChecking=no -i \ + $HOME/.ssh/id_microstack cirros@$IP -- \ ping -c 1 91.189.94.250; do ATTEMPTS=$(($ATTEMPTS + 1)); if test $ATTEMPTS -gt $MAX_ATTEMPTS; then @@ -113,9 +134,6 @@ done; # Cleanup unset IP echo "++++++++++++++++++++++++++++++++++++++++++++++++++" -echo "++ Completed tests. Tearing down $MACHINE. ++" +echo "++ Completed tests. Uninstalling microstack ++" echo "++++++++++++++++++++++++++++++++++++++++++++++++++" -multipass stop $MACHINE -multipass delete $MACHINE -multipass purge # This is a little bit rude to do, but we assume that - # we can beat up on the test machine a bit. +sudo snap remove microstack diff --git a/tools/install_and_build.sh b/tools/install_and_build.sh new file mode 100755 index 0000000..a7dccfc --- /dev/null +++ b/tools/install_and_build.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +set -ex + +export PATH=/snap/bin:$PATH + +which nc || sudo apt install -y netcat + +sudo apt update +sudo apt install -y snapd + +sudo snap install --classic snapcraft +sudo snap install --classic lxd +sudo lxd init --auto + +sudo snapcraft --use-lxd diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..5e5280a --- /dev/null +++ b/tox.ini @@ -0,0 +1,18 @@ +[tox] +envlist = snap +skipsdist = True + +[testenv] +install_command = pip install {opts} {packages} +setenv = + PATH = {env:PATH}:/snap/bin +passenv = HOME TERM +whitelist_externals = + sudo + /snap/bin/snapcraft + +[testenv:snap] +deps = -r{toxinidir}/test-requirements.txt +commands = + {toxinidir}/tools/install_and_build.sh + {toxinidir}/tests/basic-test.sh