2023-02-23 19:41:35 +03:00
#!/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 "
2023-03-09 20:08:01 +03:00
SCRIPT = " /tmp/mempress- $RANDOM .sh "
2023-02-23 19:41:35 +03:00
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 "
2023-03-09 14:34:23 +03:00
EXPECTED = " $( echo -n -e "some 123000 2000000\x00" | base64) "
2023-02-23 19:41:35 +03:00
test " $EXPECTED " = " $MEMORY_PRESSURE_WRITE "
EOF
chmod +x " $SCRIPT "
2023-03-14 23:12:33 +03:00
systemd-run -u " $UNIT " -p Type = exec -p ProtectControlGroups = 1 -p DynamicUser = 1 -p MemoryPressureWatch = on -p MemoryPressureThresholdSec = 123ms -p BindPaths = $SCRIPT --wait " $SCRIPT "
2023-02-23 19:41:35 +03:00
rm " $SCRIPT "
systemd-analyze log-level info
2023-07-12 16:49:55 +03:00
touch /testok