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.hal...@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


------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134791&iu=/4140/ostg.clktrk
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to