--- /dev/null
+#!/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
+# <do some testing>
+# cleanup
+# exit 0
+
+# Print an error message and exit
+# Usage:
+# cgclear || die "cgclear failed"
+function die()
+{
+ echo $*
+ cgclear
+ mv $TMP/cgrules-backup.conf /etc/cgrules.conf &>/dev/null
+ 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 </proc/mounts >$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
+ mv $TMP/cgrules-backup.conf /etc/cgrules.conf &>/dev/null
+ 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"