From: Lennart Poettering Date: Thu, 23 Feb 2023 16:41:35 +0000 (+0100) Subject: test: add test for the new memory pressure unit file settings, and that they work X-Git-Tag: v254-rc1~1142^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b7101183cac4b35a8bd6ea2c1de9260c33f977f;p=thirdparty%2Fsystemd.git test: add test for the new memory pressure unit file settings, and that they work --- diff --git a/test/TEST-79-MEMPRESS/Makefile b/test/TEST-79-MEMPRESS/Makefile new file mode 120000 index 00000000000..e9f93b1104c --- /dev/null +++ b/test/TEST-79-MEMPRESS/Makefile @@ -0,0 +1 @@ +../TEST-01-BASIC/Makefile \ No newline at end of file diff --git a/test/TEST-79-MEMPRESS/test.sh b/test/TEST-79-MEMPRESS/test.sh new file mode 100755 index 00000000000..95c8581238f --- /dev/null +++ b/test/TEST-79-MEMPRESS/test.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: LGPL-2.1-or-later +set -e + +TEST_DESCRIPTION="Test Memory Pressure handling" +# Ignore gcov complaints caused by DynamicUser=true +IGNORE_MISSING_COVERAGE=yes + +# shellcheck source=test/test-functions +. "$TEST_BASE_DIR/test-functions" + +test_append_files() { + image_install base64 +} + +do_test "$@" diff --git a/test/units/testsuite-79.service b/test/units/testsuite-79.service new file mode 100644 index 00000000000..f2d24df9cf1 --- /dev/null +++ b/test/units/testsuite-79.service @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +[Unit] +Description=TEST-79-MEMPRESS + +[Service] +Type=oneshot +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +MemoryAccounting=1 diff --git a/test/units/testsuite-79.sh b/test/units/testsuite-79.sh new file mode 100755 index 00000000000..b11923bc07d --- /dev/null +++ b/test/units/testsuite-79.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: LGPL-2.1-or-later +set -ex +set -o pipefail + +# We not just test if the file exists, but try to read from it, since if +# CONFIG_PSI_DEFAULT_DISABLED is set in the kernel the file will exist and can +# be opened, but any read()s will fail with EOPNOTSUPP, which we want to +# detect. +if ! cat /proc/pressure/memory >/dev/null ; then + echo "kernel too old, has no PSI." >&2 + echo OK >/testok + exit 0 +fi + +systemd-analyze log-level debug + +CGROUP=/sys/fs/cgroup/"$(systemctl show testsuite-79.service -P ControlGroup)" +test -d "$CGROUP" + +if ! test -f "$CGROUP"/memory.pressure ; then + echo "No memory accounting/PSI delegated via cgroup, can't test." >&2 + echo OK >/testok + exit 0 +fi + +UNIT="test-mempress-$RANDOM.service" +SCRIPT="/run/bin/mempress-$RANDOM.sh" + +mkdir -p "/run/bin" + +cat >"$SCRIPT" <<'EOF' +#!/bin/bash + +set -ex + +export +id + +test -n "$MEMORY_PRESSURE_WATCH" +test "$MEMORY_PRESSURE_WATCH" != /dev/null +test -w "$MEMORY_PRESSURE_WATCH" + +ls -al "$MEMORY_PRESSURE_WATCH" + +EXPECTED="$(echo -n -e "some 123000 1000000\x00" | base64)" + +test "$EXPECTED" = "$MEMORY_PRESSURE_WRITE" + +EOF + +chmod +x "$SCRIPT" + +systemd-run -u "$UNIT" -p Type=exec -p DynamicUser=1 -p MemoryPressureWatch=on -p MemoryPressureThresholdSec=123ms --wait "$SCRIPT" + +rm "$SCRIPT" + +rmdir /run/bin ||: + +systemd-analyze log-level info +echo OK >/testok + +exit 0