#!/bin/bash # Simple test framework for libcgroup. # Upon loading it does following: # - sets $TMP, where all temporary files should be stored. # - backs-up /etc/cgrules.conf in the $TMP # (so it does not interfere with tests) # # Function cleanup() or die() must be called to destroy this temporary # directory and restore previous cgrules.conf! # # Usage: # . ./testenv.sh # # cleanup # exit 0 # Print an error message and exit # Usage: # cgclear || die "cgclear failed" function die() { echo $* @abs_top_srcdir@/libtool --mode=execute @abs_top_srcdir@/src/tools/cgclear if [ -e $TMP/cgrules-backup.conf ]; then mv $TMP/cgrules-backup.conf /etc/cgrules.conf &>/dev/null else rm /etc/cgrules.conf &>/dev/null fi rm -rf $TMP unset TMP exit 1 } # Clear everything that was created at loading this script, i.e. # remove the temporary directory # In addition, check that nothing remained mounted. # Usage: # cleanup function cleanup() { RET=0 grep -v systemd $TMP/mounts if grep "^cgroup" $TMP/mounts &>/dev/null; then echo "Error: cleanup has found mounted cgroup:" grep cgroup /proc/mounts RET=1 cgclear fi if [ -e $TMP/cgrules-backup.conf ]; then mv $TMP/cgrules-backup.conf /etc/cgrules.conf &>/dev/null else rm /etc/cgrules.conf &>/dev/null fi rm -rf $TMP unset TMP [ -z $RET ] || exit $RET } # Copies a file to $TMP and replaces all occurrences of TMP in the file with # value of $TMP. The function prints the name of the new file to its std. # output. # Usage: # cgconfigparser -l `prepare_config config/sample.conf` function prepare_config() { INPUT=$1 OUTPUT=$TMP/`basename $INPUT` # echo -n "m4_changequote()" | m4 -P -D "TMP=$TMP" - $FILE >$OUTPUT sed -e "s!\bTMP\b!$TMP!g" <$INPUT >$OUTPUT || ( echo "Error: prepare config failed!" >&2; exit 1 ) echo $OUTPUT } export TMP=`mktemp --tmpdir -d libcgroup-tmp-XXXXXXX` # store the rules on safe place, we don't want them to mess up the tests mv /etc/cgrules.conf $TMP/cgrules-backup.conf &>/dev/null # tools directory export TOOLSDIR="@abs_top_srcdir@/libtool --mode=execute @abs_top_srcdir@/src/tools/" # config files directory export CONFIGDIR="@abs_top_srcdir@/samples" # test directory export TESTDIR="@abs_top_srcdir@/tests"