[lxc-devel] [pylxd/master] Add integration tests that can run on fresh vm with LXD

ajkavanagh on Github lxc-bot at linuxcontainers.org
Fri Sep 21 12:37:09 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 750 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180921/3dda4bf3/attachment.bin>
-------------- next part --------------
From 4f3c4df03d9ca93cd27d5c83d443296f7fd2b2a7 Mon Sep 17 00:00:00 2001
From: Alex Kavanagh <alex at ajkavanagh.co.uk>
Date: Fri, 21 Sep 2018 14:34:44 +0200
Subject: [PATCH] Add integration tests that can run on fresh vm with LXD

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 at ajkavanagh.co.uk>
---
 integration/run-integration-tests-in-a-vm | 33 ++++++++++
 integration/run-integration-tests-in-lxd  | 75 +++++++++++++++++++++++
 integration/run_integration_tests         | 13 ----
 integration/run_integration_tests-16-04   | 22 -------
 integration/run_integration_tests-18-04   | 36 -----------
 5 files changed, 108 insertions(+), 71 deletions(-)
 create mode 100755 integration/run-integration-tests-in-a-vm
 create mode 100755 integration/run-integration-tests-in-lxd
 delete mode 100755 integration/run_integration_tests
 delete mode 100755 integration/run_integration_tests-16-04
 delete mode 100755 integration/run_integration_tests-18-04

diff --git a/integration/run-integration-tests-in-a-vm b/integration/run-integration-tests-in-a-vm
new file mode 100755
index 0000000..3cb9aee
--- /dev/null
+++ b/integration/run-integration-tests-in-a-vm
@@ -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
diff --git a/integration/run-integration-tests-in-lxd b/integration/run-integration-tests-in-lxd
new file mode 100755
index 0000000..a92d64b
--- /dev/null
+++ b/integration/run-integration-tests-in-lxd
@@ -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
diff --git a/integration/run_integration_tests b/integration/run_integration_tests
deleted file mode 100755
index 840011c..0000000
--- a/integration/run_integration_tests
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-set -ex
-
-_dir="$( cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd)"
-_release=$(lsb_release -cs)
-
-if [[ "${_release}" == "bionic" ]]; then
-	echo "Running Bionic (18:04) integration tests"
-	exec ${_dir}/run_integration_tests-18-04
-else
-	echo "Running Xenial (16:04) integration tests"
-	exec ${_dir}/run_integration_tests-16-04
-fi
diff --git a/integration/run_integration_tests-16-04 b/integration/run_integration_tests-16-04
deleted file mode 100755
index e105330..0000000
--- a/integration/run_integration_tests-16-04
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-
-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
diff --git a/integration/run_integration_tests-18-04 b/integration/run_integration_tests-18-04
deleted file mode 100755
index 99e00fd..0000000
--- a/integration/run_integration_tests-18-04
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/sh
-
-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


More information about the lxc-devel mailing list