chiark / gitweb /
test/TEST-01-BASIC: make DEBUGTOOLS an environment variable
[elogind.git] / test / TEST-01-BASIC / test.sh
index 42107baa11b953b8535a32d45ad3628933c0c1a0..19676454ac55c33806a72221c5b3f59c4ab5c8fb 100755 (executable)
@@ -7,13 +7,15 @@ KVERSION=${KVERSION-$(uname -r)}
 
 # Uncomment this to debug failures
 #DEBUGFAIL="systemd.unit=multi-user.target"
+DEBUGTOOLS="df free ls stty cat ps ln ip route dmesg dhclient mkdir cp ping dhclient strace less grep id tty touch du sort"
 
-test_run() {
+
+run_qemu() {
     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"
+        -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
@@ -27,6 +29,28 @@ test_run() {
     return $ret
 }
 
+
+run_nspawn() {
+    systemd-nspawn -b -D $TESTDIR/nspawn-root /usr/lib/systemd/systemd
+    ret=1
+    [[ -e $TESTDIR/nspawn-root/testok ]] && ret=0
+    cp -a $TESTDIR/nspawn-root/var/log/journal $TESTDIR
+    cp -a $TESTDIR/nspawn-root/failed $TESTDIR
+    cat $TESTDIR/failed
+    ls -l $TESTDIR/journal/*/*.journal
+    test -s $TESTDIR/failed && ret=$(($ret+1))
+    return $ret
+}
+
+
+test_run() {
+    run_qemu || return 1
+    if [[ -d /sys/fs/cgroup/systemd ]]; then
+        run_nspawn || return 1
+    fi
+    return 0
+}
+
 test_setup() {
     rm -f $TESTDIR/rootdisk.img
     # Create the blank file to use as a root filesystem
@@ -47,7 +71,7 @@ EOF
     # Create what will eventually be our root filesystem onto an overlay
     (
         LOG_LEVEL=5
-       initdir=$TESTDIR/root
+        initdir=$TESTDIR/root
 
         # create the basic filesystem layout
         setup_basic_dirs
@@ -56,35 +80,35 @@ EOF
         (cd ../..; make DESTDIR=$initdir install)
 
         # install possible missing libraries
-       for i in $initdir/{sbin,bin}/* $initdir/lib/systemd/*; do
+        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
+        echo 'ImportKernel=yes' >> $initdir/etc/systemd/journald.conf
 
         # make a journal directory
-       mkdir -p $initdir/var/log/journal
+        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
-
+        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
+        inst /etc/localtime
         # we want an empty environment
-       > $initdir/etc/environment
+        > $initdir/etc/environment
 
         # set the hostname
-       echo  systemd-testsuite > $initdir/etc/hostname
+        echo  systemd-testsuite > $initdir/etc/hostname
 
         # setup the testsuite target
-       cat >$initdir/etc/systemd/system/testsuite.target <<EOF
+        cat >$initdir/etc/systemd/system/testsuite.target <<EOF
 [Unit]
 Description=Testsuite target
 Requires=multi-user.target
@@ -94,7 +118,7 @@ AllowIsolate=yes
 EOF
 
         # setup the testsuite service
-       cat >$initdir/etc/systemd/system/testsuite.service <<EOF
+        cat >$initdir/etc/systemd/system/testsuite.service <<EOF
 [Unit]
 Description=Testsuite service
 After=multi-user.target
@@ -105,12 +129,17 @@ 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
+        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
-
+        ln -fs testsuite.target $initdir/etc/systemd/system/default.target
+        mkdir -p $initdir/etc/rc.d
+        cat >$initdir/etc/rc.d/rc.local <<EOF
+#!/bin/bash
+exit 0
+EOF
+        chmod 0755 $initdir/etc/rc.d/rc.local
         # install basic tools needed
         dracut_install sh bash setsid loadkeys setfont \
             login sushell sulogin gzip sleep echo
@@ -119,7 +148,7 @@ EOF
         inst_libdir_file "libnss_files*"
 
         # install dbus and pam
-       find \
+        find \
             /etc/dbus-1 \
             /etc/pam.d \
             /etc/security \
@@ -130,27 +159,27 @@ EOF
         done
 
         # install dbus socket and service file
-       inst /usr/lib/systemd/system/dbus.socket
-       inst /usr/lib/systemd/system/dbus.service
+        inst /usr/lib/systemd/system/dbus.socket
+        inst /usr/lib/systemd/system/dbus.service
 
         # install basic keyboard maps and fonts
-       for i in \
+        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
+                [[ -f $i ]] || continue
+                inst $i
+        done
 
         # some basic terminfo files
-       for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
+        for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
             [ -f ${_terminfodir}/l/linux ] && break
-       done
-       dracut_install -o ${_terminfodir}/l/linux
+        done
+        dracut_install -o ${_terminfodir}/l/linux
 
         # softlink mtab
-       ln -fs /proc/self/mounts $initdir/etc/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 \
@@ -160,27 +189,26 @@ EOF
         done
 
         # install plymouth, if found... else remove plymouth service files
-       if [ -x /usr/libexec/plymouth/plymouth-populate-initrd ]; then
+        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*
+                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 id tty
+        [[ $DEBUGTOOLS ]] && dracut_install $DEBUGTOOLS
 
         # install ld.so.conf* and run ldconfig
-       cp -a /etc/ld.so.conf* $initdir/etc
-       ldconfig -r "$initdir"
+        cp -a /etc/ld.so.conf* $initdir/etc
+        ldconfig -r "$initdir"
 
     )
-    umount $TESTDIR/root
+    rm -fr $TESTDIR/nspawn-root
+    cp -avr $TESTDIR/root $TESTDIR/nspawn-root
 
+    umount $TESTDIR/root
 }
 
 test_cleanup() {