diff options
author | Harald Hoyer <harald@redhat.com> | 2012-05-21 18:55:48 +0200 |
---|---|---|
committer | Kay Sievers <kay@vrfy.org> | 2012-05-22 16:54:54 +0200 |
commit | 898720b7e9cf3bdf7a93e435cbed5dd6942ecf9b (patch) | |
tree | 2f708eeb4e95b6a55fc256796d9c46bd7c1a73fd /test/TEST-01-BASIC | |
parent | 9b958eff3fbcc345a72315a9167f6217dd841c40 (diff) |
test: introduce a basic testsuite framework
$ cd test
$ sudo make check
will run all tests in the TEST-* subdirectories
$ cd test/TEST-01-BASIC
$ sudo make clean setup run
will run the different stages of the test for debugging purposes
Diffstat (limited to 'test/TEST-01-BASIC')
-rw-r--r-- | test/TEST-01-BASIC/Makefile | 10 | ||||
-rwxr-xr-x | test/TEST-01-BASIC/test.sh | 190 |
2 files changed, 200 insertions, 0 deletions
diff --git a/test/TEST-01-BASIC/Makefile b/test/TEST-01-BASIC/Makefile new file mode 100644 index 0000000000..5e89a29eff --- /dev/null +++ b/test/TEST-01-BASIC/Makefile @@ -0,0 +1,10 @@ +all: + @make -s --no-print-directory -C ../.. all + @basedir=../.. TEST_BASE_DIR=../ ./test.sh --all +setup: + @make --no-print-directory -C ../.. all + @basedir=../.. TEST_BASE_DIR=../ ./test.sh --setup +clean: + @basedir=../.. TEST_BASE_DIR=../ ./test.sh --clean +run: + @basedir=../.. TEST_BASE_DIR=../ ./test.sh --run diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh new file mode 100755 index 0000000000..13b731d94d --- /dev/null +++ b/test/TEST-01-BASIC/test.sh @@ -0,0 +1,190 @@ +#!/bin/bash +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh +TEST_DESCRIPTION="Basic systemd setup" + +KVERSION=${KVERSION-$(uname -r)} + +# Uncomment this to debug failures +#DEBUGFAIL="systemd.unit=multi-user.target" + +test_run() { + qemu-kvm \ + -hda $TESTDIR/rootdisk.img \ + -m 256M -nographic \ + -net none -kernel /boot/vmlinuz-$KVERSION \ + -append "root=/dev/sda1 systemd.log_level=debug raid=noautodetect loglevel=2 init=/usr/lib/systemd/systemd rw console=ttyS0,115200n81 selinux=0 $DEBUGFAIL" + ret=1 + mkdir -p $TESTDIR/root + mount ${LOOPDEV}p1 $TESTDIR/root + [[ -e $TESTDIR/root/testok ]] && ret=0 + cp -a $TESTDIR/root/var/log/journal $TESTDIR + umount $TESTDIR/root + ls -l $TESTDIR/journal/*/*.journal + return $ret +} + +test_setup() { + rm -f $TESTDIR/rootdisk.img + # Create the blank file to use as a root filesystem + dd if=/dev/null of=$TESTDIR/rootdisk.img bs=1M seek=100 + LOOPDEV=$(losetup --show -P -f $TESTDIR/rootdisk.img) + [ -b $LOOPDEV ] || return 1 + echo "LOOPDEV=$LOOPDEV" >> $STATEFILE + sfdisk -C 3200 -H 2 -S 32 -L $LOOPDEV <<EOF +, +EOF + + mkfs.ext3 -L systemd ${LOOPDEV}p1 + mkdir -p $TESTDIR/root + mount ${LOOPDEV}p1 $TESTDIR/root + mkdir -p $TESTDIR/root/run + + kernel=$KVERSION + # Create what will eventually be our root filesystem onto an overlay + ( + LOG_LEVEL=5 + initdir=$TESTDIR/root + + # create the basic filesystem layout + setup_basic_dirs + + # install compiled files + (cd ../..; make DESTDIR=$initdir install) + + # install possible missing libraries + for i in $initdir/{sbin,bin}/* $initdir/lib/systemd/*; do + inst_libs $i + done + + # activate kmsg import + echo 'ImportKernel=yes' >> $initdir/etc/systemd/journald.conf + + # make a journal directory + mkdir -p $initdir/var/log/journal + + # install some basic config files + inst /etc/sysconfig/init + inst /etc/passwd + inst /etc/shadow + inst /etc/group + inst /etc/shells + inst /etc/nsswitch.conf + inst /etc/pam.conf + inst /etc/securetty + inst /etc/os-release + + # we want an empty environment + > $initdir/etc/environment + + # set the hostname + echo systemd-testsuite > $initdir/etc/hostname + + # setup the testsuite target + cat >$initdir/etc/systemd/system/testsuite.target <<EOF +[Unit] +Description=Testsuite target +Requires=multi-user.target +After=multi-user.target +Conflicts=rescue.target +AllowIsolate=yes +EOF + + # setup the testsuite service + cat >$initdir/etc/systemd/system/testsuite.service <<EOF +[Unit] +Description=Testsuite service +After=multi-user.target + +[Service] +ExecStart=/bin/sh -c 'echo OK > /testok; /bin/sleep 5' +ExecStartPost=/usr/sbin/poweroff +Type=oneshot + +EOF + mkdir -p $initdir/etc/systemd/system/testsuite.target.wants + ln -fs ../testsuite.service $initdir/etc/systemd/system/testsuite.target.wants/testsuite.service + + # make the testsuite the default target + ln -fs testsuite.target $initdir/etc/systemd/system/default.target + + # install basic tools needed + dracut_install sh bash setsid loadkeys setfont \ + login sushell sulogin gzip sleep echo + + # install libnss_files for login + inst_libdir_file "libnss_files*" + + # install dbus and pam + find \ + /etc/dbus-1 \ + /etc/pam.d \ + /etc/security \ + /lib64/security \ + /lib/security -xtype f \ + | while read file; do + inst $file + done + + # install dbus socket and service file + inst /usr/lib/systemd/system/dbus.socket + inst /usr/lib/systemd/system/dbus.service + + # install basic keyboard maps and fonts + for i in \ + /usr/lib/kbd/consolefonts/latarcyrheb-sun16* \ + /usr/lib/kbd/keymaps/include/* \ + /usr/lib/kbd/keymaps/i386/include/* \ + /usr/lib/kbd/keymaps/i386/qwerty/us.*; do + [[ -f $i ]] || continue + inst $i + done + + # some basic terminfo files + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do + [ -f ${_terminfodir}/l/linux ] && break + done + dracut_install -o ${_terminfodir}/l/linux + + # softlink mtab + ln -fs /proc/self/mounts $initdir/etc/mtab + + # install any Exec's from the service files + egrep -ho '^Exec[^ ]*=[^ ]+' $initdir/lib/systemd/system/*.service \ + | while read i; do + i=${i##Exec*=}; i=${i##-} + inst $i + done + + # install plymouth, if found... else remove plymouth service files + if [ -x /usr/libexec/plymouth/plymouth-populate-initrd ]; then + PLYMOUTH_POPULATE_SOURCE_FUNCTIONS="$TEST_BASE_DIR/test-functions" \ + /usr/libexec/plymouth/plymouth-populate-initrd -t $initdir + dracut_install plymouth plymouthd + else + rm -f $initdir/usr/lib/systemd/system/plymouth* $initdir/usr/lib/systemd/system/*/plymouth* + fi + + # some helper tools for debugging + dracut_install sh df free ls shutdown poweroff \ + stty cat ps ln ip route \ + mount dmesg dhclient mkdir cp ping dhclient \ + umount strace less grep + + # install ld.so.conf* and run ldconfig + cp -a /etc/ld.so.conf* $initdir/etc + ldconfig -r "$initdir" + + ) + umount $TESTDIR/root + +} + +test_cleanup() { + umount $TESTDIR/root 2>/dev/null + [[ $LOOPDEV ]] && losetup -d $LOOPDEV + return 0 +} + +. $TEST_BASE_DIR/test-functions +do_test "$@" |