diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2019-05-19 13:00:00 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2019-05-19 13:00:00 +0200 |
commit | 5c305ce2db2ce423bd04e4d4bfbc071ffcae04d2 (patch) | |
tree | 4bbebb536a08adf8b89b47cfaae99a23a6cbca1b /test/TEST-32-OOMPOLICY | |
parent | 95cff2a7942badfe7d3fbf12a644749c3dc76b1d (diff) | |
download | systemd-5c305ce2db2ce423bd04e4d4bfbc071ffcae04d2.tar.gz |
test: rename TEST-31-OOMPOLICY to TEST-32-OOMPOLICY
TEST-31-DEVICE-ENUMERATION got merged first.
Diffstat (limited to 'test/TEST-32-OOMPOLICY')
l--------- | test/TEST-32-OOMPOLICY/Makefile | 1 | ||||
-rwxr-xr-x | test/TEST-32-OOMPOLICY/test.sh | 52 | ||||
-rwxr-xr-x | test/TEST-32-OOMPOLICY/testsuite.sh | 39 |
3 files changed, 92 insertions, 0 deletions
diff --git a/test/TEST-32-OOMPOLICY/Makefile b/test/TEST-32-OOMPOLICY/Makefile new file mode 120000 index 0000000000..e9f93b1104 --- /dev/null +++ b/test/TEST-32-OOMPOLICY/Makefile @@ -0,0 +1 @@ +../TEST-01-BASIC/Makefile
\ No newline at end of file diff --git a/test/TEST-32-OOMPOLICY/test.sh b/test/TEST-32-OOMPOLICY/test.sh new file mode 100755 index 0000000000..55752e6a70 --- /dev/null +++ b/test/TEST-32-OOMPOLICY/test.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh +set -e +TEST_DESCRIPTION="test OOM killer logic" +TEST_NO_NSPAWN=1 + +. $TEST_BASE_DIR/test-functions + +UNIFIED_CGROUP_HIERARCHY=yes + +test_setup() { + create_empty_image + mkdir -p $TESTDIR/root + mount ${LOOPDEV}p1 $TESTDIR/root + + ( + LOG_LEVEL=5 + eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) + + setup_basic_environment + + # mask some services that we do not want to run in these tests + ln -fs /dev/null $initdir/etc/systemd/system/systemd-hwdb-update.service + ln -fs /dev/null $initdir/etc/systemd/system/systemd-journal-catalog-update.service + ln -fs /dev/null $initdir/etc/systemd/system/systemd-networkd.service + ln -fs /dev/null $initdir/etc/systemd/system/systemd-networkd.socket + ln -fs /dev/null $initdir/etc/systemd/system/systemd-resolved.service + ln -fs /dev/null $initdir/etc/systemd/system/systemd-machined.service + + # setup the testsuite service + cat >$initdir/etc/systemd/system/testsuite.service <<EOF +[Unit] +Description=Testsuite service + +[Service] +ExecStart=/testsuite.sh +Type=oneshot +StandardOutput=tty +StandardError=tty +MemoryAccounting=yes +EOF + cp testsuite.sh $initdir/ + + setup_testsuite + ) || return 1 + + ddebug "umount $TESTDIR/root" + umount $TESTDIR/root +} + +do_test "$@" diff --git a/test/TEST-32-OOMPOLICY/testsuite.sh b/test/TEST-32-OOMPOLICY/testsuite.sh new file mode 100755 index 0000000000..f0b1470d42 --- /dev/null +++ b/test/TEST-32-OOMPOLICY/testsuite.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh +set -ex +set -o pipefail + +# Let's run this test only if the "memory.oom.group" cgroupfs attribute +# exists. This test is a bit too strict, since the "memory.events"/"oom_kill" +# logic has been around since a longer time than "memory.oom.group", but it's +# an easier thing to test for, and also: let's not get confused by older +# kernels where the concept was still new. + +if test -f /sys/fs/cgroup/system.slice/testsuite.service/memory.oom.group ; then + + systemd-analyze log-level debug + systemd-analyze log-target console + + # Run a service that is guaranteed to be the first candidate for OOM killing + systemd-run --unit=oomtest.service -p Type=exec -p OOMScoreAdjust=1000 -p OOMPolicy=stop -p MemoryAccounting=yes /bin/sleep infinity + + # Trigger an OOM killer run + echo 1 > /proc/sys/kernel/sysrq + echo f > /proc/sysrq-trigger + + while : ; do + STATE=`systemctl show -p ActiveState --value oomtest.service` + [ "$STATE" = "failed" ] && break + sleep .5 + done + + RESULT=`systemctl show -p Result --value oomtest.service` + test "$RESULT" = "oom-kill" + + systemd-analyze log-level info +fi + +echo OK > /testok + +exit 0 |