#!/bin/bash # lxc: linux Container library # Authors: # Serge Hallyn # 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 # At the moment this only tests cgroup automount. Testing proc and # sys automounts would be worthwhile. [ -f /proc/self/ns/cgroup ] && exit 0 # cgmanager doesn't do the same cgroup filesystem mounting cgm ping && exit 0 set -ex cleanup() { set +e rmdir /sys/fs/cgroup/freezer/xx lxc-destroy -n lxc-test-automount -f if [ $PHASE != "done" ]; then echo "automount test failed at $PHASE" exit 1 fi echo "automount test passed" exit 0 } PHASE=setup trap cleanup EXIT rmdir /sys/fs/cgroup/freezer/xx || true lxc-destroy -n lxc-test-automount -f || true lxc-create -t busybox -n lxc-test-automount PHASE=no-cgroup echo "Starting phase $PHASE" config=/var/lib/lxc/lxc-test-automount/config sed -i '/lxc.mount.auto/d' $config echo "lxc.mount.auto = proc:mixed sys:mixed" >> $config lxc-start -n lxc-test-automount pid=`lxc-info -n lxc-test-automount -p -H` cg=`awk -F: '/freezer/ { print $3 }' /proc/$pid/cgroup` notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer || notfound=1 [ $notfound -ne 0 ] # Tests are as follows: # 1. check that freezer controller is mounted # 2. check that it is cgroupfs for cgroup-full (/cgroup.procs exists) or # tmpfs for cgroup # 3. check that root cgroup dir is readonly or not (try mkdir) # 4. check that the container's cgroup dir is readonly or not # 5. check that the container's cgroup dir is cgroupfs (/cgroup.procs exists) lxc-stop -n lxc-test-automount -k PHASE=cgroup:mixed echo "Starting phase $PHASE" sed -i '/lxc.mount.auto/d' $config echo "lxc.mount.auto = cgroup:mixed proc:mixed sys:mixed" >> $config lxc-start -n lxc-test-automount pid=`lxc-info -n lxc-test-automount -p -H` notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer || notfound=1 [ $notfound -ne 1 ] notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer/cgroup.procs || notfound=1 [ $notfound -ne 0 ] ro=0 mkdir /proc/$pid/root/sys/fs/cgroup/freezer/xx || ro=1 [ $ro -ne 0 ] ro=0 mkdir /proc/$pid/root/sys/fs/cgroup/freezer/$cg/xx || ro=1 [ $ro -ne 1 ] notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer/$cg/cgroup.procs || notfound=1 [ $notfound -ne 1 ] lxc-stop -n lxc-test-automount -k PHASE=cgroup:ro echo "Starting phase $PHASE" sed -i '/lxc.mount.auto/d' $config echo "lxc.mount.auto = cgroup:ro proc:mixed sys:mixed" >> $config lxc-start -n lxc-test-automount pid=`lxc-info -n lxc-test-automount -p -H` cg=`awk -F: '/freezer/ { print $3 }' /proc/$pid/cgroup` notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer || notfound=1 [ $notfound -ne 1 ] notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer/cgroup.procs || notfound=1 [ $notfound -ne 0 ] ro=0 mkdir /proc/$pid/root/sys/fs/cgroup/freezer/xx || ro=1 [ $ro -ne 0 ] ro=0 mkdir /proc/$pid/root/sys/fs/cgroup/freezer/$cg/xx || ro=1 [ $ro -ne 1 ] notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer/$cg/cgroup.procs || notfound=1 [ $notfound -ne 1 ] lxc-stop -n lxc-test-automount -k PHASE=cgroup:rw echo "Starting phase $PHASE" sed -i '/lxc.mount.auto/d' $config echo "lxc.mount.auto = cgroup:rw proc:mixed sys:mixed" >> $config lxc-start -n lxc-test-automount pid=`lxc-info -n lxc-test-automount -p -H` cg=`awk -F: '/freezer/ { print $3 }' /proc/$pid/cgroup` notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer || notfound=1 [ $notfound -ne 1 ] notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer/cgroup.procs || notfound=1 [ $notfound -ne 0 ] ro=0 mkdir /proc/$pid/root/sys/fs/cgroup/freezer/xx || ro=1 [ $ro -ne 1 ] rmdir /proc/$pid/root/sys/fs/cgroup/freezer/xx ro=0 mkdir /proc/$pid/root/sys/fs/cgroup/freezer/$cg/xx || ro=1 [ $ro -ne 1 ] notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer/$cg/cgroup.procs || notfound=1 [ $notfound -ne 1 ] # cgroup-full lxc-stop -n lxc-test-automount -k PHASE=cgroup-full:mixed echo "Starting phase $PHASE" sed -i '/lxc.mount.auto/d' $config echo "lxc.mount.auto = cgroup-full:mixed proc:mixed sys:mixed" >> $config lxc-start -n lxc-test-automount pid=`lxc-info -n lxc-test-automount -p -H` cg=`awk -F: '/freezer/ { print $3 }' /proc/$pid/cgroup` notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer || notfound=1 [ $notfound -ne 1 ] notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer/cgroup.procs || notfound=1 [ $notfound -ne 1 ] ro=0 mkdir /proc/$pid/root/sys/fs/cgroup/freezer/xx || ro=1 [ $ro -ne 0 ] ro=0 mkdir /proc/$pid/root/sys/fs/cgroup/freezer/$cg/xx || ro=1 [ $ro -ne 1 ] rmdir /proc/$pid/root/sys/fs/cgroup/freezer/$cg/xx notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer/$cg/cgroup.procs || notfound=1 [ $notfound -ne 1 ] lxc-stop -n lxc-test-automount -k PHASE=cgroup-full:ro echo "Starting phase $PHASE" sed -i '/lxc.mount.auto/d' $config echo "lxc.mount.auto = cgroup-full:ro proc:mixed sys:mixed" >> $config lxc-start -n lxc-test-automount pid=`lxc-info -n lxc-test-automount -p -H` cg=`awk -F: '/freezer/ { print $3 }' /proc/$pid/cgroup` notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer || notfound=1 [ $notfound -ne 1 ] notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer/cgroup.procs || notfound=1 [ $notfound -ne 1 ] ro=0 mkdir /proc/$pid/root/sys/fs/cgroup/freezer/xx || ro=1 [ $ro -ne 0 ] ro=0 mkdir /proc/$pid/root/sys/fs/cgroup/freezer/$cg/xy || ro=1 [ $ro -ne 0 ] notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer/$cg/cgroup.procs || notfound=1 [ $notfound -ne 1 ] lxc-stop -n lxc-test-automount -k PHASE=cgroup-full:rw echo "Starting phase $PHASE" sed -i '/lxc.mount.auto/d' $config echo "lxc.mount.auto = cgroup-full:rw proc:mixed sys:mixed" >> $config lxc-start -n lxc-test-automount pid=`lxc-info -n lxc-test-automount -p -H` cg=`awk -F: '/freezer/ { print $3 }' /proc/$pid/cgroup` notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer || notfound=1 [ $notfound -ne 1 ] notfound=0 stat /proc/$pid/root/sys/fs/cgroup/freezer/cgroup.procs || notfound=1 [ $notfound -ne 1 ] ro=0 mkdir /proc/$pid/root/sys/fs/cgroup/freezer/xx || ro=1 [ $ro -ne 1 ] rmdir /proc/$pid/root/sys/fs/cgroup/freezer/xx ro=0 mkdir /proc/$pid/root/sys/fs/cgroup/freezer/$cg/xx || ro=1 [ $ro -ne 1 ] notfound=0 /proc/$pid/root/sys/fs/cgroup/freezer/$cg/cgroup.procs || notfound=1 [ $notfound -eq 1 ] PHASE=done