122 lines
3.9 KiB
Bash
Executable File
122 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
##############################################################################
|
|
#
|
|
# This is a "basic" test script for Microstack. It will install the
|
|
# 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 <channel> # First installs a released snap from the named
|
|
# # channel, in order to test basic upgrade functionality.
|
|
#
|
|
# -d <distro> # Specifies the distro of the multipass vm.
|
|
#
|
|
##############################################################################
|
|
|
|
# Configuration and checks
|
|
set -ex
|
|
|
|
UPGRADE_FROM="none"
|
|
DISTRO=18.04
|
|
|
|
while getopts u:d: option
|
|
do
|
|
case "${option}"
|
|
in
|
|
u) UPGRADE_FROM=${OPTARG};;
|
|
d) DISTRO=${OPTARG};;
|
|
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)
|
|
|
|
# Setup
|
|
echo "++++++++++++++++++++++++++++++++++++++++++++++++++"
|
|
echo "++ Starting tests on $MACHINE. ++"
|
|
echo "++ Distro: $DISTRO ++"
|
|
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
|
|
fi
|
|
|
|
# Install the snap under test
|
|
multipass exec $MACHINE -- \
|
|
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
|
|
|
|
# Run microstack.launch
|
|
multipass exec $MACHINE -- /snap/bin/microstack.launch breakfast
|
|
|
|
# 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
|
|
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
|
|
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)
|
|
echo "Waiting for ping..."
|
|
PINGS=1
|
|
MAX_PINGS=20
|
|
until multipass exec $MACHINE -- ping -c 1 $IP &>/dev/null; do
|
|
PINGS=$(($PINGS + 1));
|
|
if test $PINGS -gt $MAX_PINGS; then
|
|
echo "Unable to ping machine!";
|
|
exit 1;
|
|
fi
|
|
done;
|
|
|
|
ATTEMPTS=1
|
|
MAX_ATTEMPTS=20
|
|
until multipass exec $MACHINE -- \
|
|
ssh -oStrictHostKeyChecking=no -i .ssh/id_microstack cirros@$IP -- \
|
|
ping -c 1 91.189.94.250; do
|
|
ATTEMPTS=$(($ATTEMPTS + 1));
|
|
if test $ATTEMPTS -gt $MAX_ATTEMPTS; then
|
|
echo "Unable to access Internet from machine!";
|
|
exit 1;
|
|
fi
|
|
sleep 5
|
|
done;
|
|
|
|
# Cleanup
|
|
unset IP
|
|
echo "++++++++++++++++++++++++++++++++++++++++++++++++++"
|
|
echo "++ Completed tests. Tearing down $MACHINE. ++"
|
|
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.
|