592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn#!/bin/bash
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynset -ex
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn# lxc: linux Container library
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn# Authors:
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn# Serge Hallyn <serge.hallyn@ubuntu.com>
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn#
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn# This is a regression test for symbolic links
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyndirname=`mktemp -d`
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynfname=`mktemp`
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynfname2=`mktemp`
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynlxcpath=/var/lib/lxcsym1
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyncleanup() {
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn lxc-destroy -P $lxcpath -f -n symtest1 || true
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn rm -f $lxcpath
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn rmdir $dirname || true
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn rm -f $fname || true
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn rm -f $fname2 || true
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn}
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyntrap cleanup EXIT SIGHUP SIGINT SIGTERM
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyntestrun() {
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn expected=$1
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn run=$2
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn pass="pass"
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn lxc-start -P $lxcpath -n symtest1 -l trace -o $lxcpath/log || pass="fail"
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn [ $pass = "pass" ] && lxc-wait -P $lxcpath -n symtest1 -t 10 -s RUNNING || pass="fail"
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn if [ "$pass" != "$expected" ]; then
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn echo "Test $run: expected $expected but container did not. Start log:"
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn cat $lxcpath/log
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn echo "FAIL: Test $run: expected $expected but container did not."
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn false
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn fi
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn lxc-stop -P $lxcpath -n symtest1 -k || true
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn}
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn# make lxcpath a symlink - this should NOT cause failure
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynln -s /var/lib/lxc $lxcpath
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynlxc-destroy -P $lxcpath -f -n symtest1 || true
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynlxc-create -P $lxcpath -t busybox -n symtest1
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyncat >> /var/lib/lxc/symtest1/config << EOF
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynlxc.mount.entry = $dirname opt/xxx/dir none bind,create=dir
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynlxc.mount.entry = $fname opt/xxx/file none bind,create=file
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynlxc.mount.entry = $fname2 opt/xxx/file2 none bind
13cea07dcdf3658da105f17813b572b3a7787022Serge Hallynlxc.mount.entry = $dirname /var/lib/lxc/symtest1/rootfs/opt/xxx/dir2 none bind,create=dir
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge HallynEOF
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn# Regular - should succeed
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynmkdir -p /var/lib/lxc/symtest1/rootfs/opt/xxx
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyntouch /var/lib/lxc/symtest1/rootfs/opt/xxx/file2
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyntestrun pass 1
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn# symlink - should fail
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynrm -rf /var/lib/lxc/symtest1/rootfs/opt/xxx
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynmkdir -p /var/lib/lxc/symtest1/rootfs/opt/xxx2
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynln -s /var/lib/lxc/symtest1/rootfs/opt/xxx2 /var/lib/lxc/symtest1/rootfs/opt/xxx
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyntouch /var/lib/lxc/symtest1/rootfs/opt/xxx/file2
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyntestrun fail 2
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn# final final symlink - should fail
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynrm -rf $lxcpath/symtest1/rootfs/opt/xxx
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynmkdir -p $lxcpath/symtest1/rootfs/opt/xxx
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynmkdir -p $lxcpath/symtest1/rootfs/opt/xxx/dir
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyntouch $lxcpath/symtest1/rootfs/opt/xxx/file
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyntouch $lxcpath/symtest1/rootfs/opt/xxx/file2src
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynln -s $lxcpath/symtest1/rootfs/opt/xxx/file2src $lxcpath/symtest1/rootfs/opt/xxx/file2
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyntestrun fail 3
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn# Ideally we'd also try a loop device, but that won't work in nested containers
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn# anyway - TODO
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn# what about /proc itself
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynrm -rf $lxcpath/symtest1/rootfs/opt/xxx
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynmkdir -p $lxcpath/symtest1/rootfs/opt/xxx
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyntouch $lxcpath/symtest1/rootfs/opt/xxx/file2
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynmv $lxcpath/symtest1/rootfs/proc $lxcpath/symtest1/rootfs/proc1
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynln -s $lxcpath/symtest1/rootfs/proc1 $lxcpath/symtest1/rootfs/proc
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyntestrun fail 4
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallyn
592fd47a6245508b79fe6ac819fe6d3b2c1289beSerge Hallynecho "all tests passed"