From 62b7106671d04f70d7f6b49e9d53e637d116b0db Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 3 Apr 2015 18:26:54 +0200 Subject: remove tests --- test/.gitignore | 5 - test/Makefile | 20 - test/README.testsuite | 48 - test/TEST-01-BASIC/Makefile | 10 - test/TEST-01-BASIC/test.sh | 74 -- test/TEST-02-CRYPTSETUP/Makefile | 1 - test/TEST-02-CRYPTSETUP/test.sh | 97 -- test/TEST-03-JOBS/Makefile | 1 - test/TEST-03-JOBS/test-jobs.sh | 50 - test/TEST-03-JOBS/test.sh | 79 -- test/a.service | 7 - test/b.service | 6 - test/basic.target | 1 - test/bus-policy/check-own-rules.conf | 14 - test/bus-policy/hello.conf | 14 - test/bus-policy/many-rules.conf | 61 - test/bus-policy/methods.conf | 17 - test/bus-policy/ownerships.conf | 24 - test/bus-policy/signals.conf | 15 - test/bus-policy/test.conf | 20 - test/c.service | 6 - test/d.service | 8 - test/daughter.service | 7 - test/e.service | 8 - test/end.service.in | 6 - test/exec-environment-empty.service | 7 - test/exec-environment-multiple.service | 7 - test/exec-environment.service | 6 - test/exec-group.service | 6 - test/exec-ignoresigpipe-no.service | 7 - test/exec-ignoresigpipe-yes.service | 7 - test/exec-personality-x86-64.service | 7 - test/exec-personality-x86.service | 7 - test/exec-privatedevices-no.service | 7 - test/exec-privatedevices-yes.service | 7 - test/exec-privatetmp-no.service | 7 - test/exec-privatetmp-yes.service | 7 - test/exec-systemcallerrornumber.service | 7 - test/exec-systemcallfilter-failing.service | 8 - test/exec-systemcallfilter-failing2.service | 6 - test/exec-systemcallfilter-not-failing.service | 9 - test/exec-systemcallfilter-not-failing2.service | 6 - test/exec-umask-0177.service | 7 - test/exec-umask-default.service | 6 - test/exec-user.service | 6 - test/exec-workingdirectory.service | 7 - test/f.service | 5 - test/g.service | 6 - test/grandchild.service | 7 - test/h.service | 6 - test/hello-after-sleep.target | 5 - test/hello.service | 5 - test/loopy.service | 2 - test/loopy.service.d/compat.conf | 5 - test/loopy2.service | 1 - test/loopy3.service | 5 - test/loopy4.service | 1 - test/mocks/fsck | 27 - test/parent-deep.slice | 5 - test/parent.slice | 5 - test/path-changed.path | 8 - test/path-changed.service | 1 - test/path-directorynotempty.path | 8 - test/path-directorynotempty.service | 1 - test/path-exists.path | 8 - test/path-exists.service | 1 - test/path-existsglob.path | 8 - test/path-existsglob.service | 1 - test/path-makedirectory.path | 10 - test/path-makedirectory.service | 1 - test/path-modified.path | 8 - test/path-modified.service | 1 - test/path-mycustomunit.service | 6 - test/path-service.service | 6 - test/path-unit.path | 9 - test/paths.target | 1 - test/rule-syntax-check.py | 72 -- test/sched_idle_bad.service | 6 - test/sched_idle_ok.service | 6 - test/sched_rr_bad.service | 8 - test/sched_rr_change.service | 9 - test/sched_rr_ok.service | 6 - test/shutdown.target | 1 - test/sleep.service | 6 - test/sockets.target | 1 - test/son.service | 8 - test/splash.bmp | Bin 289238 -> 0 bytes test/sys.tar.xz | Bin 165116 -> 0 bytes test/sysinit.target | 1 - test/sysv-generator-test.py | 391 ------ test/test-efi-create-disk.sh | 42 - test/test-functions | 1186 ----------------- test/testsuite.target | 6 - test/timers.target | 1 - test/udev-test.pl | 1545 ----------------------- test/unstoppable.service | 5 - 96 files changed, 4206 deletions(-) delete mode 100644 test/.gitignore delete mode 100644 test/Makefile delete mode 100644 test/README.testsuite delete mode 100644 test/TEST-01-BASIC/Makefile delete mode 100755 test/TEST-01-BASIC/test.sh delete mode 120000 test/TEST-02-CRYPTSETUP/Makefile delete mode 100755 test/TEST-02-CRYPTSETUP/test.sh delete mode 120000 test/TEST-03-JOBS/Makefile delete mode 100755 test/TEST-03-JOBS/test-jobs.sh delete mode 100755 test/TEST-03-JOBS/test.sh delete mode 100644 test/a.service delete mode 100644 test/b.service delete mode 120000 test/basic.target delete mode 100644 test/bus-policy/check-own-rules.conf delete mode 100644 test/bus-policy/hello.conf delete mode 100644 test/bus-policy/many-rules.conf delete mode 100644 test/bus-policy/methods.conf delete mode 100644 test/bus-policy/ownerships.conf delete mode 100644 test/bus-policy/signals.conf delete mode 100644 test/bus-policy/test.conf delete mode 100644 test/c.service delete mode 100644 test/d.service delete mode 100644 test/daughter.service delete mode 100644 test/e.service delete mode 100644 test/end.service.in delete mode 100644 test/exec-environment-empty.service delete mode 100644 test/exec-environment-multiple.service delete mode 100644 test/exec-environment.service delete mode 100644 test/exec-group.service delete mode 100644 test/exec-ignoresigpipe-no.service delete mode 100644 test/exec-ignoresigpipe-yes.service delete mode 100644 test/exec-personality-x86-64.service delete mode 100644 test/exec-personality-x86.service delete mode 100644 test/exec-privatedevices-no.service delete mode 100644 test/exec-privatedevices-yes.service delete mode 100644 test/exec-privatetmp-no.service delete mode 100644 test/exec-privatetmp-yes.service delete mode 100644 test/exec-systemcallerrornumber.service delete mode 100644 test/exec-systemcallfilter-failing.service delete mode 100644 test/exec-systemcallfilter-failing2.service delete mode 100644 test/exec-systemcallfilter-not-failing.service delete mode 100644 test/exec-systemcallfilter-not-failing2.service delete mode 100644 test/exec-umask-0177.service delete mode 100644 test/exec-umask-default.service delete mode 100644 test/exec-user.service delete mode 100644 test/exec-workingdirectory.service delete mode 100644 test/f.service delete mode 100644 test/g.service delete mode 100644 test/grandchild.service delete mode 100644 test/h.service delete mode 100644 test/hello-after-sleep.target delete mode 100644 test/hello.service delete mode 100644 test/loopy.service delete mode 100644 test/loopy.service.d/compat.conf delete mode 120000 test/loopy2.service delete mode 100644 test/loopy3.service delete mode 120000 test/loopy4.service delete mode 100755 test/mocks/fsck delete mode 100644 test/parent-deep.slice delete mode 100644 test/parent.slice delete mode 100644 test/path-changed.path delete mode 120000 test/path-changed.service delete mode 100644 test/path-directorynotempty.path delete mode 120000 test/path-directorynotempty.service delete mode 100644 test/path-exists.path delete mode 120000 test/path-exists.service delete mode 100644 test/path-existsglob.path delete mode 120000 test/path-existsglob.service delete mode 100644 test/path-makedirectory.path delete mode 120000 test/path-makedirectory.service delete mode 100644 test/path-modified.path delete mode 120000 test/path-modified.service delete mode 100644 test/path-mycustomunit.service delete mode 100644 test/path-service.service delete mode 100644 test/path-unit.path delete mode 120000 test/paths.target delete mode 100644 test/rule-syntax-check.py delete mode 100644 test/sched_idle_bad.service delete mode 100644 test/sched_idle_ok.service delete mode 100644 test/sched_rr_bad.service delete mode 100644 test/sched_rr_change.service delete mode 100644 test/sched_rr_ok.service delete mode 120000 test/shutdown.target delete mode 100644 test/sleep.service delete mode 120000 test/sockets.target delete mode 100644 test/son.service delete mode 100644 test/splash.bmp delete mode 100644 test/sys.tar.xz delete mode 120000 test/sysinit.target delete mode 100644 test/sysv-generator-test.py delete mode 100755 test/test-efi-create-disk.sh delete mode 100644 test/test-functions delete mode 100644 test/testsuite.target delete mode 120000 test/timers.target delete mode 100755 test/udev-test.pl delete mode 100644 test/unstoppable.service diff --git a/test/.gitignore b/test/.gitignore deleted file mode 100644 index fd7483da0a..0000000000 --- a/test/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -.testdir -test.log -/dev -/run -/sys diff --git a/test/Makefile b/test/Makefile deleted file mode 100644 index 987a32548f..0000000000 --- a/test/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Just a little hook script to easy building when in this directory -.PHONY: all check clean - -all: - $(MAKE) -C .. - -clean: - @for i in TEST-[0-9]*; do \ - [ -d $$i ] || continue ; \ - [ -f $$i/Makefile ] || continue ; \ - make -C $$i clean ; \ - done - -check: - $(MAKE) -C .. all - @for i in TEST-[0-9]*; do \ - [ -d $$i ] || continue ; \ - [ -f $$i/Makefile ] || continue ; \ - make -C $$i all ; \ - done diff --git a/test/README.testsuite b/test/README.testsuite deleted file mode 100644 index 2ae85a2ce1..0000000000 --- a/test/README.testsuite +++ /dev/null @@ -1,48 +0,0 @@ -The extended testsuite only works with uid=0. It contains of several -subdirectories named "test/TEST-??-*", which are run one by one. - -To run the extended testsuite do the following: - -$ make all -$ cd test -$ sudo make clean check -... -make[1]: Entering directory `/mnt/data/harald/git/systemd/test/TEST-01-BASIC' -Making all in . -Making all in po -Making all in docs/libudev -Making all in docs/gudev -TEST: Basic systemd setup [OK] -make[1]: Leaving directory `/mnt/data/harald/git/systemd/test/TEST-01-BASIC' -... - -If one of the tests fails, then $subdir/test.log contains the log file of -the test. - -To debug a special testcase of the testsuite do: - -$ make all -$ cd test/TEST-01-BASIC -$ sudo make clean setup run - -QEMU -==== - -If you want to log in the testsuite virtual machine, you can specify -additional kernel command line parameter with $KERNEL_APPEND. - -$ sudo make KERNEL_APPEND="systemd.unit=multi-user.target" clean setup run - -you can even skip the "clean" and "setup" if you want to run the machine again. - -$ sudo make KERNEL_APPEND="systemd.unit=multi-user.target" run - -You can specify a different kernel and initramfs with $KERNEL_BIN and $INITRD. -(Fedora's default kernel path and initramfs are used by default) - -$ sudo make KERNEL_BIN=/boot/vmlinuz-foo INITRD=/boot/initramfs-bar clean check - -A script will try to find your QEMU binary. If you want to specify a different -one you can use $QEMU_BIN. - -$ sudo make QEMU_BIN=/path/to/qemu/qemu-kvm clean check diff --git a/test/TEST-01-BASIC/Makefile b/test/TEST-01-BASIC/Makefile deleted file mode 100644 index 5e89a29eff..0000000000 --- a/test/TEST-01-BASIC/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -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 deleted file mode 100755 index d97fbe24d4..0000000000 --- a/test/TEST-01-BASIC/test.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/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" - -. $TEST_BASE_DIR/test-functions - -check_result_qemu() { - ret=1 - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - [[ -e $TESTDIR/root/testok ]] && ret=0 - [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR - [[ -f $TESTDIR/root/var/log/journal ]] && cp -a $TESTDIR/root/var/log/journal $TESTDIR - umount $TESTDIR/root - [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed - ls -l $TESTDIR/journal/*/*.journal - test -s $TESTDIR/failed && ret=$(($ret+1)) - return $ret -} - -test_run() { - if run_qemu; then - check_result_qemu || return 1 - else - dwarn "can't run QEMU, skipping" - fi - if check_nspawn; then - run_nspawn - check_result_nspawn || return 1 - else - dwarn "can't run systemd-nspawn, skipping" - fi - return 0 -} - -test_setup() { - create_empty_image - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < /failed ; echo OK > /testok; while : ;do echo "testsuite service waiting for journal to move to /var/log/journal" > /dev/console ; for i in /var/log/journal/*;do [ -d "\$i" ] && echo "\$i" && break 2; done; sleep 1; done; sleep 1; exit 0;' -Type=oneshot -EOF - - setup_testsuite - ) - setup_nspawn_root - - ddebug "umount $TESTDIR/root" - umount $TESTDIR/root -} - -test_cleanup() { - umount $TESTDIR/root 2>/dev/null - [[ $LOOPDEV ]] && losetup -d $LOOPDEV - return 0 -} - -do_test "$@" diff --git a/test/TEST-02-CRYPTSETUP/Makefile b/test/TEST-02-CRYPTSETUP/Makefile deleted file mode 120000 index e9f93b1104..0000000000 --- a/test/TEST-02-CRYPTSETUP/Makefile +++ /dev/null @@ -1 +0,0 @@ -../TEST-01-BASIC/Makefile \ No newline at end of file diff --git a/test/TEST-02-CRYPTSETUP/test.sh b/test/TEST-02-CRYPTSETUP/test.sh deleted file mode 100755 index 4be2365e2f..0000000000 --- a/test/TEST-02-CRYPTSETUP/test.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/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="cryptsetup systemd setup" - -. $TEST_BASE_DIR/test-functions - -check_result_qemu() { - ret=1 - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - [[ -e $TESTDIR/root/testok ]] && ret=0 - [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR - cryptsetup luksOpen ${LOOPDEV}p2 varcrypt <$TESTDIR/keyfile - mount /dev/mapper/varcrypt $TESTDIR/root/var - [[ -f $TESTDIR/root/var/log/journal ]] && cp -a $TESTDIR/root/var/log/journal $TESTDIR - umount $TESTDIR/root/var - umount $TESTDIR/root - cryptsetup luksClose /dev/mapper/varcrypt - [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed - ls -l $TESTDIR/journal/*/*.journal - test -s $TESTDIR/failed && ret=$(($ret+1)) - return $ret -} - - -test_run() { - if run_qemu; then - check_result_qemu || return 1 - else - dwarn "can't run QEMU, skipping" - fi - return 0 -} - -test_setup() { - create_empty_image - echo -n test >$TESTDIR/keyfile - cryptsetup -q luksFormat ${LOOPDEV}p2 $TESTDIR/keyfile - cryptsetup luksOpen ${LOOPDEV}p2 varcrypt <$TESTDIR/keyfile - mkfs.ext3 -L var /dev/mapper/varcrypt - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - mkdir -p $TESTDIR/root/var - mount /dev/mapper/varcrypt $TESTDIR/root/var - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=/dev/mapper/varcrypt) - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < /failed ; echo OK > /testok; while : ;do systemd-cat echo "testsuite service waiting for /var/log/journal" ; echo "testsuite service waiting for journal to move to /var/log/journal" > /dev/console ; for i in /var/log/journal/*;do [ -d "\$i" ] && echo "\$i" && break 2; done; sleep 1; done; sleep 1; exit 0;' -Type=oneshot -EOF - - setup_testsuite - - install_dmevent - generate_module_dependencies - cat >$initdir/etc/crypttab < $initdir/etc/varkey - cat $initdir/etc/crypttab | ddebug - - cat >>$initdir/etc/fstab </dev/null - [[ -b /dev/mapper/varcrypt ]] && cryptsetup luksClose /dev/mapper/varcrypt - umount $TESTDIR/root 2>/dev/null - [[ $LOOPDEV ]] && losetup -d $LOOPDEV - return 0 -} - -do_test "$@" diff --git a/test/TEST-03-JOBS/Makefile b/test/TEST-03-JOBS/Makefile deleted file mode 120000 index e9f93b1104..0000000000 --- a/test/TEST-03-JOBS/Makefile +++ /dev/null @@ -1 +0,0 @@ -../TEST-01-BASIC/Makefile \ No newline at end of file diff --git a/test/TEST-03-JOBS/test-jobs.sh b/test/TEST-03-JOBS/test-jobs.sh deleted file mode 100755 index 28368b70e4..0000000000 --- a/test/TEST-03-JOBS/test-jobs.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -x - -# Test merging of a --ignore-dependencies job into a previously -# installed job. - -systemctl start --no-block hello-after-sleep.target -# sleep is now running, hello/start is waiting. Verify that: -systemctl list-jobs > /root/list-jobs.txt -grep 'sleep\.service.*running' /root/list-jobs.txt || exit 1 -grep 'hello\.service.*waiting' /root/list-jobs.txt || exit 1 - -# This is supposed to finish quickly, not wait for sleep to finish. -START_SEC=$(date -u '+%s') -systemctl start --ignore-dependencies hello -END_SEC=$(date -u '+%s') -ELAPSED=$(($END_SEC-$START_SEC)) - -[ "$ELAPSED" -lt 3 ] || exit 1 - -# sleep should still be running, hello not. -systemctl list-jobs > /root/list-jobs.txt -grep 'sleep\.service.*running' /root/list-jobs.txt || exit 1 -grep 'hello\.service' /root/list-jobs.txt && exit 1 -systemctl stop sleep.service hello-after-sleep.target || exit 1 - -# Test for a crash when enqueueing a JOB_NOP when other job already exists -systemctl start --no-block hello-after-sleep.target || exit 1 -# hello.service should still be waiting, so these try-restarts will collapse -# into NOPs. -systemctl try-restart --fail hello.service || exit 1 -systemctl try-restart hello.service || exit 1 -systemctl stop hello.service sleep.service hello-after-sleep.target || exit 1 - -# TODO: add more job queueing/merging tests here. - -# Test for irreversible jobs -systemctl start unstoppable.service || exit 1 - -# This is expected to fail with 'job cancelled' -systemctl stop unstoppable.service && exit 1 -# But this should succeed -systemctl stop --irreversible unstoppable.service || exit 1 - -# We're going to shutdown soon. Let's see if it succeeds when -# there's an active service that tries to be unstoppable. -# Shutdown of the container/VM will hang if not. -systemctl start unstoppable.service || exit 1 - -touch /testok -exit 0 diff --git a/test/TEST-03-JOBS/test.sh b/test/TEST-03-JOBS/test.sh deleted file mode 100755 index 41e02e2c8a..0000000000 --- a/test/TEST-03-JOBS/test.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/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="Job-related tests" - -. $TEST_BASE_DIR/test-functions - -check_result_qemu() { - ret=1 - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - [[ -e $TESTDIR/root/testok ]] && ret=0 - [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR - cp -a $TESTDIR/root/var/log/journal $TESTDIR - umount $TESTDIR/root - [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed - ls -l $TESTDIR/journal/*/*.journal - test -s $TESTDIR/failed && ret=$(($ret+1)) - return $ret -} - -test_run() { - if run_qemu; then - check_result_qemu || return 1 - else - dwarn "can't run QEMU, skipping" - fi - if check_nspawn; then - run_nspawn - check_result_nspawn || return 1 - else - dwarn "can't run systemd-nspawn, skipping" - fi - return 0 -} - -test_setup() { - create_empty_image - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service </dev/null - [[ $LOOPDEV ]] && losetup -d $LOOPDEV - return 0 -} - -do_test "$@" diff --git a/test/a.service b/test/a.service deleted file mode 100644 index 4168d2d051..0000000000 --- a/test/a.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=A -Requires=b.service -Before=b.service - -[Service] -ExecStart=/bin/true diff --git a/test/b.service b/test/b.service deleted file mode 100644 index e03bae36be..0000000000 --- a/test/b.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=B -Wants=f.service - -[Service] -ExecStart=/bin/true diff --git a/test/basic.target b/test/basic.target deleted file mode 120000 index 0612934682..0000000000 --- a/test/basic.target +++ /dev/null @@ -1 +0,0 @@ -../units/basic.target \ No newline at end of file diff --git a/test/bus-policy/check-own-rules.conf b/test/bus-policy/check-own-rules.conf deleted file mode 100644 index bc2f415fcb..0000000000 --- a/test/bus-policy/check-own-rules.conf +++ /dev/null @@ -1,14 +0,0 @@ - - - mybususer - unix:path=/foo/bar - tcp:port=1234 - /usr/share/foo - - - - - - - diff --git a/test/bus-policy/hello.conf b/test/bus-policy/hello.conf deleted file mode 100644 index af09893de6..0000000000 --- a/test/bus-policy/hello.conf +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - diff --git a/test/bus-policy/many-rules.conf b/test/bus-policy/many-rules.conf deleted file mode 100644 index 70dd538c11..0000000000 --- a/test/bus-policy/many-rules.conf +++ /dev/null @@ -1,61 +0,0 @@ - - - mybususer - unix:path=/foo/bar - tcp:port=1234 - basic.d - - /usr/share/foo - nonexistent.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5000 - 5000 - 300 - 5000 - 6000 - 50 - 80 - 64 - 64 - 256 - 512 - - diff --git a/test/bus-policy/methods.conf b/test/bus-policy/methods.conf deleted file mode 100644 index 4bc38f9151..0000000000 --- a/test/bus-policy/methods.conf +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/test/bus-policy/ownerships.conf b/test/bus-policy/ownerships.conf deleted file mode 100644 index bc3a230a26..0000000000 --- a/test/bus-policy/ownerships.conf +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/bus-policy/signals.conf b/test/bus-policy/signals.conf deleted file mode 100644 index 440e3fe6d0..0000000000 --- a/test/bus-policy/signals.conf +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - diff --git a/test/bus-policy/test.conf b/test/bus-policy/test.conf deleted file mode 100644 index ee6afcdfbb..0000000000 --- a/test/bus-policy/test.conf +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/test/c.service b/test/c.service deleted file mode 100644 index e2f60a8fbf..0000000000 --- a/test/c.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=C -Requires=a.service - -[Service] -ExecStart=/bin/true diff --git a/test/d.service b/test/d.service deleted file mode 100644 index 921fd2ee1b..0000000000 --- a/test/d.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=D:Cyclic -After=b.service -Before=a.service -Requires=a.service - -[Service] -ExecStart=/bin/true diff --git a/test/daughter.service b/test/daughter.service deleted file mode 100644 index aebedca348..0000000000 --- a/test/daughter.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Daughter Service - -[Service] -Slice=parent.slice -Type=oneshot -ExecStart=/bin/true diff --git a/test/e.service b/test/e.service deleted file mode 100644 index 5ba98c7c43..0000000000 --- a/test/e.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=E:Cyclic -After=b.service -Before=a.service -Wants=a.service - -[Service] -ExecStart=/bin/true diff --git a/test/end.service.in b/test/end.service.in deleted file mode 100644 index 4857ffe02b..0000000000 --- a/test/end.service.in +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=End the test -After=testsuite.service - -[Service] -ExecStart=@SYSTEMCTL@ poweroff --no-block diff --git a/test/exec-environment-empty.service b/test/exec-environment-empty.service deleted file mode 100644 index 0219ca4fd7..0000000000 --- a/test/exec-environment-empty.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for Environment - -[Service] -ExecStart=/bin/sh -c 'exit $(test ! "$VAR1" = "word1 word2") && $(test ! "$VAR2" = word3) && $(test ! "$VAR3" = \'$word 5 6\')' -Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6" -Environment= diff --git a/test/exec-environment-multiple.service b/test/exec-environment-multiple.service deleted file mode 100644 index 479005a5d8..0000000000 --- a/test/exec-environment-multiple.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for Environment - -[Service] -ExecStart=/bin/sh -c 'exit $(test "$VAR1" = "word1 word2") && $(test "$VAR2" = word3) && $(test "$VAR3" = foobar)' -Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6" -Environment="VAR3=foobar" diff --git a/test/exec-environment.service b/test/exec-environment.service deleted file mode 100644 index 4586b4c4a9..0000000000 --- a/test/exec-environment.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Test for Environment - -[Service] -ExecStart=/bin/sh -c 'exit $(test "$VAR1" = "word1 word2") && $(test "$VAR2" = word3) && $(test "$VAR3" = \'$word 5 6\')' -Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6" diff --git a/test/exec-group.service b/test/exec-group.service deleted file mode 100644 index 1aa04b5bd2..0000000000 --- a/test/exec-group.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Test for Group - -[Service] -ExecStart=/bin/sh -c 'exit $(test $(id -n -g) = nobody)' -Group=nobody diff --git a/test/exec-ignoresigpipe-no.service b/test/exec-ignoresigpipe-no.service deleted file mode 100644 index 69b2e9d8a8..0000000000 --- a/test/exec-ignoresigpipe-no.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for IgnoreSIGPIPE=no - -[Service] -ExecStart=/bin/sh -c 'kill -PIPE 0' -Type=oneshot -IgnoreSIGPIPE=no diff --git a/test/exec-ignoresigpipe-yes.service b/test/exec-ignoresigpipe-yes.service deleted file mode 100644 index 877ec8aed0..0000000000 --- a/test/exec-ignoresigpipe-yes.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for IgnoreSIGPIPE=yes - -[Service] -ExecStart=/bin/sh -c 'kill -PIPE 0' -Type=oneshot -IgnoreSIGPIPE=yes diff --git a/test/exec-personality-x86-64.service b/test/exec-personality-x86-64.service deleted file mode 100644 index 5bb5d910d0..0000000000 --- a/test/exec-personality-x86-64.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for Personality=x86-64 - -[Service] -ExecStart=/bin/sh -c 'echo $(uname -m); exit $(test $(uname -m) = "x86_64")' -Type=oneshot -Personality=x86-64 diff --git a/test/exec-personality-x86.service b/test/exec-personality-x86.service deleted file mode 100644 index 0b370a6480..0000000000 --- a/test/exec-personality-x86.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for Personality=x86 - -[Service] -ExecStart=/bin/sh -c 'echo $(uname -m); exit $(test $(uname -m) = "i686")' -Type=oneshot -Personality=x86 diff --git a/test/exec-privatedevices-no.service b/test/exec-privatedevices-no.service deleted file mode 100644 index cf4f275fb6..0000000000 --- a/test/exec-privatedevices-no.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for PrivateDev=no - -[Service] -ExecStart=/bin/sh -c 'exit $(test -c /dev/mem)' -Type=oneshot -PrivateDevices=no diff --git a/test/exec-privatedevices-yes.service b/test/exec-privatedevices-yes.service deleted file mode 100644 index 85b3f4f981..0000000000 --- a/test/exec-privatedevices-yes.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for PrivateDev=yes - -[Service] -ExecStart=/bin/sh -c 'exit $(test ! -c /dev/mem)' -Type=oneshot -PrivateDevices=yes diff --git a/test/exec-privatetmp-no.service b/test/exec-privatetmp-no.service deleted file mode 100644 index d69e552a63..0000000000 --- a/test/exec-privatetmp-no.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for PrivateTmp=no - -[Service] -ExecStart=/bin/sh -c 'exit $(test -f /tmp/test-exec_privatetmp)' -Type=oneshot -PrivateTmp=no diff --git a/test/exec-privatetmp-yes.service b/test/exec-privatetmp-yes.service deleted file mode 100644 index 881a040b87..0000000000 --- a/test/exec-privatetmp-yes.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for PrivateTmp=yes - -[Service] -ExecStart=/bin/sh -c 'exit $(test ! -f /tmp/test-exec_privatetmp)' -Type=oneshot -PrivateTmp=yes diff --git a/test/exec-systemcallerrornumber.service b/test/exec-systemcallerrornumber.service deleted file mode 100644 index 255a8b231a..0000000000 --- a/test/exec-systemcallerrornumber.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for SystemCallErrorNumber - -[Service] -ExecStart=/usr/bin/uname -a -SystemCallFilter=~uname -SystemCallErrorNumber=EACCES diff --git a/test/exec-systemcallfilter-failing.service b/test/exec-systemcallfilter-failing.service deleted file mode 100644 index c6ce9368c9..0000000000 --- a/test/exec-systemcallfilter-failing.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test for SystemCallFilter - -[Service] -ExecStart=/bin/echo "This should not be seen" -SystemCallFilter=ioperm -SystemCallFilter=~ioperm -SystemCallFilter=ioperm diff --git a/test/exec-systemcallfilter-failing2.service b/test/exec-systemcallfilter-failing2.service deleted file mode 100644 index b7f7c2aff9..0000000000 --- a/test/exec-systemcallfilter-failing2.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Test for SystemCallFilter - -[Service] -ExecStart=/bin/echo "This should not be seen" -SystemCallFilter=~write open execve exit_group close mmap munmap fstat DONOTEXIST diff --git a/test/exec-systemcallfilter-not-failing.service b/test/exec-systemcallfilter-not-failing.service deleted file mode 100644 index feb206ab6d..0000000000 --- a/test/exec-systemcallfilter-not-failing.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Test for SystemCallFilter - -[Service] -ExecStart=/bin/echo "Foo bar" -SystemCallFilter=~read write open execve ioperm -SystemCallFilter=ioctl -SystemCallFilter=read write open execve -SystemCallFilter=~ioperm diff --git a/test/exec-systemcallfilter-not-failing2.service b/test/exec-systemcallfilter-not-failing2.service deleted file mode 100644 index cca469aa3d..0000000000 --- a/test/exec-systemcallfilter-not-failing2.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Test for SystemCallFilter - -[Service] -ExecStart=/bin/echo "Foo bar" -SystemCallFilter= diff --git a/test/exec-umask-0177.service b/test/exec-umask-0177.service deleted file mode 100644 index af9295888e..0000000000 --- a/test/exec-umask-0177.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for UMask - -[Service] -ExecStart=/bin/sh -c 'touch /tmp/test-exec-umask; s=$(stat -c %a /tmp/test-exec-umask); echo $s; exit $(test $s = "600")' -UMask=0177 -PrivateTmp=yes diff --git a/test/exec-umask-default.service b/test/exec-umask-default.service deleted file mode 100644 index 41e20a60a1..0000000000 --- a/test/exec-umask-default.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Test for UMask default - -[Service] -ExecStart=/bin/sh -c 'touch /tmp/test-exec-umask; s=$(stat -c %a /tmp/test-exec-umask); echo $s; exit $(test $s = "644")' -PrivateTmp=yes diff --git a/test/exec-user.service b/test/exec-user.service deleted file mode 100644 index 2ca08ebb42..0000000000 --- a/test/exec-user.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Test for User - -[Service] -ExecStart=/bin/sh -c 'exit $(test "$USER" = nobody)' -User=nobody diff --git a/test/exec-workingdirectory.service b/test/exec-workingdirectory.service deleted file mode 100644 index 10855d682a..0000000000 --- a/test/exec-workingdirectory.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Test for WorkingDirectory - -[Service] -ExecStart=/bin/sh -c 'echo $PWD; exit $(test $PWD = "/tmp/test-exec_workingdirectory")' -Type=oneshot -WorkingDirectory=/tmp/test-exec_workingdirectory diff --git a/test/f.service b/test/f.service deleted file mode 100644 index 7dde681c17..0000000000 --- a/test/f.service +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -Description=F - -[Service] -ExecStart=/bin/true diff --git a/test/g.service b/test/g.service deleted file mode 100644 index cbfa82a454..0000000000 --- a/test/g.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=G -Conflicts=e.service - -[Service] -ExecStart=/bin/true diff --git a/test/grandchild.service b/test/grandchild.service deleted file mode 100644 index ab641300e4..0000000000 --- a/test/grandchild.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=Grandchild Service - -[Service] -Slice=parent-deep.slice -Type=oneshot -ExecStart=/bin/true diff --git a/test/h.service b/test/h.service deleted file mode 100644 index 74a7751cad..0000000000 --- a/test/h.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=H -Wants=g.service - -[Service] -ExecStart=/bin/true diff --git a/test/hello-after-sleep.target b/test/hello-after-sleep.target deleted file mode 100644 index 526fbd2a12..0000000000 --- a/test/hello-after-sleep.target +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -Description=Sleep for a minute, then say hello. -Wants=sleep.service hello.service -After=sleep.service -Before=hello.service diff --git a/test/hello.service b/test/hello.service deleted file mode 100644 index 82907b64e1..0000000000 --- a/test/hello.service +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -Description=Hello World - -[Service] -ExecStart=/bin/echo "Hello World" diff --git a/test/loopy.service b/test/loopy.service deleted file mode 100644 index 9eb645748e..0000000000 --- a/test/loopy.service +++ /dev/null @@ -1,2 +0,0 @@ -[Service] -ExecStart=/bin/true diff --git a/test/loopy.service.d/compat.conf b/test/loopy.service.d/compat.conf deleted file mode 100644 index 51b84b89ed..0000000000 --- a/test/loopy.service.d/compat.conf +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -BindsTo=loopy2.service - -[Install] -Also=loopy2.service diff --git a/test/loopy2.service b/test/loopy2.service deleted file mode 120000 index 961b1fe9bc..0000000000 --- a/test/loopy2.service +++ /dev/null @@ -1 +0,0 @@ -loopy.service \ No newline at end of file diff --git a/test/loopy3.service b/test/loopy3.service deleted file mode 100644 index 606e26b5da..0000000000 --- a/test/loopy3.service +++ /dev/null @@ -1,5 +0,0 @@ -[Service] -ExecStart=/bin/true - -[Unit] -Conflicts=loopy4.service diff --git a/test/loopy4.service b/test/loopy4.service deleted file mode 120000 index 43e5658bcd..0000000000 --- a/test/loopy4.service +++ /dev/null @@ -1 +0,0 @@ -loopy3.service \ No newline at end of file diff --git a/test/mocks/fsck b/test/mocks/fsck deleted file mode 100755 index 77b50d7234..0000000000 --- a/test/mocks/fsck +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -fd=0 - -OPTIND=1 -while getopts "C:aTlM" opt; do - case "$opt" in - C) - fd=$OPTARG - ;; - \?);; - esac -done - -shift "$((OPTIND-1))" -device=$1 - -echo "Running fake fsck on $device" - -declare -a maxpass=(30 5 2 30 60) - -for pass in {1..5}; do - maxprogress=${maxpass[$((pass-1))]} - for (( current=0; current<=${maxprogress}; current++)); do - echo "$pass $current $maxprogress $device">&$fd - sleep 0.1 - done -done diff --git a/test/parent-deep.slice b/test/parent-deep.slice deleted file mode 100644 index 79b302f38d..0000000000 --- a/test/parent-deep.slice +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -Description=Deeper Parent Slice - -[Slice] -MemoryLimit=3G diff --git a/test/parent.slice b/test/parent.slice deleted file mode 100644 index 0222f8eb47..0000000000 --- a/test/parent.slice +++ /dev/null @@ -1,5 +0,0 @@ -[Unit] -Description=Parent Slice - -[Slice] -BlockIOWeight=200 diff --git a/test/path-changed.path b/test/path-changed.path deleted file mode 100644 index e58bdd925f..0000000000 --- a/test/path-changed.path +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test PathChanged - -[Path] -PathChanged=/tmp/test-path_changed - -[Install] -WantedBy=multi-user.target diff --git a/test/path-changed.service b/test/path-changed.service deleted file mode 120000 index 8bdf178830..0000000000 --- a/test/path-changed.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/path-directorynotempty.path b/test/path-directorynotempty.path deleted file mode 100644 index 17e599fc0e..0000000000 --- a/test/path-directorynotempty.path +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test DirectoryNotEmpty - -[Path] -DirectoryNotEmpty=/tmp/test-path_directorynotempty/ - -[Install] -WantedBy=multi-user.target diff --git a/test/path-directorynotempty.service b/test/path-directorynotempty.service deleted file mode 120000 index 8bdf178830..0000000000 --- a/test/path-directorynotempty.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/path-exists.path b/test/path-exists.path deleted file mode 100644 index c4c9105af4..0000000000 --- a/test/path-exists.path +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test PathExists - -[Path] -PathExists=/tmp/test-path_exists - -[Install] -WantedBy=multi-user.target diff --git a/test/path-exists.service b/test/path-exists.service deleted file mode 120000 index 8bdf178830..0000000000 --- a/test/path-exists.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/path-existsglob.path b/test/path-existsglob.path deleted file mode 100644 index a058599605..0000000000 --- a/test/path-existsglob.path +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test PathExistsGlob - -[Path] -PathExistsGlob=/tmp/test-path_existsglob* - -[Install] -WantedBy=multi-user.target diff --git a/test/path-existsglob.service b/test/path-existsglob.service deleted file mode 120000 index 8bdf178830..0000000000 --- a/test/path-existsglob.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/path-makedirectory.path b/test/path-makedirectory.path deleted file mode 100644 index 9408479c0f..0000000000 --- a/test/path-makedirectory.path +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=Test MakeDirectory & DirectoryMode - -[Path] -DirectoryNotEmpty=/tmp/test-path_makedirectory/ -MakeDirectory=yes -DirectoryMode=0744 - -[Install] -WantedBy=multi-user.target diff --git a/test/path-makedirectory.service b/test/path-makedirectory.service deleted file mode 120000 index 8bdf178830..0000000000 --- a/test/path-makedirectory.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/path-modified.path b/test/path-modified.path deleted file mode 100644 index 18363227ba..0000000000 --- a/test/path-modified.path +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test PathModified - -[Path] -PathModified=/tmp/test-path_modified - -[Install] -WantedBy=multi-user.target diff --git a/test/path-modified.service b/test/path-modified.service deleted file mode 120000 index 8bdf178830..0000000000 --- a/test/path-modified.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/path-mycustomunit.service b/test/path-mycustomunit.service deleted file mode 100644 index 172ac0d0d5..0000000000 --- a/test/path-mycustomunit.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Service Test Path Unit= - -[Service] -ExecStart=/bin/true -Type=oneshot diff --git a/test/path-service.service b/test/path-service.service deleted file mode 100644 index f8499ec619..0000000000 --- a/test/path-service.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Service Test for Path units - -[Service] -ExecStart=/bin/true -Type=oneshot diff --git a/test/path-unit.path b/test/path-unit.path deleted file mode 100644 index 95e572d6d5..0000000000 --- a/test/path-unit.path +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Test Path Unit= - -[Path] -PathExists=/tmp/test-path_unit -Unit=path-mycustomunit.service - -[Install] -WantedBy=multi-user.target diff --git a/test/paths.target b/test/paths.target deleted file mode 120000 index e9939c9801..0000000000 --- a/test/paths.target +++ /dev/null @@ -1 +0,0 @@ -../units/paths.target \ No newline at end of file diff --git a/test/rule-syntax-check.py b/test/rule-syntax-check.py deleted file mode 100644 index 80bbe65bea..0000000000 --- a/test/rule-syntax-check.py +++ /dev/null @@ -1,72 +0,0 @@ -# Simple udev rules syntax checker -# -# (C) 2010 Canonical Ltd. -# Author: Martin Pitt -# -# systemd is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. - -# systemd is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with systemd; If not, see . - -import re -import sys -import os -from glob import glob - -if len(sys.argv) > 1: - # explicit rule file list - rules_files = sys.argv[1:] -else: - # take them from the build dir - root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - rules_dir = os.path.join(os.environ.get('top_srcdir', root_dir), 'rules') - if not os.path.isdir(rules_dir): - sys.stderr.write('No rules files given, and %s does not exist, aborting' % rules_dir) - sys.exit(2) - rules_files = glob(os.path.join(rules_dir, '*.rules')) - -no_args_tests = re.compile('(ACTION|DEVPATH|KERNELS?|NAME|SYMLINK|SUBSYSTEMS?|DRIVERS?|TAG|RESULT|TEST)\s*(?:=|!)=\s*"([^"]*)"$') -args_tests = re.compile('(ATTRS?|ENV|TEST){([a-zA-Z0-9/_.*%-]+)}\s*(?:=|!)=\s*"([^"]*)"$') -no_args_assign = re.compile('(NAME|SYMLINK|OWNER|GROUP|MODE|TAG|PROGRAM|RUN|LABEL|GOTO|WAIT_FOR|OPTIONS|IMPORT)\s*(?:\+=|:=|=)\s*"([^"]*)"$') -args_assign = re.compile('(ATTR|ENV|IMPORT|RUN){([a-zA-Z0-9/_.*%-]+)}\s*(=|\+=)\s*"([^"]*)"$') - -result = 0 -buffer = '' -for path in rules_files: - lineno = 0 - for line in open(path): - lineno += 1 - - # handle line continuation - if line.endswith('\\\n'): - buffer += line[:-2] - continue - else: - line = buffer + line - buffer = '' - - # filter out comments and empty lines - line = line.strip() - if not line or line.startswith('#'): - continue - - for clause in line.split(','): - clause = clause.strip() - if not (no_args_tests.match(clause) or args_tests.match(clause) or - no_args_assign.match(clause) or args_assign.match(clause)): - - print('Invalid line %s:%i: %s' % (path, lineno, line)) - print(' clause: %s' % clause) - print('') - result = 1 - break - -sys.exit(result) diff --git a/test/sched_idle_bad.service b/test/sched_idle_bad.service deleted file mode 100644 index 589a87ccfd..0000000000 --- a/test/sched_idle_bad.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Bad sched priority for Idle - -[Service] -ExecStart=/bin/true -CPUSchedulingPriority=1 diff --git a/test/sched_idle_ok.service b/test/sched_idle_ok.service deleted file mode 100644 index 262ef3e319..0000000000 --- a/test/sched_idle_ok.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Sched idle with prio 0 - -[Service] -ExecStart=/bin/true -CPUSchedulingPriority=0 diff --git a/test/sched_rr_bad.service b/test/sched_rr_bad.service deleted file mode 100644 index 0be534a546..0000000000 --- a/test/sched_rr_bad.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Bad sched priority for RR - -[Service] -ExecStart=/bin/true -CPUSchedulingPolicy=rr -CPUSchedulingPriority=0 -CPUSchedulingPriority=100 diff --git a/test/sched_rr_change.service b/test/sched_rr_change.service deleted file mode 100644 index b3e3a000f8..0000000000 --- a/test/sched_rr_change.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Change prio - -[Service] -ExecStart=/bin/true -CPUSchedulingPolicy=rr -CPUSchedulingPriority=1 -CPUSchedulingPriority=2 -CPUSchedulingPriority=99 diff --git a/test/sched_rr_ok.service b/test/sched_rr_ok.service deleted file mode 100644 index b88adc5434..0000000000 --- a/test/sched_rr_ok.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Default prio for RR - -[Service] -ExecStart=/bin/true -CPUSchedulingPolicy=rr diff --git a/test/shutdown.target b/test/shutdown.target deleted file mode 120000 index 1a3c2eec84..0000000000 --- a/test/shutdown.target +++ /dev/null @@ -1 +0,0 @@ -../units/shutdown.target \ No newline at end of file diff --git a/test/sleep.service b/test/sleep.service deleted file mode 100644 index 946c44b621..0000000000 --- a/test/sleep.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Sleep for 1 minute - -[Service] -Type=oneshot -ExecStart=/bin/sleep 60 diff --git a/test/sockets.target b/test/sockets.target deleted file mode 120000 index 8ff86a0775..0000000000 --- a/test/sockets.target +++ /dev/null @@ -1 +0,0 @@ -../units/sockets.target \ No newline at end of file diff --git a/test/son.service b/test/son.service deleted file mode 100644 index 50bb96a941..0000000000 --- a/test/son.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Son Service - -[Service] -Slice=parent.slice -Type=oneshot -ExecStart=/bin/true -CPUShares=100 diff --git a/test/splash.bmp b/test/splash.bmp deleted file mode 100644 index 27247f7a22..0000000000 Binary files a/test/splash.bmp and /dev/null differ diff --git a/test/sys.tar.xz b/test/sys.tar.xz deleted file mode 100644 index 49ee8027b2..0000000000 Binary files a/test/sys.tar.xz and /dev/null differ diff --git a/test/sysinit.target b/test/sysinit.target deleted file mode 120000 index 3301338185..0000000000 --- a/test/sysinit.target +++ /dev/null @@ -1 +0,0 @@ -../units/sysinit.target \ No newline at end of file diff --git a/test/sysv-generator-test.py b/test/sysv-generator-test.py deleted file mode 100644 index cf7d467368..0000000000 --- a/test/sysv-generator-test.py +++ /dev/null @@ -1,391 +0,0 @@ -# systemd-sysv-generator integration test -# -# (C) 2015 Canonical Ltd. -# Author: Martin Pitt -# -# systemd is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. - -# systemd is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with systemd; If not, see . - -import unittest -import sys -import os -import subprocess -import tempfile -import shutil -from glob import glob - -try: - from configparser import RawConfigParser -except ImportError: - # python 2 - from ConfigParser import RawConfigParser - -sysv_generator = os.path.join(os.environ.get('builddir', '.'), 'systemd-sysv-generator') - - -class SysvGeneratorTest(unittest.TestCase): - def setUp(self): - self.workdir = tempfile.mkdtemp(prefix='sysv-gen-test.') - self.init_d_dir = os.path.join(self.workdir, 'init.d') - os.mkdir(self.init_d_dir) - self.rcnd_dir = self.workdir - self.unit_dir = os.path.join(self.workdir, 'systemd') - os.mkdir(self.unit_dir) - self.out_dir = os.path.join(self.workdir, 'output') - os.mkdir(self.out_dir) - - def tearDown(self): - shutil.rmtree(self.workdir) - - # - # Helper methods - # - - def run_generator(self, expect_error=False): - '''Run sysv-generator. - - Fail if stderr contains any "Fail", unless expect_error is True. - Return (stderr, filename -> ConfigParser) pair with ouput to stderr and - parsed generated units. - ''' - env = os.environ.copy() - env['SYSTEMD_LOG_LEVEL'] = 'debug' - env['SYSTEMD_SYSVINIT_PATH'] = self.init_d_dir - env['SYSTEMD_SYSVRCND_PATH'] = self.rcnd_dir - env['SYSTEMD_UNIT_PATH'] = self.unit_dir - gen = subprocess.Popen( - [sysv_generator, 'ignored', 'ignored', self.out_dir], - stdout=subprocess.PIPE, stderr=subprocess.PIPE, - universal_newlines=True, env=env) - (out, err) = gen.communicate() - if not expect_error: - self.assertFalse('Fail' in err, err) - self.assertEqual(gen.returncode, 0, err) - - results = {} - for service in glob(self.out_dir + '/*.service'): - if os.path.islink(service): - continue - cp = RawConfigParser() - cp.optionxform = lambda o: o # don't lower-case option names - with open(service) as f: - cp.readfp(f) - results[os.path.basename(service)] = cp - - return (err, results) - - def add_sysv(self, fname, keys, enable=False, prio=1): - '''Create a SysV init script with the given keys in the LSB header - - There are sensible default values for all fields. - If enable is True, links will be created in the rcN.d dirs. In that - case, the priority can be given with "prio" (default to 1). - - Return path of generated script. - ''' - name_without_sh = fname.endswith('.sh') and fname[:-3] or fname - keys.setdefault('Provides', name_without_sh) - keys.setdefault('Required-Start', '$local_fs') - keys.setdefault('Required-Stop', keys['Required-Start']) - keys.setdefault('Default-Start', '2 3 4 5') - keys.setdefault('Default-Stop', '0 1 6') - keys.setdefault('Short-Description', 'test %s service' % - name_without_sh) - keys.setdefault('Description', 'long description for test %s service' % - name_without_sh) - script = os.path.join(self.init_d_dir, fname) - with open(script, 'w') as f: - f.write('#!/bin/init-d-interpreter\n### BEGIN INIT INFO\n') - for k, v in keys.items(): - if v is not None: - f.write('#%20s %s\n' % (k + ':', v)) - f.write('### END INIT INFO\ncode --goes here\n') - os.chmod(script, 0o755) - - if enable: - def make_link(prefix, runlevel): - d = os.path.join(self.rcnd_dir, 'rc%s.d' % runlevel) - if not os.path.isdir(d): - os.mkdir(d) - os.symlink('../init.d/' + fname, os.path.join(d, prefix + fname)) - - for rl in keys['Default-Start'].split(): - make_link('S%02i' % prio, rl) - for rl in keys['Default-Stop'].split(): - make_link('K%02i' % (99 - prio), rl) - - return script - - def assert_enabled(self, unit, targets): - '''assert that a unit is enabled in precisely the given targets''' - - all_targets = ['multi-user', 'graphical'] - - # should be enabled - for target in all_targets: - link = os.path.join(self.out_dir, '%s.target.wants' % target, unit) - if target in targets: - unit_file = os.readlink(link) - self.assertTrue(os.path.exists(unit_file)) - self.assertEqual(os.path.basename(unit_file), unit) - else: - self.assertFalse(os.path.exists(link), - '%s unexpectedly exists' % link) - - # - # test cases - # - - def test_nothing(self): - '''no input files''' - - results = self.run_generator()[1] - self.assertEqual(results, {}) - self.assertEqual(os.listdir(self.out_dir), []) - - def test_simple_disabled(self): - '''simple service without dependencies, disabled''' - - self.add_sysv('foo', {}, enable=False) - err, results = self.run_generator() - self.assertEqual(len(results), 1) - - # no enablement links or other stuff - self.assertEqual(os.listdir(self.out_dir), ['foo.service']) - - s = results['foo.service'] - self.assertEqual(s.sections(), ['Unit', 'Service']) - self.assertEqual(s.get('Unit', 'Description'), 'LSB: test foo service') - # $local_fs does not need translation, don't expect any dependency - # fields here - self.assertEqual(set(s.options('Unit')), - set(['Documentation', 'SourcePath', 'Description'])) - - self.assertEqual(s.get('Service', 'Type'), 'forking') - init_script = os.path.join(self.init_d_dir, 'foo') - self.assertEqual(s.get('Service', 'ExecStart'), - '%s start' % init_script) - self.assertEqual(s.get('Service', 'ExecStop'), - '%s stop' % init_script) - - self.assertNotIn('Overwriting', err) - - def test_simple_enabled_all(self): - '''simple service without dependencies, enabled in all runlevels''' - - self.add_sysv('foo', {}, enable=True) - err, results = self.run_generator() - self.assertEqual(list(results), ['foo.service']) - self.assert_enabled('foo.service', ['multi-user', 'graphical']) - self.assertNotIn('Overwriting', err) - - def test_simple_enabled_some(self): - '''simple service without dependencies, enabled in some runlevels''' - - self.add_sysv('foo', {'Default-Start': '2 4'}, enable=True) - err, results = self.run_generator() - self.assertEqual(list(results), ['foo.service']) - self.assert_enabled('foo.service', ['multi-user']) - - def test_lsb_macro_dep_single(self): - '''single LSB macro dependency: $network''' - - self.add_sysv('foo', {'Required-Start': '$network'}) - s = self.run_generator()[1]['foo.service'] - self.assertEqual(set(s.options('Unit')), - set(['Documentation', 'SourcePath', 'Description', 'After', 'Wants'])) - self.assertEqual(s.get('Unit', 'After'), 'network-online.target') - self.assertEqual(s.get('Unit', 'Wants'), 'network-online.target') - - def test_lsb_macro_dep_multi(self): - '''multiple LSB macro dependencies''' - - self.add_sysv('foo', {'Required-Start': '$named $portmap'}) - s = self.run_generator()[1]['foo.service'] - self.assertEqual(set(s.options('Unit')), - set(['Documentation', 'SourcePath', 'Description', 'After'])) - self.assertEqual(s.get('Unit', 'After'), 'nss-lookup.target rpcbind.target') - - def test_lsb_deps(self): - '''LSB header dependencies to other services''' - - # also give symlink priorities here; they should be ignored - self.add_sysv('foo', {'Required-Start': 'must1 must2', - 'Should-Start': 'may1 ne_may2'}, - enable=True, prio=40) - self.add_sysv('must1', {}, enable=True, prio=10) - self.add_sysv('must2', {}, enable=True, prio=15) - self.add_sysv('may1', {}, enable=True, prio=20) - # do not create ne_may2 - err, results = self.run_generator() - self.assertEqual(sorted(results), - ['foo.service', 'may1.service', 'must1.service', 'must2.service']) - - # foo should depend on all of them - self.assertEqual(sorted(results['foo.service'].get('Unit', 'After').split()), - ['may1.service', 'must1.service', 'must2.service', 'ne_may2.service']) - - # other services should not depend on each other - self.assertFalse(results['must1.service'].has_option('Unit', 'After')) - self.assertFalse(results['must2.service'].has_option('Unit', 'After')) - self.assertFalse(results['may1.service'].has_option('Unit', 'After')) - - def test_symlink_prio_deps(self): - '''script without LSB headers use rcN.d priority''' - - # create two init.d scripts without LSB header and enable them with - # startup priorities - for prio, name in [(10, 'provider'), (15, 'consumer')]: - with open(os.path.join(self.init_d_dir, name), 'w') as f: - f.write('#!/bin/init-d-interpreter\ncode --goes here\n') - os.fchmod(f.fileno(), 0o755) - - d = os.path.join(self.rcnd_dir, 'rc2.d') - if not os.path.isdir(d): - os.mkdir(d) - os.symlink('../init.d/' + name, os.path.join(d, 'S%02i%s' % (prio, name))) - - err, results = self.run_generator() - self.assertEqual(sorted(results), ['consumer.service', 'provider.service']) - self.assertFalse(results['provider.service'].has_option('Unit', 'After')) - self.assertEqual(results['consumer.service'].get('Unit', 'After'), - 'provider.service') - - def test_multiple_provides(self): - '''multiple Provides: names''' - - self.add_sysv('foo', {'Provides': 'foo bar baz'}) - err, results = self.run_generator() - self.assertEqual(list(results), ['foo.service']) - self.assertEqual(set(results['foo.service'].options('Unit')), - set(['Documentation', 'SourcePath', 'Description'])) - # should create symlinks for the alternative names - for f in ['bar.service', 'baz.service']: - self.assertEqual(os.readlink(os.path.join(self.out_dir, f)), - 'foo.service') - self.assertNotIn('Overwriting', err) - - def test_same_provides_in_multiple_scripts(self): - '''multiple init.d scripts provide the same name''' - - self.add_sysv('foo', {'Provides': 'foo common'}, enable=True, prio=1) - self.add_sysv('bar', {'Provides': 'bar common'}, enable=True, prio=2) - err, results = self.run_generator() - self.assertEqual(sorted(results), ['bar.service', 'foo.service']) - # should create symlink for the alternative name for either unit - self.assertIn(os.readlink(os.path.join(self.out_dir, 'common.service')), - ['foo.service', 'bar.service']) - - def test_provide_other_script(self): - '''init.d scripts provides the name of another init.d script''' - - self.add_sysv('foo', {'Provides': 'foo bar'}, enable=True) - self.add_sysv('bar', {'Provides': 'bar'}, enable=True) - err, results = self.run_generator() - self.assertEqual(sorted(results), ['bar.service', 'foo.service']) - # we do expect an overwrite here, bar.service should overwrite the - # alias link from foo.service - self.assertIn('Overwriting', err) - - def test_nonexecutable_script(self): - '''ignores non-executable init.d script''' - - os.chmod(self.add_sysv('foo', {}), 0o644) - err, results = self.run_generator() - self.assertEqual(results, {}) - - def test_sh_suffix(self): - '''init.d script with .sh suffix''' - - self.add_sysv('foo.sh', {}, enable=True) - err, results = self.run_generator() - s = results['foo.service'] - - self.assertEqual(s.sections(), ['Unit', 'Service']) - # should not have a .sh - self.assertEqual(s.get('Unit', 'Description'), 'LSB: test foo service') - - # calls correct script with .sh - init_script = os.path.join(self.init_d_dir, 'foo.sh') - self.assertEqual(s.get('Service', 'ExecStart'), - '%s start' % init_script) - self.assertEqual(s.get('Service', 'ExecStop'), - '%s stop' % init_script) - - self.assert_enabled('foo.service', ['multi-user', 'graphical']) - - def test_sh_suffix_with_provides(self): - '''init.d script with .sh suffix and Provides:''' - - self.add_sysv('foo.sh', {'Provides': 'foo bar'}) - err, results = self.run_generator() - # ensure we don't try to create a symlink to itself - self.assertNotIn(err, 'itself') - self.assertEqual(list(results), ['foo.service']) - self.assertEqual(results['foo.service'].get('Unit', 'Description'), - 'LSB: test foo service') - - # should create symlink for the alternative name - self.assertEqual(os.readlink(os.path.join(self.out_dir, 'bar.service')), - 'foo.service') - - def test_hidden_files(self): - '''init.d script with hidden file suffix''' - - script = self.add_sysv('foo', {}, enable=True) - # backup files (not enabled in rcN.d/) - shutil.copy(script, script + '.dpkg-new') - shutil.copy(script, script + '.dpkg-dist') - shutil.copy(script, script + '.swp') - shutil.copy(script, script + '.rpmsave') - - err, results = self.run_generator() - self.assertEqual(list(results), ['foo.service']) - - self.assert_enabled('foo.service', ['multi-user', 'graphical']) - - def test_backup_file(self): - '''init.d script with backup file''' - - script = self.add_sysv('foo', {}, enable=True) - # backup files (not enabled in rcN.d/) - shutil.copy(script, script + '.bak') - shutil.copy(script, script + '.old') - - err, results = self.run_generator() - print(err) - self.assertEqual(sorted(results), - ['foo.bak.service', 'foo.old.service', 'foo.service']) - - # ensure we don't try to create a symlink to itself - self.assertNotIn(err, 'itself') - - self.assert_enabled('foo.service', ['multi-user', 'graphical']) - self.assert_enabled('foo.bak.service', []) - self.assert_enabled('foo.old.service', []) - - def test_existing_native_unit(self): - '''existing native unit''' - - with open(os.path.join(self.unit_dir, 'foo.service'), 'w') as f: - f.write('[Unit]\n') - - self.add_sysv('foo.sh', {'Provides': 'foo bar'}, enable=True) - err, results = self.run_generator() - self.assertEqual(list(results), []) - # no enablement or alias links, as native unit is disabled - self.assertEqual(os.listdir(self.out_dir), []) - - -if __name__ == '__main__': - unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, verbosity=2)) diff --git a/test/test-efi-create-disk.sh b/test/test-efi-create-disk.sh deleted file mode 100755 index 56dd09abd7..0000000000 --- a/test/test-efi-create-disk.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash -e - -# create GPT table with EFI System Partition -rm -f test-efi-disk.img -dd if=/dev/null of=test-efi-disk.img bs=1M seek=512 count=1 -parted --script test-efi-disk.img "mklabel gpt" "mkpart ESP fat32 1MiB 511MiB" "set 1 boot on" - -# create FAT32 file system -LOOP=$(losetup --show -f -P test-efi-disk.img) -mkfs.vfat -F32 ${LOOP}p1 -mkdir -p mnt -mount ${LOOP}p1 mnt - -mkdir -p mnt/EFI/{Boot,systemd} -cp systemd-bootx64.efi mnt/EFI/Boot/bootx64.efi - -[ -e /boot/shellx64.efi ] && cp /boot/shellx64.efi mnt/ - -mkdir mnt/EFI/Linux -echo -n "foo=yes bar=no root=/dev/fakeroot debug rd.break=initqueue" > mnt/cmdline.txt -objcopy \ - --add-section .osrel=/etc/os-release --change-section-vma .osrel=0x20000 \ - --add-section .cmdline=mnt/cmdline.txt --change-section-vma .cmdline=0x30000 \ - --add-section .splash=test/splash.bmp --change-section-vma .splash=0x40000 \ - --add-section .linux=/boot/$(cat /etc/machine-id)/$(uname -r)/linux --change-section-vma .linux=0x2000000 \ - --add-section .initrd=/boot/$(cat /etc/machine-id)/$(uname -r)/initrd --change-section-vma .initrd=0x3000000 \ - linuxx64.efi.stub mnt/EFI/Linux/linux-test.efi - -# install entries -mkdir -p mnt/loader/entries -echo -e "timeout 3\n" > mnt/loader/loader.conf -echo -e "title Test\nefi /test\n" > mnt/loader/entries/test.conf -echo -e "title Test2\nlinux /test2\noptions option=yes word number=1000 more\n" > mnt/loader/entries/test2.conf -echo -e "title Test3\nlinux /test3\n" > mnt/loader/entries/test3.conf -echo -e "title Test4\nlinux /test4\n" > mnt/loader/entries/test4.conf -echo -e "title Test5\nefi /test5\n" > mnt/loader/entries/test5.conf -echo -e "title Test6\nlinux /test6\n" > mnt/loader/entries/test6.conf - -sync -umount mnt -rmdir mnt -losetup -d $LOOP diff --git a/test/test-functions b/test/test-functions deleted file mode 100644 index 901ff48605..0000000000 --- a/test/test-functions +++ /dev/null @@ -1,1186 +0,0 @@ -#!/bin/bash -# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- -# ex: ts=8 sw=4 sts=4 et filetype=sh -PATH=/sbin:/bin:/usr/sbin:/usr/bin -export PATH - -KERNEL_VER=${KERNEL_VER-$(uname -r)} -KERNEL_MODS="/lib/modules/$KERNEL_VER/" - -if ! ROOTLIBDIR=$(pkg-config --variable=systemdutildir systemd); then - echo "WARNING! Cannot determine rootlibdir from pkg-config, assuming /usr/lib/systemd" >&2 - ROOTLIBDIR=/usr/lib/systemd -fi - -BASICTOOLS="sh bash setsid loadkeys setfont login sulogin gzip sleep echo mount umount cryptsetup date dmsetup modprobe" -DEBUGTOOLS="df free ls stty cat ps ln ip route dmesg dhclient mkdir cp ping dhclient strace less grep id tty touch du sort hostname" - -function find_qemu_bin() { - # SUSE and Red Hat call the binary qemu-kvm - # Debian and Gentoo call it kvm - [ "$QEMU_BIN" ] || QEMU_BIN=$(which -a kvm qemu-kvm 2>/dev/null | grep '^/' -m1) - - [ "$ARCH" ] || ARCH=$(uname -m) - case $ARCH in - x86_64) - # QEMU's own build system calls it qemu-system-x86_64 - [ "$QEMU_BIN" ] || QEMU_BIN=$(which -a qemu-system-x86_64 2>/dev/null | grep '^/' -m1) - ;; - i*86) - # new i386 version of QEMU - [ "$QEMU_BIN" ] || QEMU_BIN=$(which -a qemu-system-i386 2>/dev/null | grep '^/' -m1) - - # i386 version of QEMU - [ "$QEMU_BIN" ] || QEMU_BIN=$(which -a qemu 2>/dev/null | grep '^/' -m1) - ;; - esac - - if [ ! -e "$QEMU_BIN" ]; then - echo "Could not find a suitable QEMU binary" >&2 - return 1 - fi -} - -run_qemu() { - if [ -f /etc/machine-id ]; then - read MACHINE_ID < /etc/machine-id - [ -z "$INITRD" ] && [ -e "/boot/$MACHINE_ID/$KERNEL_VER/initrd" ] \ - && INITRD="/boot/$MACHINE_ID/$KERNEL_VER/initrd" - [ -z "$KERNEL_BIN" ] && [ -e "/boot/$MACHINE_ID/$KERNEL_VER/linux" ] \ - && KERNEL_BIN="/boot/$MACHINE_ID/$KERNEL_VER/linux" - fi - - [ "$KERNEL_BIN" ] || KERNEL_BIN=/boot/vmlinuz-$KERNEL_VER - [ "$INITRD" ] || INITRD=/boot/initramfs-${KERNEL_VER}.img - [ "$QEMU_SMP" ] || QEMU_SMP=1 - - find_qemu_bin || return 1 - - KERNEL_APPEND="root=/dev/sda1 \ -systemd.log_level=debug \ -raid=noautodetect \ -loglevel=2 \ -init=$ROOTLIBDIR/systemd \ -ro \ -console=ttyS0 \ -selinux=0 \ -$KERNEL_APPEND \ -" - - QEMU_OPTIONS="-machine accel=kvm:tcg \ --smp $QEMU_SMP \ --net none \ --m 512M \ --nographic \ --kernel $KERNEL_BIN \ -" - - if [ "$INITRD" ]; then - QEMU_OPTIONS="$QEMU_OPTIONS -initrd $INITRD" - fi - - ( set -x - $QEMU_BIN $QEMU_OPTIONS -append "$KERNEL_APPEND" $TESTDIR/rootdisk.img ) || return 1 -} - -run_nspawn() { - set -x - ../../systemd-nspawn --boot --directory=$TESTDIR/nspawn-root $ROOTLIBDIR/systemd $KERNEL_APPEND -} - -setup_basic_environment() { - # create the basic filesystem layout - setup_basic_dirs - - install_systemd - install_missing_libraries - install_config_files - create_rc_local - install_basic_tools - install_libnss - install_pam - install_dbus - install_fonts - install_keymaps - install_terminfo - install_execs - install_plymouth - install_debug_tools - install_ld_so_conf - strip_binaries - install_depmod_files - generate_module_dependencies - # softlink mtab - ln -fs /proc/self/mounts $initdir/etc/mtab -} - -install_dmevent() { - instmods dm_crypt =crypto - type -P dmeventd >/dev/null && dracut_install dmeventd - inst_libdir_file "libdevmapper-event.so*" - inst_rules 10-dm.rules 13-dm-disk.rules 95-dm-notify.rules -} - -install_systemd() { - # install compiled files - (cd $TEST_BASE_DIR/..; set -x; make DESTDIR=$initdir install) - # remove unneeded documentation - rm -fr $initdir/usr/share/{man,doc,gtk-doc} - # we strip binaries since debug symbols increase binaries size a lot - # and it could fill the available space - strip_binaries -} - -install_missing_libraries() { - # install possible missing libraries - for i in $initdir/{sbin,bin}/* $initdir/lib/systemd/*; do - inst_libs $i - done -} - -create_empty_image() { - 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=300 - LOOPDEV=$(losetup --show -P -f $TESTDIR/rootdisk.img) - [ -b "$LOOPDEV" ] || return 1 - echo "LOOPDEV=$LOOPDEV" >> $STATEFILE - sfdisk "$LOOPDEV" <$initdir/etc/rc.d/rc.local < $initdir/etc/environment - > $initdir/etc/machine-id - # set the hostname - echo systemd-testsuite > $initdir/etc/hostname - # fstab - cat >$initdir/etc/fstab <&1 >/dev/null |sed -n '/calling init: .*libnss_/ {s!^.* /!/!; p}') - dracut_install $NSS_LIBS -} - -install_dbus() { - inst $ROOTLIBDIR/system/dbus.socket - inst $ROOTLIBDIR/system/dbus.service - - find \ - /etc/dbus-1 -xtype f \ - | while read file; do - inst $file - done -} - -install_pam() { - find \ - /etc/pam.d \ - /etc/security \ - /lib64/security \ - /lib/security -xtype f \ - | while read file; do - inst $file - done -} - -install_keymaps() { - for i in \ - /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 -} - -install_fonts() { - for i in \ - /usr/lib/kbd/consolefonts/eurlatgr* \ - /usr/lib/kbd/consolefonts/latarcyrheb-sun16*; do - [[ -f $i ]] || continue - inst $i - done -} - -install_terminfo() { - for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do - [ -f ${_terminfodir}/l/linux ] && break - done - dracut_install -o ${_terminfodir}/l/linux -} - -setup_testsuite() { - cp $TEST_BASE_DIR/testsuite.target $initdir/etc/systemd/system/ - sed "s#@SYSTEMCTL@#$(type -P systemctl)#g" $TEST_BASE_DIR/end.service.in > $initdir/etc/systemd/system/end.service - - mkdir -p $initdir/etc/systemd/system/testsuite.target.wants - ln -fs $TEST_BASE_DIR/testsuite.service $initdir/etc/systemd/system/testsuite.target.wants/testsuite.service - ln -fs $TEST_BASE_DIR/end.service $initdir/etc/systemd/system/testsuite.target.wants/end.service - - # make the testsuite the default target - ln -fs testsuite.target $initdir/etc/systemd/system/default.target -} - -setup_nspawn_root() { - rm -fr $TESTDIR/nspawn-root - ddebug "cp -ar $initdir $TESTDIR/nspawn-root" - cp -ar $initdir $TESTDIR/nspawn-root - # we don't mount in the nspawn root - rm -f $TESTDIR/nspawn-root/etc/fstab -} - -setup_basic_dirs() { - mkdir -p $initdir/run - mkdir -p $initdir/etc/systemd/system - mkdir -p $initdir/var/log/journal - - for d in usr/bin usr/sbin bin etc lib "$libdir" sbin tmp usr var var/log dev proc sys sysroot root run run/lock run/initramfs; do - if [ -L "/$d" ]; then - inst_symlink "/$d" - else - inst_dir "/$d" - fi - done - - ln -sfn /run "$initdir/var/run" - ln -sfn /run/lock "$initdir/var/lock" -} - -inst_libs() { - local _bin=$1 - local _so_regex='([^ ]*/lib[^/]*/[^ ]*\.so[^ ]*)' - local _file _line - - LC_ALL=C ldd "$_bin" 2>/dev/null | while read _line; do - [[ $_line = 'not a dynamic executable' ]] && break - - if [[ $_line =~ $_so_regex ]]; then - _file=${BASH_REMATCH[1]} - [[ -e ${initdir}/$_file ]] && continue - inst_library "$_file" - continue - fi - - if [[ $_line =~ not\ found ]]; then - dfatal "Missing a shared library required by $_bin." - dfatal "Run \"ldd $_bin\" to find out what it is." - dfatal "$_line" - dfatal "dracut cannot create an initrd." - exit 1 - fi - done -} - -import_testdir() { - STATEFILE=".testdir" - [[ -e $STATEFILE ]] && . $STATEFILE - if [[ -z "$TESTDIR" ]] || [[ ! -d "$TESTDIR" ]]; then - TESTDIR=$(mktemp --tmpdir=/var/tmp -d -t systemd-test.XXXXXX) - echo "TESTDIR=\"$TESTDIR\"" > $STATEFILE - export TESTDIR - fi -} - -import_initdir() { - initdir=$TESTDIR/root - export initdir -} - -## @brief Converts numeric logging level to the first letter of level name. -# -# @param lvl Numeric logging level in range from 1 to 6. -# @retval 1 if @a lvl is out of range. -# @retval 0 if @a lvl is correct. -# @result Echoes first letter of level name. -_lvl2char() { - case "$1" in - 1) echo F;; - 2) echo E;; - 3) echo W;; - 4) echo I;; - 5) echo D;; - 6) echo T;; - *) return 1;; - esac -} - -## @brief Internal helper function for _do_dlog() -# -# @param lvl Numeric logging level. -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -# -# @note This function is not supposed to be called manually. Please use -# dtrace(), ddebug(), or others instead which wrap this one. -# -# This function calls _do_dlog() either with parameter msg, or if -# none is given, it will read standard input and will use every line as -# a message. -# -# This enables: -# dwarn "This is a warning" -# echo "This is a warning" | dwarn -LOG_LEVEL=4 - -dlog() { - [ -z "$LOG_LEVEL" ] && return 0 - [ $1 -le $LOG_LEVEL ] || return 0 - local lvl="$1"; shift - local lvlc=$(_lvl2char "$lvl") || return 0 - - if [ $# -ge 1 ]; then - echo "$lvlc: $*" - else - while read line; do - echo "$lvlc: " "$line" - done - fi -} - -## @brief Logs message at TRACE level (6) -# -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -dtrace() { - set +x - dlog 6 "$@" - [ -n "$debug" ] && set -x || : -} - -## @brief Logs message at DEBUG level (5) -# -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -ddebug() { -# set +x - dlog 5 "$@" -# [ -n "$debug" ] && set -x || : -} - -## @brief Logs message at INFO level (4) -# -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -dinfo() { - set +x - dlog 4 "$@" - [ -n "$debug" ] && set -x || : -} - -## @brief Logs message at WARN level (3) -# -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -dwarn() { - set +x - dlog 3 "$@" - [ -n "$debug" ] && set -x || : -} - -## @brief Logs message at ERROR level (2) -# -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -derror() { -# set +x - dlog 2 "$@" -# [ -n "$debug" ] && set -x || : -} - -## @brief Logs message at FATAL level (1) -# -# @param msg Message. -# @retval 0 It's always returned, even if logging failed. -dfatal() { - set +x - dlog 1 "$@" - [ -n "$debug" ] && set -x || : -} - - -# Generic substring function. If $2 is in $1, return 0. -strstr() { [ "${1#*$2*}" != "$1" ]; } - -# normalize_path -# Prints the normalized path, where it removes any duplicated -# and trailing slashes. -# Example: -# $ normalize_path ///test/test// -# /test/test -normalize_path() { - shopt -q -s extglob - set -- "${1//+(\/)//}" - shopt -q -u extglob - echo "${1%/}" -} - -# convert_abs_rel -# Prints the relative path, when creating a symlink to from . -# Example: -# $ convert_abs_rel /usr/bin/test /bin/test-2 -# ../../bin/test-2 -# $ ln -s $(convert_abs_rel /usr/bin/test /bin/test-2) /usr/bin/test -convert_abs_rel() { - local __current __absolute __abssize __cursize __newpath - local -i __i __level - - set -- "$(normalize_path "$1")" "$(normalize_path "$2")" - - # corner case #1 - self looping link - [[ "$1" == "$2" ]] && { echo "${1##*/}"; return; } - - # corner case #2 - own dir link - [[ "${1%/*}" == "$2" ]] && { echo "."; return; } - - IFS="/" __current=($1) - IFS="/" __absolute=($2) - - __abssize=${#__absolute[@]} - __cursize=${#__current[@]} - - while [[ ${__absolute[__level]} == ${__current[__level]} ]] - do - (( __level++ )) - if (( __level > __abssize || __level > __cursize )) - then - break - fi - done - - for ((__i = __level; __i < __cursize-1; __i++)) - do - if ((__i > __level)) - then - __newpath=$__newpath"/" - fi - __newpath=$__newpath".." - done - - for ((__i = __level; __i < __abssize; __i++)) - do - if [[ -n $__newpath ]] - then - __newpath=$__newpath"/" - fi - __newpath=$__newpath${__absolute[__i]} - done - - echo "$__newpath" -} - - -# Install a directory, keeping symlinks as on the original system. -# Example: if /lib points to /lib64 on the host, "inst_dir /lib/file" -# will create ${initdir}/lib64, ${initdir}/lib64/file, -# and a symlink ${initdir}/lib -> lib64. -inst_dir() { - [[ -e ${initdir}/"$1" ]] && return 0 # already there - - local _dir="$1" _part="${1%/*}" _file - while [[ "$_part" != "${_part%/*}" ]] && ! [[ -e "${initdir}/${_part}" ]]; do - _dir="$_part $_dir" - _part=${_part%/*} - done - - # iterate over parent directories - for _file in $_dir; do - [[ -e "${initdir}/$_file" ]] && continue - if [[ -L $_file ]]; then - inst_symlink "$_file" - else - # create directory - mkdir -m 0755 -p "${initdir}/$_file" || return 1 - [[ -e "$_file" ]] && chmod --reference="$_file" "${initdir}/$_file" - chmod u+w "${initdir}/$_file" - fi - done -} - -# $1 = file to copy to ramdisk -# $2 (optional) Name for the file on the ramdisk -# Location of the image dir is assumed to be $initdir -# We never overwrite the target if it exists. -inst_simple() { - [[ -f "$1" ]] || return 1 - strstr "$1" "/" || return 1 - - local _src=$1 target="${2:-$1}" - if ! [[ -d ${initdir}/$target ]]; then - [[ -e ${initdir}/$target ]] && return 0 - [[ -L ${initdir}/$target ]] && return 0 - [[ -d "${initdir}/${target%/*}" ]] || inst_dir "${target%/*}" - fi - # install checksum files also - if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then - inst "${_src%/*}/.${_src##*/}.hmac" "${target%/*}/.${target##*/}.hmac" - fi - ddebug "Installing $_src" - cp --sparse=always -pfL "$_src" "${initdir}/$target" -} - -# find symlinks linked to given library file -# $1 = library file -# Function searches for symlinks by stripping version numbers appended to -# library filename, checks if it points to the same target and finally -# prints the list of symlinks to stdout. -# -# Example: -# rev_lib_symlinks libfoo.so.8.1 -# output: libfoo.so.8 libfoo.so -# (Only if libfoo.so.8 and libfoo.so exists on host system.) -rev_lib_symlinks() { - [[ ! $1 ]] && return 0 - - local fn="$1" orig="$(readlink -f "$1")" links='' - - [[ ${fn} =~ .*\.so\..* ]] || return 1 - - until [[ ${fn##*.} == so ]]; do - fn="${fn%.*}" - [[ -L ${fn} && $(readlink -f "${fn}") == ${orig} ]] && links+=" ${fn}" - done - - echo "${links}" -} - -# Same as above, but specialized to handle dynamic libraries. -# It handles making symlinks according to how the original library -# is referenced. -inst_library() { - local _src="$1" _dest=${2:-$1} _lib _reallib _symlink - strstr "$1" "/" || return 1 - [[ -e $initdir/$_dest ]] && return 0 - if [[ -L $_src ]]; then - # install checksum files also - if [[ -e "${_src%/*}/.${_src##*/}.hmac" ]]; then - inst "${_src%/*}/.${_src##*/}.hmac" "${_dest%/*}/.${_dest##*/}.hmac" - fi - _reallib=$(readlink -f "$_src") - inst_simple "$_reallib" "$_reallib" - inst_dir "${_dest%/*}" - [[ -d "${_dest%/*}" ]] && _dest=$(readlink -f "${_dest%/*}")/${_dest##*/} - ln -sfn $(convert_abs_rel "${_dest}" "${_reallib}") "${initdir}/${_dest}" - else - inst_simple "$_src" "$_dest" - fi - - # Create additional symlinks. See rev_symlinks description. - for _symlink in $(rev_lib_symlinks $_src) $(rev_lib_symlinks $_reallib); do - [[ ! -e $initdir/$_symlink ]] && { - ddebug "Creating extra symlink: $_symlink" - inst_symlink $_symlink - } - done -} - -# find a binary. If we were not passed the full path directly, -# search in the usual places to find the binary. -find_binary() { - if [[ -z ${1##/*} ]]; then - if [[ -x $1 ]] || { strstr "$1" ".so" && ldd $1 &>/dev/null; }; then - echo $1 - return 0 - fi - fi - - type -P $1 -} - -# Same as above, but specialized to install binary executables. -# Install binary executable, and all shared library dependencies, if any. -inst_binary() { - local _bin _target - _bin=$(find_binary "$1") || return 1 - _target=${2:-$_bin} - [[ -e $initdir/$_target ]] && return 0 - [[ -L $_bin ]] && inst_symlink $_bin $_target && return 0 - local _file _line - local _so_regex='([^ ]*/lib[^/]*/[^ ]*\.so[^ ]*)' - # I love bash! - LC_ALL=C ldd "$_bin" 2>/dev/null | while read _line; do - [[ $_line = 'not a dynamic executable' ]] && break - - if [[ $_line =~ $_so_regex ]]; then - _file=${BASH_REMATCH[1]} - [[ -e ${initdir}/$_file ]] && continue - inst_library "$_file" - continue - fi - - if [[ $_line =~ not\ found ]]; then - dfatal "Missing a shared library required by $_bin." - dfatal "Run \"ldd $_bin\" to find out what it is." - dfatal "$_line" - dfatal "dracut cannot create an initrd." - exit 1 - fi - done - inst_simple "$_bin" "$_target" -} - -# same as above, except for shell scripts. -# If your shell script does not start with shebang, it is not a shell script. -inst_script() { - local _bin - _bin=$(find_binary "$1") || return 1 - shift - local _line _shebang_regex - read -r -n 80 _line <"$_bin" - # If debug is set, clean unprintable chars to prevent messing up the term - [[ $debug ]] && _line=$(echo -n "$_line" | tr -c -d '[:print:][:space:]') - _shebang_regex='(#! *)(/[^ ]+).*' - [[ $_line =~ $_shebang_regex ]] || return 1 - inst "${BASH_REMATCH[2]}" && inst_simple "$_bin" "$@" -} - -# same as above, but specialized for symlinks -inst_symlink() { - local _src=$1 _target=${2:-$1} _realsrc - strstr "$1" "/" || return 1 - [[ -L $1 ]] || return 1 - [[ -L $initdir/$_target ]] && return 0 - _realsrc=$(readlink -f "$_src") - if ! [[ -e $initdir/$_realsrc ]]; then - if [[ -d $_realsrc ]]; then - inst_dir "$_realsrc" - else - inst "$_realsrc" - fi - fi - [[ ! -e $initdir/${_target%/*} ]] && inst_dir "${_target%/*}" - [[ -d ${_target%/*} ]] && _target=$(readlink -f ${_target%/*})/${_target##*/} - ln -sfn $(convert_abs_rel "${_target}" "${_realsrc}") "$initdir/$_target" -} - -# attempt to install any programs specified in a udev rule -inst_rule_programs() { - local _prog _bin - - if grep -qE 'PROGRAM==?"[^ "]+' "$1"; then - for _prog in $(grep -E 'PROGRAM==?"[^ "]+' "$1" | sed -r 's/.*PROGRAM==?"([^ "]+).*/\1/'); do - if [ -x /lib/udev/$_prog ]; then - _bin=/lib/udev/$_prog - else - _bin=$(find_binary "$_prog") || { - dinfo "Skipping program $_prog using in udev rule $(basename $1) as it cannot be found" - continue; - } - fi - - #dinfo "Installing $_bin due to it's use in the udev rule $(basename $1)" - dracut_install "$_bin" - done - fi -} - -# udev rules always get installed in the same place, so -# create a function to install them to make life simpler. -inst_rules() { - local _target=/etc/udev/rules.d _rule _found - - inst_dir "/lib/udev/rules.d" - inst_dir "$_target" - for _rule in "$@"; do - if [ "${rule#/}" = "$rule" ]; then - for r in /lib/udev/rules.d /etc/udev/rules.d; do - if [[ -f $r/$_rule ]]; then - _found="$r/$_rule" - inst_simple "$_found" - inst_rule_programs "$_found" - fi - done - fi - for r in '' ./ $dracutbasedir/rules.d/; do - if [[ -f ${r}$_rule ]]; then - _found="${r}$_rule" - inst_simple "$_found" "$_target/${_found##*/}" - inst_rule_programs "$_found" - fi - done - [[ $_found ]] || dinfo "Skipping udev rule: $_rule" - done -} - -# general purpose installation function -# Same args as above. -inst() { - local _x - - case $# in - 1) ;; - 2) [[ ! $initdir && -d $2 ]] && export initdir=$2 - [[ $initdir = $2 ]] && set $1;; - 3) [[ -z $initdir ]] && export initdir=$2 - set $1 $3;; - *) dfatal "inst only takes 1 or 2 or 3 arguments" - exit 1;; - esac - for _x in inst_symlink inst_script inst_binary inst_simple; do - $_x "$@" && return 0 - done - return 1 -} - -# install any of listed files -# -# If first argument is '-d' and second some destination path, first accessible -# source is installed into this path, otherwise it will installed in the same -# path as source. If none of listed files was installed, function return 1. -# On first successful installation it returns with 0 status. -# -# Example: -# -# inst_any -d /bin/foo /bin/bar /bin/baz -# -# Lets assume that /bin/baz exists, so it will be installed as /bin/foo in -# initramfs. -inst_any() { - local to f - - [[ $1 = '-d' ]] && to="$2" && shift 2 - - for f in "$@"; do - if [[ -e $f ]]; then - [[ $to ]] && inst "$f" "$to" && return 0 - inst "$f" && return 0 - fi - done - - return 1 -} - -# dracut_install [-o ] [ ... ] -# Install to the initramfs image -# -o optionally install the and don't fail, if it is not there -dracut_install() { - local _optional=no - if [[ $1 = '-o' ]]; then - _optional=yes - shift - fi - while (($# > 0)); do - if ! inst "$1" ; then - if [[ $_optional = yes ]]; then - dinfo "Skipping program $1 as it cannot be found and is" \ - "flagged to be optional" - else - dfatal "Failed to install $1" - exit 1 - fi - fi - shift - done -} - -# Install a single kernel module along with any firmware it may require. -# $1 = full path to kernel module to install -install_kmod_with_fw() { - # no need to go further if the module is already installed - - [[ -e "${initdir}/lib/modules/$KERNEL_VER/${1##*/lib/modules/$KERNEL_VER/}" ]] \ - && return 0 - - [[ -e "$initdir/.kernelmodseen/${1##*/}" ]] && return 0 - - if [[ $omit_drivers ]]; then - local _kmod=${1##*/} - _kmod=${_kmod%.ko} - _kmod=${_kmod/-/_} - if [[ "$_kmod" =~ $omit_drivers ]]; then - dinfo "Omitting driver $_kmod" - return 1 - fi - if [[ "${1##*/lib/modules/$KERNEL_VER/}" =~ $omit_drivers ]]; then - dinfo "Omitting driver $_kmod" - return 1 - fi - fi - - [ -d "$initdir/.kernelmodseen" ] && \ - > "$initdir/.kernelmodseen/${1##*/}" - - inst_simple "$1" "/lib/modules/$KERNEL_VER/${1##*/lib/modules/$KERNEL_VER/}" \ - || return $? - - local _modname=${1##*/} _fwdir _found _fw - _modname=${_modname%.ko*} - for _fw in $(modinfo -k $KERNEL_VER -F firmware $1 2>/dev/null); do - _found='' - for _fwdir in $fw_dir; do - if [[ -d $_fwdir && -f $_fwdir/$_fw ]]; then - inst_simple "$_fwdir/$_fw" "/lib/firmware/$_fw" - _found=yes - fi - done - if [[ $_found != yes ]]; then - if ! grep -qe "\<${_modname//-/_}\>" /proc/modules; then - dinfo "Possible missing firmware \"${_fw}\" for kernel module" \ - "\"${_modname}.ko\"" - else - dwarn "Possible missing firmware \"${_fw}\" for kernel module" \ - "\"${_modname}.ko\"" - fi - fi - done - return 0 -} - -# Do something with all the dependencies of a kernel module. -# Note that kernel modules depend on themselves using the technique we use -# $1 = function to call for each dependency we find -# It will be passed the full path to the found kernel module -# $2 = module to get dependencies for -# rest of args = arguments to modprobe -# _fderr specifies FD passed from surrounding scope -for_each_kmod_dep() { - local _func=$1 _kmod=$2 _cmd _modpath _options _found=0 - shift 2 - modprobe "$@" --ignore-install --show-depends $_kmod 2>&${_fderr} | ( - while read _cmd _modpath _options; do - [[ $_cmd = insmod ]] || continue - $_func ${_modpath} || exit $? - _found=1 - done - [[ $_found -eq 0 ]] && exit 1 - exit 0 - ) -} - -# filter kernel modules to install certain modules that meet specific -# requirements. -# $1 = search only in subdirectory of /kernel/$1 -# $2 = function to call with module name to filter. -# This function will be passed the full path to the module to test. -# The behavior of this function can vary depending on whether $hostonly is set. -# If it is, we will only look at modules that are already in memory. -# If it is not, we will look at all kernel modules -# This function returns the full filenames of modules that match $1 -filter_kernel_modules_by_path () ( - local _modname _filtercmd - if ! [[ $hostonly ]]; then - _filtercmd='find "$KERNEL_MODS/kernel/$1" "$KERNEL_MODS/extra"' - _filtercmd+=' "$KERNEL_MODS/weak-updates" -name "*.ko" -o -name "*.ko.gz"' - _filtercmd+=' -o -name "*.ko.xz"' - _filtercmd+=' 2>/dev/null' - else - _filtercmd='cut -d " " -f 1 $initdir/$$.ko - $2 $initdir/$$.ko && echo "$_modname" - rm -f $initdir/$$.ko - ;; - *.ko.xz) xz -dc "$_modname" > $initdir/$$.ko - $2 $initdir/$$.ko && echo "$_modname" - rm -f $initdir/$$.ko - ;; - esac - done -) -find_kernel_modules_by_path () ( - if ! [[ $hostonly ]]; then - find "$KERNEL_MODS/kernel/$1" "$KERNEL_MODS/extra" "$KERNEL_MODS/weak-updates" \ - -name "*.ko" -o -name "*.ko.gz" -o -name "*.ko.xz" 2>/dev/null - else - cut -d " " -f 1 /dev/null - fi -) - -filter_kernel_modules () { - filter_kernel_modules_by_path drivers "$1" -} - -find_kernel_modules () { - find_kernel_modules_by_path drivers -} - -# instmods [-c] [ ... ] -# instmods [-c] -# install kernel modules along with all their dependencies. -# can be e.g. "=block" or "=drivers/usb/storage" -instmods() { - [[ $no_kernel = yes ]] && return - # called [sub]functions inherit _fderr - local _fderr=9 - local _check=no - if [[ $1 = '-c' ]]; then - _check=yes - shift - fi - - function inst1mod() { - local _ret=0 _mod="$1" - case $_mod in - =*) - if [ -f $KERNEL_MODS/modules.${_mod#=} ]; then - ( [[ "$_mpargs" ]] && echo $_mpargs - cat "${KERNEL_MODS}/modules.${_mod#=}" ) \ - | instmods - else - ( [[ "$_mpargs" ]] && echo $_mpargs - find "$KERNEL_MODS" -path "*/${_mod#=}/*" -printf '%f\n' ) \ - | instmods - fi - ;; - --*) _mpargs+=" $_mod" ;; - i2o_scsi) return ;; # Do not load this diagnostic-only module - *) - _mod=${_mod##*/} - # if we are already installed, skip this module and go on - # to the next one. - [[ -f "$initdir/.kernelmodseen/${_mod%.ko}.ko" ]] && return - - if [[ $omit_drivers ]] && [[ "$1" =~ $omit_drivers ]]; then - dinfo "Omitting driver ${_mod##$KERNEL_MODS}" - return - fi - # If we are building a host-specific initramfs and this - # module is not already loaded, move on to the next one. - [[ $hostonly ]] && ! grep -qe "\<${_mod//-/_}\>" /proc/modules \ - && ! echo $add_drivers | grep -qe "\<${_mod}\>" \ - && return - - # We use '-d' option in modprobe only if modules prefix path - # differs from default '/'. This allows us to use Dracut with - # old version of modprobe which doesn't have '-d' option. - local _moddirname=${KERNEL_MODS%%/lib/modules/*} - [[ -n ${_moddirname} ]] && _moddirname="-d ${_moddirname}/" - - # ok, load the module, all its dependencies, and any firmware - # it may require - for_each_kmod_dep install_kmod_with_fw $_mod \ - --set-version $KERNEL_VER ${_moddirname} $_mpargs - ((_ret+=$?)) - ;; - esac - return $_ret - } - - function instmods_1() { - local _mod _mpargs - if (($# == 0)); then # filenames from stdin - while read _mod; do - inst1mod "${_mod%.ko*}" || { - if [ "$_check" = "yes" ]; then - dfatal "Failed to install $_mod" - return 1 - fi - } - done - fi - while (($# > 0)); do # filenames as arguments - inst1mod ${1%.ko*} || { - if [ "$_check" = "yes" ]; then - dfatal "Failed to install $1" - return 1 - fi - } - shift - done - return 0 - } - - local _ret _filter_not_found='FATAL: Module .* not found.' - set -o pipefail - # Capture all stderr from modprobe to _fderr. We could use {var}>... - # redirections, but that would make dracut require bash4 at least. - eval "( instmods_1 \"\$@\" ) ${_fderr}>&1" \ - | while read line; do [[ "$line" =~ $_filter_not_found ]] && echo $line || echo $line >&2 ;done | derror - _ret=$? - set +o pipefail - return $_ret -} - -# inst_libdir_file [-n ] [...] -# Install a located on a lib directory to the initramfs image -# -n install non-matching files -inst_libdir_file() { - if [[ "$1" == "-n" ]]; then - local _pattern=$1 - shift 2 - for _dir in $libdirs; do - for _i in "$@"; do - for _f in "$_dir"/$_i; do - [[ "$_i" =~ $_pattern ]] || continue - [[ -e "$_i" ]] && dracut_install "$_i" - done - done - done - else - for _dir in $libdirs; do - for _i in "$@"; do - for _f in "$_dir"/$_i; do - [[ -e "$_f" ]] && dracut_install "$_f" - done - done - done - fi -} - -check_nspawn() { - [[ -d /sys/fs/cgroup/systemd ]] -} - - -do_test() { - if [[ $UID != "0" ]]; then - echo "TEST: $TEST_DESCRIPTION [SKIPPED]: not root" >&2 - exit 0 - fi - -# Detect lib paths - [[ $libdir ]] || for libdir in /lib64 /lib; do - [[ -d $libdir ]] && libdirs+=" $libdir" && break - done - - [[ $usrlibdir ]] || for usrlibdir in /usr/lib64 /usr/lib; do - [[ -d $usrlibdir ]] && libdirs+=" $usrlibdir" && break - done - - import_testdir - import_initdir - - while (($# > 0)); do - case $1 in - --run) - echo "TEST RUN: $TEST_DESCRIPTION" - test_run - ret=$? - if [ $ret -eq 0 ]; then - echo "TEST RUN: $TEST_DESCRIPTION [OK]" - else - echo "TEST RUN: $TEST_DESCRIPTION [FAILED]" - fi - exit $ret;; - --setup) - echo "TEST SETUP: $TEST_DESCRIPTION" - test_setup - exit $?;; - --clean) - echo "TEST CLEANUP: $TEST_DESCRIPTION" - test_cleanup - rm -fr "$TESTDIR" - rm -f .testdir - exit $?;; - --all) - echo -n "TEST: $TEST_DESCRIPTION "; - ( - test_setup && test_run - ret=$? - test_cleanup - rm -fr "$TESTDIR" - rm -f .testdir - exit $ret - ) test.log 2>&1 - ret=$? - if [ $ret -eq 0 ]; then - rm test.log - echo "[OK]" - else - echo "[FAILED]" - echo "see $(pwd)/test.log" - fi - exit $ret;; - *) break ;; - esac - shift - done -} diff --git a/test/testsuite.target b/test/testsuite.target deleted file mode 100644 index 1a7e5b371a..0000000000 --- a/test/testsuite.target +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Testsuite target -Requires=multi-user.target -After=multi-user.target -Conflicts=rescue.target -AllowIsolate=yes diff --git a/test/timers.target b/test/timers.target deleted file mode 120000 index 576d47fed7..0000000000 --- a/test/timers.target +++ /dev/null @@ -1 +0,0 @@ -../units/timers.target \ No newline at end of file diff --git a/test/udev-test.pl b/test/udev-test.pl deleted file mode 100755 index 64d7f93444..0000000000 --- a/test/udev-test.pl +++ /dev/null @@ -1,1545 +0,0 @@ -#!/usr/bin/perl - -# udev test -# -# Provides automated testing of the udev binary. -# The whole test is self contained in this file, except the matching sysfs tree. -# Simply extend the @tests array, to add a new test variant. -# -# Every test is driven by its own temporary config file. -# This program prepares the environment, creates the config and calls udev. -# -# udev parses the rules, looks at the provided sysfs and -# first creates and then removes the device node. -# After creation and removal the result is checked against the -# expected value and the result is printed. -# -# Copyright (C) 2004-2012 Kay Sievers -# Copyright (C) 2004 Leann Ogasawara - -use warnings; -use strict; - -my $udev_bin = "./test-udev"; -my $valgrind = 0; -my $gdb = 0; -my $udev_bin_valgrind = "valgrind --tool=memcheck --leak-check=yes --track-origins=yes --quiet $udev_bin"; -my $udev_bin_gdb = "gdb --args $udev_bin"; -my $udev_dev = "test/dev"; -my $udev_run = "test/run"; -my $udev_rules_dir = "$udev_run/udev/rules.d"; -my $udev_rules = "$udev_rules_dir/udev-test.rules"; -my $EXIT_TEST_SKIP = 77; - -my @tests = ( - { - desc => "no rules", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "sda" , - exp_rem_error => "yes", - rules => < "label test of scsi disc", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "boot_disk" , - rules => < "label test of scsi disc", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "boot_disk" , - rules => < "label test of scsi disc", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "boot_disk" , - rules => < "label test of scsi partition", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "boot_disk1" , - rules => < "label test of pattern match", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "boot_disk1" , - rules => < "label test of multiple sysfs files", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "boot_disk1" , - rules => < "label test of max sysfs files (skip invalid rule)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "boot_disk1" , - rules => < "catch device by *", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem/0" , - rules => < "catch device by * - take 2", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem/0" , - rules => < "catch device by ?", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem/0" , - rules => < "catch device by character class", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem/0" , - rules => < "replace kernel name", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "Handle comment lines in config file (and replace kernel name)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "Handle comment lines in config file with whitespace (and replace kernel name)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "Handle whitespace only lines (and replace kernel name)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "whitespace" , - rules => < "Handle empty lines in config file (and replace kernel name)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "Handle backslashed multi lines in config file (and replace kernel name)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "preserve backslashes, if they are not for a newline", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "aaa", - rules => < "Handle stupid backslashed multi lines in config file (and replace kernel name)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "subdirectory handling", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "sub/direct/ory/modem" , - rules => < "parent device name match of scsi partition", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "first_disk5" , - rules => < "test substitution chars", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "Major:8:minor:5:kernelnumber:5:id:0:0:0:0" , - rules => < "import of shell-value returned from program", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node12345678", - rules => < "sustitution of sysfs value (%s{file})", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "disk-ATA-sda" , - rules => < "program result substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "special-device-5" , - not_exp_name => "not" , - rules => < "program result substitution (newline removal)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "newline_removed" , - rules => < "program result substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "test-0:0:0:0" , - rules => < "program with lots of arguments", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "foo9" , - rules => < "program with subshell", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "bar9" , - rules => < "program arguments combined with apostrophes", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "foo7" , - rules => < "characters before the %c{N} substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "my-foo9" , - rules => < "substitute the second to last argument", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "my-foo8" , - rules => < "test substitution by variable name", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "Major:8-minor:5-kernelnumber:5-id:0:0:0:0", - rules => < "test substitution by variable name 2", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "Major:8-minor:5-kernelnumber:5-id:0:0:0:0", - rules => < "test substitution by variable name 3", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "850:0:0:05" , - rules => < "test substitution by variable name 4", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "855" , - rules => < "test substitution by variable name 5", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "8550:0:0:0" , - rules => < "non matching SUBSYSTEMS for device with no parent", - devpath => "/devices/virtual/tty/console", - exp_name => "TTY", - rules => < "non matching SUBSYSTEMS", - devpath => "/devices/virtual/tty/console", - exp_name => "TTY" , - rules => < "ATTRS match", - devpath => "/devices/virtual/tty/console", - exp_name => "foo" , - rules => < "ATTR (empty file)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "empty" , - rules => < "ATTR (non-existent file)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "non-existent" , - rules => < "program and bus type match", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "scsi-0:0:0:0" , - rules => < "sysfs parent hierarchy", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem" , - rules => < "name test with ! in the name", - devpath => "/devices/virtual/block/fake!blockdev0", - exp_name => "is/a/fake/blockdev0" , - rules => < "name test with ! in the name, but no matching rule", - devpath => "/devices/virtual/block/fake!blockdev0", - exp_name => "fake/blockdev0" , - exp_rem_error => "yes", - rules => < "KERNELS rule", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "scsi-0:0:0:0", - rules => < "KERNELS wildcard all", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "scsi-0:0:0:0", - rules => < "KERNELS wildcard partial", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "scsi-0:0:0:0", - rules => < "KERNELS wildcard partial 2", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "scsi-0:0:0:0", - rules => < "substitute attr with link target value (first match)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "driver-is-sd", - rules => < "substitute attr with link target value (currently selected device)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "driver-is-ahci", - rules => < "ignore ATTRS attribute whitespace", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "ignored", - rules => < "do not ignore ATTRS attribute whitespace", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "matched-with-space", - rules => < "permissions USER=bad GROUP=name", - devpath => "/devices/virtual/tty/tty33", - exp_name => "tty33", - exp_perms => "0:0:0600", - rules => < "permissions OWNER=1", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => "1::0600", - rules => < "permissions GROUP=1", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => ":1:0660", - rules => < "textual user id", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => "nobody::0600", - rules => < "textual group id", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => ":daemon:0660", - rules => < "textual user/group id", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => "root:mail:0660", - rules => < "permissions MODE=0777", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => "::0777", - rules => < "permissions OWNER=1 GROUP=1 MODE=0777", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_perms => "1:1:0777", - rules => < "permissions OWNER to 1", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => "1::", - rules => < "permissions GROUP to 1", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => ":1:0660", - rules => < "permissions MODE to 0060", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => "::0060", - rules => < "permissions OWNER, GROUP, MODE", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => "1:1:0777", - rules => < "permissions only rule", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => "1:1:0777", - rules => < "multiple permissions only rule", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => "1:1:0777", - rules => < "permissions only rule with override at SYMLINK+ rule", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "ttyACM0", - exp_perms => "1:2:0777", - rules => < "major/minor number test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - exp_majorminor => "8:0", - rules => < "big major number test", - devpath => "/devices/virtual/misc/misc-fake1", - exp_name => "node", - exp_majorminor => "4095:1", - rules => < "big major and big minor number test", - devpath => "/devices/virtual/misc/misc-fake89999", - exp_name => "node", - exp_majorminor => "4095:89999", - rules => < "multiple symlinks with format char", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "symlink2-ttyACM0", - rules => < "multiple symlinks with a lot of s p a c e s", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "one", - not_exp_name => " ", - rules => < "symlink creation (same directory)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "modem0", - rules => < "multiple symlinks", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "second-0" , - rules => < "symlink name '.'", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => ".", - exp_add_error => "yes", - exp_rem_error => "yes", - rules => < "symlink node to itself", - devpath => "/devices/virtual/tty/tty0", - exp_name => "link", - exp_add_error => "yes", - exp_rem_error => "yes", - option => "clean", - rules => < "symlink %n substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "symlink0", - rules => < "symlink %k substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "symlink-ttyACM0", - rules => < "symlink %M:%m substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "major-166:0", - rules => < "symlink %b substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "symlink-0:0:0:0", - rules => < "symlink %c substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "test", - rules => < "symlink %c{N} substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "test", - rules => < "symlink %c{N+} substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "this", - rules => < "symlink only rule with %c{N+}", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "test", - rules => < "symlink %s{filename} substitution", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "166:0", - rules => < "program result substitution (numbered part of)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "link1", - rules => < "program result substitution (numbered part of+)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5", - exp_name => "link4", - rules => < "SUBSYSTEM match test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - rules => < "DRIVERS match test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - rules => < "devnode substitution test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node", - rules => < "parent node name substitution test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "sda-part-1", - rules => < "udev_root substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "start-/dev-end", - rules => < "last_rule option", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "last", - rules => < "negation KERNEL!=", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "match", - rules => < "negation SUBSYSTEM!=", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "not-anything", - rules => < "negation PROGRAM!= exit code", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "nonzero-program", - rules => < "ENV{} test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "true", - rules => < "ENV{} test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "true", - rules => < "ENV{} test (assign)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "true", - rules => < "ENV{} test (assign 2 times)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "true", - rules => < "ENV{} test (assign2)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "part", - rules => < "untrusted string sanitize", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "sane", - rules => < "untrusted string sanitize (don't replace utf8)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "uber", - rules => < "untrusted string sanitize (replace invalid utf8)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "replaced", - rules => < "read sysfs value from parent device", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "serial-354172020305000", - rules => < "match against empty key string", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "ok", - rules => < "check ACTION value", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "ok", - rules => < "final assignment", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "ok", - exp_perms => "root:tty:0640", - rules => < "final assignment 2", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "ok", - exp_perms => "root:tty:0640", - rules => < "env substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "node-add-me", - rules => < "reset list to current value", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "three", - not_exp_name => "two", - rules => < "test empty SYMLINK+ (empty override)", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "right", - not_exp_name => "wrong", - rules => < "test multi matches", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "right", - rules => < "test multi matches 2", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "right", - rules => < "test multi matches 3", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "right", - rules => < "test multi matches 4", - devpath => "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0", - exp_name => "right", - rules => < "IMPORT parent test sequence 1/2 (keep)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "parent", - option => "keep", - rules => < "IMPORT parent test sequence 2/2 (keep)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "parentenv-parent_right", - option => "clean", - rules => < "GOTO test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "right", - rules => < "GOTO label does not exist", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "right", - rules => < "SYMLINK+ compare test", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "right", - not_exp_name => "wrong", - rules => < "invalid key operation", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "yes", - rules => < "operator chars in attribute", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "yes", - rules => < "overlong comment line", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", - exp_name => "yes", - rules => < "magic subsys/kernel lookup", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "00:16:41:e2:8d:ff", - rules => < "TEST absolute path", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "there", - rules => < "TEST subsys/kernel lookup", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "yes", - rules => < "TEST relative path", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "relative", - rules => < "TEST wildcard substitution (find queue/nr_requests)", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "found-subdir", - rules => < "TEST MODE=0000", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "sda", - exp_perms => "0:0:0000", - exp_rem_error => "yes", - rules => < "TEST PROGRAM feeds OWNER, GROUP, MODE", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "sda", - exp_perms => "1:1:0400", - exp_rem_error => "yes", - rules => < "TEST PROGRAM feeds MODE with overflow", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "sda", - exp_perms => "0:0:0440", - exp_rem_error => "yes", - rules => < "magic [subsys/sysname] attribute substitution", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "sda-8741C4G-end", - exp_perms => "0:0:0600", - rules => < "builtin path_id", - devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", - exp_name => "disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0", - rules => <$udev_rules" || die "unable to create rules file: $udev_rules"; - print CONF $$rules; - close CONF; - - if ($valgrind > 0) { - system("$udev_bin_valgrind $action $devpath"); - } elsif ($gdb > 0) { - system("$udev_bin_gdb $action $devpath"); - } else { - system("$udev_bin", "$action", "$devpath"); - } -} - -my $error = 0; - -sub permissions_test { - my($rules, $uid, $gid, $mode) = @_; - - my $wrong = 0; - my $userid; - my $groupid; - - $rules->{exp_perms} =~ m/^(.*):(.*):(.*)$/; - if ($1 ne "") { - if (defined(getpwnam($1))) { - $userid = int(getpwnam($1)); - } else { - $userid = $1; - } - if ($uid != $userid) { $wrong = 1; } - } - if ($2 ne "") { - if (defined(getgrnam($2))) { - $groupid = int(getgrnam($2)); - } else { - $groupid = $2; - } - if ($gid != $groupid) { $wrong = 1; } - } - if ($3 ne "") { - if (($mode & 07777) != oct($3)) { $wrong = 1; }; - } - if ($wrong == 0) { - print "permissions: ok\n"; - } else { - printf " expected permissions are: %s:%s:%#o\n", $1, $2, oct($3); - printf " created permissions are : %i:%i:%#o\n", $uid, $gid, $mode & 07777; - print "permissions: error\n"; - $error++; - sleep(1); - } -} - -sub major_minor_test { - my($rules, $rdev) = @_; - - my $major = ($rdev >> 8) & 0xfff; - my $minor = ($rdev & 0xff) | (($rdev >> 12) & 0xfff00); - my $wrong = 0; - - $rules->{exp_majorminor} =~ m/^(.*):(.*)$/; - if ($1 ne "") { - if ($major != $1) { $wrong = 1; }; - } - if ($2 ne "") { - if ($minor != $2) { $wrong = 1; }; - } - if ($wrong == 0) { - print "major:minor: ok\n"; - } else { - printf " expected major:minor is: %i:%i\n", $1, $2; - printf " created major:minor is : %i:%i\n", $major, $minor; - print "major:minor: error\n"; - $error++; - sleep(1); - } -} - -sub udev_setup { - system("rm", "-rf", "$udev_dev"); - mkdir($udev_dev) || die "unable to create udev_dev: $udev_dev\n"; - # setting group and mode of udev_dev ensures the tests work - # even if the parent directory has setgid bit enabled. - chown (0, 0, $udev_dev) || die "unable to chown $udev_dev\n"; - chmod (0755, $udev_dev) || die "unable to chmod $udev_dev\n"; - - system("rm", "-rf", "$udev_run"); -} - -sub run_test { - my ($rules, $number) = @_; - - print "TEST $number: $rules->{desc}\n"; - print "device \'$rules->{devpath}\' expecting node/link \'$rules->{exp_name}\'\n"; - - udev("add", $rules->{devpath}, \$rules->{rules}); - if (defined($rules->{not_exp_name})) { - if ((-e "$udev_dev/$rules->{not_exp_name}") || - (-l "$udev_dev/$rules->{not_exp_name}")) { - print "nonexistent: error \'$rules->{not_exp_name}\' not expected to be there\n"; - $error++; - sleep(1); - } - } - - if ((-e "$udev_dev/$rules->{exp_name}") || - (-l "$udev_dev/$rules->{exp_name}")) { - - my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, - $atime, $mtime, $ctime, $blksize, $blocks) = stat("$udev_dev/$rules->{exp_name}"); - - if (defined($rules->{exp_perms})) { - permissions_test($rules, $uid, $gid, $mode); - } - if (defined($rules->{exp_majorminor})) { - major_minor_test($rules, $rdev); - } - print "add: ok\n"; - } else { - print "add: error"; - if ($rules->{exp_add_error}) { - print " as expected\n"; - } else { - print "\n"; - system("tree", "$udev_dev"); - print "\n"; - $error++; - sleep(1); - } - } - - if (defined($rules->{option}) && $rules->{option} eq "keep") { - print "\n\n"; - return; - } - - udev("remove", $rules->{devpath}, \$rules->{rules}); - if ((-e "$udev_dev/$rules->{exp_name}") || - (-l "$udev_dev/$rules->{exp_name}")) { - print "remove: error"; - if ($rules->{exp_rem_error}) { - print " as expected\n"; - } else { - print "\n"; - system("tree", "$udev_dev"); - print "\n"; - $error++; - sleep(1); - } - } else { - print "remove: ok\n"; - } - - print "\n"; - - if (defined($rules->{option}) && $rules->{option} eq "clean") { - udev_setup(); - } - -} - -# only run if we have root permissions -# due to mknod restrictions -if (!($<==0)) { - print "Must have root permissions to run properly.\n"; - exit; -} - -# skip the test when running in a container -system("systemd-detect-virt", "-c", "-q"); -if ($? >> 8 == 0) { - print "Running in a container, skipping the test.\n"; - exit($EXIT_TEST_SKIP); -} - -udev_setup(); - -my $test_num = 1; -my @list; - -foreach my $arg (@ARGV) { - if ($arg =~ m/--valgrind/) { - $valgrind = 1; - printf("using valgrind\n"); - } elsif ($arg =~ m/--gdb/) { - $gdb = 1; - printf("using gdb\n"); - } else { - push(@list, $arg); - } -} - -if ($list[0]) { - foreach my $arg (@list) { - if (defined($tests[$arg-1]->{desc})) { - print "udev-test will run test number $arg:\n\n"; - run_test($tests[$arg-1], $arg); - } else { - print "test does not exist.\n"; - } - } -} else { - # test all - print "\nudev-test will run ".($#tests + 1)." tests:\n\n"; - - foreach my $rules (@tests) { - run_test($rules, $test_num); - $test_num++; - } -} - -print "$error errors occurred\n\n"; - -# cleanup -system("rm", "-rf", "$udev_dev"); -system("rm", "-rf", "$udev_run"); - -if ($error > 0) { - exit(1); -} -exit(0); diff --git a/test/unstoppable.service b/test/unstoppable.service deleted file mode 100644 index 24fb0a25e1..0000000000 --- a/test/unstoppable.service +++ /dev/null @@ -1,5 +0,0 @@ -[Service] -Type=oneshot -RemainAfterExit=yes -ExecStart=/bin/echo 'I'm unstoppable!' -ExecStop=/bin/systemctl start --no-block unstoppable.service -- cgit v1.2.3-54-g00ecf