[lxc-devel] [PATCH 1/1] add basic lxc-test-ubuntu (v3)

Serge Hallyn serge.hallyn at ubuntu.com
Thu Oct 3 03:30:31 UTC 2013


Some features of lxc - networking and LSM configuration for instance -
are generally configured by the distro packages.  This program
tests the Ubuntu configuration.

changelog v2:
  Switch to lxc-info -i to detect ip address as stgraber suggested
  Don't look for 'expect' as I'm not using it yet.
changelog v3:
  Make sure to only read one ip address from container.

Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
 configure.ac              |  1 +
 src/tests/Makefile.am     |  4 +++
 src/tests/lxc-test-ubuntu | 78 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 83 insertions(+)
 create mode 100644 src/tests/lxc-test-ubuntu

diff --git a/configure.ac b/configure.ac
index 92a4690..d7f2f03 100644
--- a/configure.ac
+++ b/configure.ac
@@ -51,6 +51,7 @@ case $with_distro in
 esac
 AC_MSG_RESULT([$with_distro])
 AM_CONDITIONAL([HAVE_DEBIAN], [test x"$with_distro" = "xdebian" -o x"$with_distro" = "xubuntu"])
+AM_CONDITIONAL([DISTRO_UBUNTU], [test "x$with_distro" = "xubuntu"])
 
 # Detect the newuidmap tool (required for userns)
 AC_CHECK_PROG([NEWUIDMAP], [newuidmap], [newuidmap])
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
index 479facc..ef65958 100644
--- a/src/tests/Makefile.am
+++ b/src/tests/Makefile.am
@@ -36,6 +36,10 @@ bin_PROGRAMS = lxc-test-containertests lxc-test-locktests lxc-test-startone \
 
 bin_SCRIPTS = lxc-test-usernic
 
+if DISTRO_UBUNTU
+bin_SCRIPTS += lxc-test-ubuntu
+endif
+
 endif
 
 EXTRA_DIST = \
diff --git a/src/tests/lxc-test-ubuntu b/src/tests/lxc-test-ubuntu
new file mode 100644
index 0000000..c6573c1
--- /dev/null
+++ b/src/tests/lxc-test-ubuntu
@@ -0,0 +1,78 @@
+#!/bin/sh
+
+# lxc-test-ubuntu: some tests of ubuntu-specific features of lxc.
+# Some features of lxc - networking and LSM configuration for instance -
+# are generally configured by the distro packages.  This program
+# tests the Ubuntu configuration.
+
+# These require the ubuntu lxc package to be installed.
+
+# General lxc functionality testing does not belong here.
+
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+set -e
+
+FAIL() {
+	echo -n "Failed " >&2
+	echo "$*" >&2
+	exit 1
+}
+
+# Only run on a normally configured ubuntu lxc system
+if [ ! -d /sys/class/net/lxcbr0 ]; then
+	echo "lxcbr0 is not configured."
+	exit 0
+fi
+if [ "$(id -u)" != "0" ]; then
+	echo "Must run as root."
+	exit 0
+fi
+if ! which host 2>&1 > /dev/null; then
+	echo "'host' program not found.  Please install bind9-host"
+	exit 0
+fi
+
+for template in ubuntu ubuntu-cloud; do
+	# need a different name for each container so dnsmasq doesn't
+	# mess us up with its caching
+	if which uuidgen 2>&1 > /dev/null; then
+		name=$(uuidgen)
+	else
+		name=lxc-test-$template
+	fi
+	lxc-create -t $template -n $name || FAIL "creating $template container"
+	lxc-start -n $name -d || FAIL "starting $template container"
+	lxc-wait -n $name -s RUNNING || FAIL "waiting for $template container to run"
+	for tries in `seq 1 20`; do
+		lxcip=`sudo lxc-info -i -n $name | awk -F: '{ print $2 }' | awk '{ print $1}' | head -1`
+		[ -z "$lxcip" ] || break
+		sleep 1
+	done
+	[ -n "$lxcip" ] || FAIL "to start networking in $template container"
+
+	ping -c 1 $lxcip || FAIL "to ping $template container"
+	# Check apparmor
+	lxcpid=`lxc-info -n $name -p | awk -F: '{ print $2 }' | awk '{ print $1}'`
+	aa=`cat /proc/$lxcpid/attr/current`
+	if [ "$aa" != "lxc-container-default-with-nesting (enforce)" ]; then
+		FAIL " to correctly set apparmor profile (profile is \"$aa\")"
+	fi
+	lxc-stop -n $name
+	lxc-destroy -n $name
+done
+
+exit 0
-- 
1.8.3.2





More information about the lxc-devel mailing list