The version 2.0.4 of the packaging-farm was published with tests for the packaging-farm command.
test environment
The primary command for packaging-farm is a Makefile for which a small script prepares the environment.
: ${LIBDIR:=/usr/lib/packaging-farm} : ${CACHEDIR:=/var/cache/packaging-farm} SILENT="--quiet --no-print-directory" if [ "$1" = "--cd" ] ; then shift cd $(packaging-farm --var DIR_$1) shift fi if [ "$1" = "--var" ] ; then VAR_OPTIONS=${SILENT} shift fi if [ "$1" = "--lock" ] ; then shift # # Check that lockfile exists # type lockfile > /dev/null # # lockfile is found in the procmail package # LOCK=${CACHEDIR}/lock if lockfile -! -l$((24 * 60 * 60)) -r1 -s8 ${LOCK} > /dev/null 2>&1 then echo "${LOCK} present, abort" || /bin/true exit 0 else trap "rm -f ${LOCK}" EXIT fi fi if [ ! -r Makefile -o -z "$(make ${SILENT} PACKAGE 2>/dev/null)" ] ; then cd ${LIBDIR} fi make ${VAR_OPTIONS} "$@"
The goal of the tests is to ensure that the logic of the Makefile is working properly. The packaging-farm command will be used to run the Makefile to create more realistic use cases.
A shell script was added to the tests directory. Before running any test, it creates a fake environment in the tmp directory and removes it when it is done. To reduce the time needed to run the tests, a copy of a squeeze chroot for i386 is kept across tests. It is removed when the clean target is invoked in the top level makefile of packaging-farm, which happens before a package is built with debuild -uc -us.
error and verbosity
In case of error, the tests are re-run in verbose mode.
if ! run ; then set -x unset SILENT run fi
When running in verbose mode, all shell lines numbers and file are reported with:
PS4=' ${FUNCNAME[0]}: $LINENO: '
The verbosity of the Makefile commands is controlled by the TRACE=yes environment variable which triggers the following lines in the Makefile itself.
export SHELL=$(warning ) bash
As a side effect, each command line being displayed will be prefixed with the file and line number of the rule in which it appears. It will not display the actual line of the command.
variable tests
A number of variables in packaging-farm are generated by a oneliner. They are tested for correctness.
function test_var() { [ "$(./packaging-farm --var ROLE)" = package ] # default ROLE ( # # The list of packages is the list of directories found in ${CACHEDIR}/build # dir=${CACHEDIR}/build/package1 mkdir $dir [ "$(./packaging-farm --var DIR_package1)" = $dir ] mkdir ${CACHEDIR}/build/package2 [ "$(./packaging-farm --var PACKAGES)" = "package1 package2" ] rmdir ${CACHEDIR}/build/package? ) [ "$(./packaging-farm --var OSTYPE_debian)" = gnulinux ] [ "$(./packaging-farm --var DISTTYPE_unstable)" = debian ] [[ "$(./packaging-farm --var DISTTYPES_gnulinux)" =~ debian ]] [[ "$(./packaging-farm --var DISTRIBUTIONS_debian)" =~ unstable ]] ( export DISTRIBUTIONS="wheezy unstable" [ "$(./packaging-farm --var DISTTYPES)" = debian ] [ "$(./packaging-farm --var OSTYPES)" = gnulinux ] ) }
In addition, some of them make use of the GNU Make Standard Library such as the uniq function to remove duplicates in the list of distributions (debian … ) to be considered. Testing for the uniqueness of the distribution name also ensures that the local copy of gmsl is properly included and used.
chroot initialization
The build environment (for an environment defined by DISTRIBUTION=squeeze ARCHITECTURE=i386 PACKAGE=package1 for instance) is made of a chroot which is mounted via AUFS if available. Testing for the operations involving such a chroot requires an actual chroot that is built with :
function squeeze() { if [ ! -d squeeze ] ; then debootstrap --variant=minbase --arch i386 squeeze squeeze fi }
Before the tests run, all AUFS mounts are removed to take care of leftovers of a previously failed test:
mount | grep aufs | cut -d' ' -f3 | xargs --no-run-if-empty umount
The tests involving a chroot are expected to umount all the mount they created before exiting.