From: Serge Hallyn Date: Tue, 8 Sep 2015 14:55:05 +0000 (+0000) Subject: Add tests for snapshot clone dependencies X-Git-Tag: lxc-2.0.0.beta1~148 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c4532a2036fd4a9283275b499b7a379fa9689172;p=thirdparty%2Flxc.git Add tests for snapshot clone dependencies 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 Acked-by: Stéphane Graber --- diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index 461d86984..2355c845a 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 000000000..273ecc802 --- /dev/null +++ b/src/tests/lxc-test-snapdeps @@ -0,0 +1,84 @@ +#!/bin/bash + +# lxc: linux Container library + +# Authors: +# Serge Hallyn +# +# 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