Skip to content

Commit

Permalink
Add integration tests that can run on fresh vm with LXD
Browse files Browse the repository at this point in the history
This adds the run-integration-tests-in-a-vm which will minimally
configure a fresh VM (or bare-metal) with LXD installed, and then run
the pylxd integration tests.

Also simplify the existing integration tests to a single
'run-integration-tests-in-lxd' which is for running the integration
tests in an existing, already configured, machine with LXD, where the
tests are run lxd-in-lxd.

Signed-off-by: Alex Kavanagh <alex@ajkavanagh.co.uk>
  • Loading branch information
ajkavanagh committed Sep 21, 2018
1 parent 7db6143 commit 4f3c4df
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 71 deletions.
33 changes: 33 additions & 0 deletions integration/run-integration-tests-in-a-vm
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/bin/bash
set -ex

_dir="$( cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd)"
_release=$(lsb_release -cs)

sudo apt-get update
sudo apt-get install -y tox python3-dev libssl-dev libffi-dev build-essential

lxc config set core.trust_password password
lxc config set core.https_address [::]

if [[ "${_release}" == "bionic" ]]; then
# force generation of client certificate to an address that doesn't work (http)
# generate an openssl certificate and key for the remote not verified test
mkdir -p $HOME/.config/lxc
openssl genrsa 1024 > $HOME/.config/lxc/client.key
chmod 400 $HOME/.config/lxc/client.key

openssl req -new -x509 -nodes -sha1 -days 365 \
-key $HOME/.config/lxc/client.key -out $HOME/.config/lxc/client.crt \
-subj="/C=UK/ST=London/L=London/O=OrgName/OU=Test/CN=example.com"

# create a default dir storage pool for bionic
lxc storage create default dir
lxc profile device add default root disk path=/ pool=default
echo "Run 18.04 (bionic) integration tests"
else
echo "Run 16.04 (xenial) integration tests"
fi

# finally run the integration tests
tox -e integration
75 changes: 75 additions & 0 deletions integration/run-integration-tests-in-lxd
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#!/bin/bash

# This script runs the integration tests on an already configured LXD machine
# where the tests are run LXD in LXD. i.e. an LXD container is spawned, pylxd
# is copied into the container, and then the container runs the integration
# tests.

# This script is NOT used by the CI system, but for people to run integration
# tests on their own computers where they don't want the integration test to
# mess with their setup.

set -ex

_dir="$( cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd)"
_release=$(lsb_release -cs)

if [[ "${_release}" == "bionic" ]]; then
echo "Running Bionic (18:04) integration tests"
CONTAINER_IMAGE="ubuntu:18.04"
CONTAINER_NAME=pylxd-`uuidgen | cut -d"-" -f1`

# This creates a privileged container, because I was bumping into situations where it
# seemed that we had maxed out user namespaces (I haven't checked it out, but it's likely
# a bug in LXD).
lxc launch $CONTAINER_IMAGE $CONTAINER_NAME -c security.nesting=true -c security.privileged=true
sleep 5 # Wait for the network to come up
lxc exec $CONTAINER_NAME -- apt-get update
lxc exec $CONTAINER_NAME -- apt-get install -y tox python3-dev libssl-dev libffi-dev build-essential

lxc exec $CONTAINER_NAME -- lxc config set core.trust_password password
lxc exec $CONTAINER_NAME -- lxc config set core.https_address [::]
# force generation of client certificate to an address that doesn't work (http)
# generate an openssl certificate and key for the remote not verified test
lxc exec $CONTAINER_NAME -- mkdir -p /root/.config/lxc
openssl genrsa 1024 > ./$CONTAINER_NAME.key
lxc file push ./$CONTAINER_NAME.key $CONTAINER_NAME/root/.config/lxc/client.key
rm ./$CONTAINER_NAME.key
lxc exec $CONTAINER_NAME -- chmod 400 /root/.config/lxc/client.key
lxc exec $CONTAINER_NAME -- openssl req -new -x509 -nodes -sha1 -days 365 \
-key /root/.config/lxc/client.key -out /root/.config/lxc/client.crt \
-subj="/C=UK/ST=London/L=London/O=OrgName/OU=Test/CN=example.com"

# create a default dir storage pool for bionic
lxc exec $CONTAINER_NAME -- lxc storage create default dir
lxc exec $CONTAINER_NAME -- lxc profile device add default root disk path=/ pool=default

lxc exec $CONTAINER_NAME -- mkdir -p /opt/pylxd
# NOTE: rockstar (13 Sep 2016) - --recursive is not supported in lxd <2.1, so
# until we have pervasive support for that, we'll do this tar hack.
cd .. && tar cf - * .git | lxc exec $CONTAINER_NAME -- tar xf - -C /opt/pylxd
lxc exec $CONTAINER_NAME -- /bin/sh -c "cd /opt/pylxd && tox -eintegration"
lxc delete --force $CONTAINER_NAME
else
echo "Running Xenial (16:04) integration tests"
CONTAINER_IMAGE="ubuntu:16.04"
CONTAINER_NAME=pylxd-`uuidgen | cut -d"-" -f1`

# This creates a privileged container, because I was bumping into situations where it
# seemed that we had maxed out user namespaces (I haven't checked it out, but it's likely
# a bug in LXD).
lxc launch $CONTAINER_IMAGE $CONTAINER_NAME -c security.nesting=true -c security.privileged=true
sleep 5 # Wait for the network to come up
lxc exec $CONTAINER_NAME -- apt-get update
lxc exec $CONTAINER_NAME -- apt-get install -y tox python3-dev libssl-dev libffi-dev build-essential

lxc exec $CONTAINER_NAME -- lxc config set core.trust_password password
lxc exec $CONTAINER_NAME -- lxc config set core.https_address [::]

lxc exec $CONTAINER_NAME -- mkdir -p /opt/pylxd
# NOTE: rockstar (13 Sep 2016) - --recursive is not supported in lxd <2.1, so
# until we have pervasive support for that, we'll do this tar hack.
cd .. && tar cf - ../* ../.git | lxc exec $CONTAINER_NAME -- tar xf - -C /opt/pylxd
lxc exec $CONTAINER_NAME -- /bin/sh -c "cd /opt/pylxd && tox -eintegration"
lxc delete --force $CONTAINER_NAME
fi
13 changes: 0 additions & 13 deletions integration/run_integration_tests

This file was deleted.

22 changes: 0 additions & 22 deletions integration/run_integration_tests-16-04

This file was deleted.

36 changes: 0 additions & 36 deletions integration/run_integration_tests-18-04

This file was deleted.

0 comments on commit 4f3c4df

Please sign in to comment.