[lxc-devel] [PATCH] Add tests for snapshot clone dependencies

Serge Hallyn serge.hallyn at ubuntu.com
Tue Sep 8 14:55:05 UTC 2015


Test edge cases (removing first and last entries in lxc_snapshots and the very
last snapshot) and make sure original container isn't destroyed while there are
snapshots, and is when there are none.

Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
 src/tests/Makefile.am       |  2 ++
 src/tests/lxc-test-snapdeps | 84 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 86 insertions(+)
 create mode 100644 src/tests/lxc-test-snapdeps

diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
index 461d869..2355c84 100644
--- a/src/tests/Makefile.am
+++ b/src/tests/Makefile.am
@@ -54,6 +54,7 @@ if DISTRO_UBUNTU
 bin_SCRIPTS += \
 	lxc-test-apparmor-mount \
 	lxc-test-checkpoint-restore \
+	lxc-test-snapdeps \
 	lxc-test-ubuntu \
 	lxc-test-unpriv \
 	lxc-test-usernic
@@ -80,6 +81,7 @@ EXTRA_DIST = \
 	lxc-test-checkpoint-restore \
 	lxc-test-cloneconfig \
 	lxc-test-createconfig \
+	lxc-test-snapdeps \
 	lxc-test-ubuntu \
 	lxc-test-unpriv \
 	may_control.c \
diff --git a/src/tests/lxc-test-snapdeps b/src/tests/lxc-test-snapdeps
new file mode 100644
index 0000000..273ecc8
--- /dev/null
+++ b/src/tests/lxc-test-snapdeps
@@ -0,0 +1,84 @@
+#!/bin/bash
+
+# lxc: linux Container library
+
+# Authors:
+# Serge Hallyn <serge.hallyn at ubuntu.com>
+#
+# This is a test for dependency between snapshots
+#
+# When container c2 is created as an overlayfs clone of c1, then
+# we record it as such, because c1 cannot be deleted until c2 is
+# deleted.  Once c2 is deleted, c1 should be delete-able.
+
+# This library 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
+
+# This test assumes an Ubuntu host
+
+set -e
+
+if ! grep -q overlay /proc/filesystems; then
+	echo "Not running this test as overlay is not available"
+	exit 0
+fi
+
+cleanup() {
+	for i in `seq 1 20`; do
+		lxc-destroy -n snapdeptest$i > /dev/null 2>&1 || true
+	done
+	lxc-destroy -n snapdeptest > /dev/null 2>&1 || true
+}
+
+verify_deps() {
+	n=$1
+	m=`wc -l /var/lib/lxc/snapdeptest/lxc_snapshots | awk '{ print $1 }'`
+	[ $((n*2)) -eq $m ]
+}
+
+cleanup
+
+trap cleanup EXIT SIGHUP SIGINT SIGTERM
+
+lxc-create -t busybox -n snapdeptest
+lxc-clone -s -o snapdeptest -n snapdeptest1
+fail=0
+lxc-destroy -n snapdeptest || fail=1
+if [ $fail -eq 0 ]; then
+	echo "FAIL: clone did not prevent deletion"
+	false
+fi
+
+for i in `seq 2 20`; do
+	lxc-clone -s -o snapdeptest -n snapdeptest$i
+done
+
+verify_deps 20
+
+lxc-destroy -n snapdeptest1
+
+verify_deps 19
+
+lxc-destroy -n snapdeptest20
+
+verify_deps 18
+
+for i in `seq 2 19`; do
+	lxc-destroy -n snapdeptest$i
+done
+
+lxc-destroy -n snapdeptest
+
+echo "Snapshot clone dependency test passed"
+exit 0
-- 
2.5.0



More information about the lxc-devel mailing list