2022-06-01 08:56:08 +09:00
#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -eux
set -o pipefail
2022-07-07 10:10:05 +09:00
# shellcheck source=test/units/assert.sh
. " $( dirname " $0 " ) " /assert.sh
cleanup_test_user( ) (
set +ex
pkill -u " $( id -u logind-test-user) "
sleep 1
pkill -KILL -u " $( id -u logind-test-user) "
userdel -r logind-test-user
2022-07-13 11:29:20 +02:00
return 0
2022-07-07 10:10:05 +09:00
)
setup_test_user( ) {
mkdir -p /var/spool/cron /var/spool/mail
useradd -m -s /bin/bash logind-test-user
trap cleanup_test_user EXIT
}
2022-06-01 08:56:08 +09:00
test_enable_debug( ) {
mkdir -p /run/systemd/system/systemd-logind.service.d
cat >/run/systemd/system/systemd-logind.service.d/debug.conf <<EOF
[ Service]
Environment = SYSTEMD_LOG_LEVEL = debug
EOF
systemctl daemon-reload
2022-07-07 10:10:05 +09:00
systemctl stop systemd-logind.service
2022-06-01 08:56:08 +09:00
}
test_properties( ) {
mkdir -p /run/systemd/logind.conf.d
cat >/run/systemd/logind.conf.d/kill-user-processes.conf <<EOF
[ Login]
KillUserProcesses = no
EOF
systemctl restart systemd-logind.service
2022-07-07 10:10:05 +09:00
assert_eq " $( busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager KillUserProcesses) " "b false"
2022-06-01 08:56:08 +09:00
cat >/run/systemd/logind.conf.d/kill-user-processes.conf <<EOF
[ Login]
KillUserProcesses = yes
EOF
systemctl restart systemd-logind.service
2022-07-07 10:10:05 +09:00
assert_eq " $( busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager KillUserProcesses) " "b true"
2022-06-01 08:56:08 +09:00
rm -rf /run/systemd/logind.conf.d
}
test_started( ) {
2022-07-07 10:10:05 +09:00
local pid
2022-06-01 08:56:08 +09:00
systemctl restart systemd-logind.service
# should start at boot, not with D-BUS activation
2022-07-07 10:10:05 +09:00
pid = $( systemctl show systemd-logind.service -p ExecMainPID --value)
2022-06-01 08:56:08 +09:00
# loginctl should succeed
2022-07-07 10:10:05 +09:00
loginctl
# logind should still be running
assert_eq " $( systemctl show systemd-logind.service -p ExecMainPID --value) " " $pid "
2022-06-01 08:56:08 +09:00
}
wait_suspend( ) {
2022-07-07 10:10:05 +09:00
timeout " ${ 1 ? } " bash -c "while [[ ! -e /run/suspend.flag ]]; do sleep 1; done"
2022-06-01 08:56:08 +09:00
rm /run/suspend.flag
}
2022-07-07 10:10:05 +09:00
teardown_suspend( ) (
set +eux
2022-06-01 08:56:08 +09:00
2022-07-07 10:10:05 +09:00
pkill evemu-device
rm -rf /run/systemd/system/systemd-suspend.service.d
systemctl daemon-reload
rm -f /run/udev/rules.d/70-logindtest-lid.rules
udevadm control --reload
2022-07-13 11:29:20 +02:00
return 0
2022-07-07 10:10:05 +09:00
)
2022-06-01 08:56:08 +09:00
test_suspend_on_lid( ) {
2022-07-07 10:10:05 +09:00
local pid input_name lid_dev
2022-06-01 08:56:08 +09:00
if systemd-detect-virt --quiet --container; then
echo "Skipping suspend test in container"
return
fi
if ! grep -s -q mem /sys/power/state; then
echo "suspend not supported on this testbed, skipping"
return
fi
if ! command -v evemu-device & >/dev/null; then
echo "command evemu-device not found, skipping"
return
fi
if ! command -v evemu-event & >/dev/null; then
echo "command evemu-event not found, skipping"
return
fi
2022-07-07 10:10:05 +09:00
trap teardown_suspend RETURN
# save pid
pid = $( systemctl show systemd-logind.service -p ExecMainPID --value)
2022-06-01 08:56:08 +09:00
# create fake suspend
mkdir -p /run/systemd/system/systemd-suspend.service.d
cat >/run/systemd/system/systemd-suspend.service.d/override.conf <<EOF
[ Service]
ExecStart =
ExecStart = touch /run/suspend.flag
EOF
systemctl daemon-reload
# create fake lid switch
mkdir -p /run/udev/rules.d
cat >/run/udev/rules.d/70-logindtest-lid.rules <<EOF
SUBSYSTEM = = "input" , KERNEL = = "event*" , ATTRS{ name} = = "Fake Lid Switch" , TAG += "power-switch"
EOF
udevadm control --reload
cat >/run/lidswitch.evemu <<EOF
# EVEMU 1.2
# Input device name: "Lid Switch"
# Input device ID: bus 0x19 vendor 0000 product 0x05 version 0000
# Supported events:
# Event type 0 (EV_SYN)
# Event code 0 (SYN_REPORT)
# Event code 5 (FF_STATUS_MAX)
# Event type 5 (EV_SW)
# Event code 0 (SW_LID)
# Properties:
N: Fake Lid Switch
I: 0019 0000 0005 0000
P: 00 00 00 00 00 00 00 00
B: 00 21 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 02 00 00 00 00 00 00 00 00
B: 03 00 00 00 00 00 00 00 00
B: 04 00 00 00 00 00 00 00 00
B: 05 01 00 00 00 00 00 00 00
B: 11 00 00 00 00 00 00 00 00
B: 12 00 00 00 00 00 00 00 00
B: 15 00 00 00 00 00 00 00 00
B: 15 00 00 00 00 00 00 00 00
EOF
evemu-device /run/lidswitch.evemu &
2022-07-07 10:10:05 +09:00
timeout 20 bash -c 'while ! grep "^Fake Lid Switch" /sys/class/input/*/device/name; do sleep .5; done'
input_name = $( grep -l '^Fake Lid Switch' /sys/class/input/*/device/name || :)
if [ [ -z " $input_name " ] ] ; then
2022-06-01 08:56:08 +09:00
echo "cannot find fake lid switch." >& 2
exit 1
fi
2022-07-07 10:10:05 +09:00
input_name = ${ input_name %/device/name }
lid_dev = /dev/${ input_name #/sys/class/ }
udevadm info --wait-for-initialization= 10s " $lid_dev "
2022-06-01 08:56:08 +09:00
udevadm settle
# close lid
2022-07-07 10:10:05 +09:00
evemu-event " $lid_dev " --sync --type 5 --code 0 --value 1
2022-06-01 08:56:08 +09:00
# need to wait for 30s suspend inhibition after boot
wait_suspend 31
# open lid again
2022-07-07 10:10:05 +09:00
evemu-event " $lid_dev " --sync --type 5 --code 0 --value 0
2022-06-01 08:56:08 +09:00
# waiting for 30s inhibition time between suspends
sleep 30
# now closing lid should cause instant suspend
2022-07-07 10:10:05 +09:00
evemu-event " $lid_dev " --sync --type 5 --code 0 --value 1
2022-06-01 08:56:08 +09:00
wait_suspend 2
2022-07-07 10:10:05 +09:00
evemu-event " $lid_dev " --sync --type 5 --code 0 --value 0
2022-06-01 08:56:08 +09:00
2022-07-07 10:10:05 +09:00
assert_eq " $( systemctl show systemd-logind.service -p ExecMainPID --value) " " $pid "
2022-06-01 08:56:08 +09:00
}
test_shutdown( ) {
2022-07-07 10:10:05 +09:00
local pid
# save pid
pid = $( systemctl show systemd-logind.service -p ExecMainPID --value)
2022-06-01 08:56:08 +09:00
# scheduled shutdown with wall message
shutdown 2>& 1
sleep 5
shutdown -c || :
# logind should still be running
2022-07-07 10:10:05 +09:00
assert_eq " $( systemctl show systemd-logind.service -p ExecMainPID --value) " " $pid "
2022-06-01 08:56:08 +09:00
# scheduled shutdown without wall message
shutdown --no-wall 2>& 1
sleep 5
shutdown -c --no-wall || true
2022-07-07 10:10:05 +09:00
assert_eq " $( systemctl show systemd-logind.service -p ExecMainPID --value) " " $pid "
2022-06-01 08:56:08 +09:00
}
2022-07-08 20:22:40 +09:00
cleanup_session( ) (
2022-07-07 10:10:05 +09:00
set +ex
2022-06-01 08:56:08 +09:00
2022-07-31 00:11:59 +09:00
local uid s
2022-07-22 15:45:24 +09:00
uid = $( id -u logind-test-user)
2022-06-01 08:56:08 +09:00
2022-07-17 15:35:22 +02:00
loginctl disable-linger logind-test-user
2022-07-22 15:45:24 +09:00
systemctl stop getty@tty2.service
2022-07-31 00:11:59 +09:00
for s in $( loginctl --no-legend list-sessions | awk '$3 == "logind-test-user" { print $1 }' ) ; do
echo " INFO: stopping session $s "
loginctl terminate-session " $s "
done
loginctl terminate-user logind-test-user
if ! timeout 30 bash -c "while loginctl --no-legend | grep -q logind-test-user; do sleep 1; done" ; then
echo "WARNING: session for logind-test-user still active, ignoring."
fi
2022-07-22 15:45:24 +09:00
pkill -u " $uid "
2022-07-07 10:10:05 +09:00
sleep 1
2022-07-22 15:45:24 +09:00
pkill -KILL -u " $uid "
if ! timeout 30 bash -c " while systemctl is-active --quiet user@ ${ uid } .service; do sleep 1; done " ; then
echo " WARNING: user@ ${ uid } .service is still active, ignoring. "
fi
if ! timeout 30 bash -c " while systemctl is-active --quiet user-runtime-dir@ ${ uid } .service; do sleep 1; done " ; then
echo " WARNING: user-runtime-dir@ ${ uid } .service is still active, ignoring. "
fi
if ! timeout 30 bash -c " while systemctl is-active --quiet user- ${ uid } .slice; do sleep 1; done " ; then
echo " WARNING: user- ${ uid } .slice is still active, ignoring. "
fi
rm -rf /run/systemd/system/getty@tty2.service.d
systemctl daemon-reload
2022-07-13 11:29:20 +02:00
return 0
2022-07-08 20:22:40 +09:00
)
teardown_session( ) (
set +ex
cleanup_session
2022-06-01 08:56:08 +09:00
2022-07-07 10:10:05 +09:00
rm -f /run/udev/rules.d/70-logindtest-scsi_debug-user.rules
udevadm control --reload
2022-06-01 08:56:08 +09:00
rmmod scsi_debug
2022-07-13 11:29:20 +02:00
return 0
2022-07-07 10:10:05 +09:00
)
check_session( ) (
set +ex
local seat session leader_pid
2022-06-01 08:56:08 +09:00
if [ [ $( loginctl --no-legend | grep -c "logind-test-user" ) != 1 ] ] ; then
2022-06-15 14:50:34 +09:00
echo "no session or multiple sessions for logind-test-user." >& 2
2022-06-01 08:56:08 +09:00
return 1
fi
2022-07-07 10:10:05 +09:00
seat = $( loginctl --no-legend | grep 'logind-test-user *seat' | awk '{ print $4 }' )
if [ [ -z " $seat " ] ] ; then
2022-06-01 08:56:08 +09:00
echo "no seat found for user logind-test-user" >& 2
return 1
fi
2022-07-17 15:41:38 +02:00
session = $( loginctl --no-legend | awk '$3 == "logind-test-user" { print $1 }' )
2022-07-07 10:10:05 +09:00
if [ [ -z " $session " ] ] ; then
2022-06-01 08:56:08 +09:00
echo "no session found for user logind-test-user" >& 2
return 1
fi
2022-07-07 10:10:05 +09:00
if ! loginctl session-status " $session " | grep -q " Unit: session- ${ session } \.scope " ; then
echo " cannot find scope unit for session $session " >& 2
return 1
fi
2022-07-17 15:41:38 +02:00
leader_pid = $( loginctl session-status " $session " | awk '$1 == "Leader:" { print $2 }' )
2022-07-07 10:10:05 +09:00
if [ [ -z " $leader_pid " ] ] ; then
echo " cannot found leader process for session $session " >& 2
2022-06-01 08:56:08 +09:00
return 1
fi
# cgroup v1: "1:name=systemd:/user.slice/..."; unified hierarchy: "0::/user.slice"
2022-07-07 10:10:05 +09:00
if ! grep -q -E '(name=systemd|^0:):.*session.*scope' /proc/" $leader_pid " /cgroup; then
echo " FAIL: process $leader_pid is not in the session cgroup " >& 2
2022-06-01 08:56:08 +09:00
cat /proc/self/cgroup
return 1
fi
2022-07-07 10:10:05 +09:00
)
2022-06-01 08:56:08 +09:00
2022-07-08 20:22:40 +09:00
create_session( ) {
2022-06-01 08:56:08 +09:00
# login with the test user to start a session
mkdir -p /run/systemd/system/getty@tty2.service.d
cat >/run/systemd/system/getty@tty2.service.d/override.conf <<EOF
[ Service]
Type = simple
ExecStart =
ExecStart = -/sbin/agetty --autologin logind-test-user --noclear %I $TERM
2022-07-31 00:12:48 +09:00
Restart = no
2022-06-01 08:56:08 +09:00
EOF
systemctl daemon-reload
2022-07-08 20:22:40 +09:00
2022-07-07 10:10:05 +09:00
systemctl restart getty@tty2.service
2022-06-01 08:56:08 +09:00
# check session
2022-06-14 21:05:10 +09:00
for ( ( i = 0; i < 30; i++) ) ; do
2022-07-07 10:10:05 +09:00
( ( i != 0 ) ) && sleep 1
check_session && break
2022-06-01 08:56:08 +09:00
done
2022-07-07 10:10:05 +09:00
check_session
2022-07-08 20:22:40 +09:00
assert_eq " $( loginctl --no-legend | awk '$3=="logind-test-user" { print $5 }' ) " "tty2"
}
2022-11-01 09:17:58 +01:00
test_sanity_check( ) {
# Exercise basic loginctl options
if [ [ ! -c /dev/tty2 ] ] ; then
echo " /dev/tty2 does not exist, skipping test ${ FUNCNAME [0] } . "
return
fi
trap cleanup_session RETURN
create_session
# Run most of the loginctl commands from a user session to make
# the seat/session autodetection work-ish
systemd-run --user --pipe --wait -M "logind-test-user@.host" bash -eux <<\E OF
loginctl list-sessions
loginctl session-status
loginctl show-session
loginctl show-session -P DelayInhibited
# We're not in the same session scope, so in this case we need to specify
# the session ID explicitly
session = $( loginctl --no-legend | awk '$3 == "logind-test-user" { print $1; exit; }' )
loginctl kill-session --signal= SIGCONT " $session "
# FIXME(?)
#loginctl kill-session --signal=SIGCONT --kill-who=leader "$session"
loginctl list-users
loginctl user-status
loginctl show-user -a
loginctl show-user -P IdleAction
loginctl kill-user --signal= SIGCONT ""
loginctl list-seats
loginctl seat-status
loginctl show-seat
loginctl show-seat -P IdleActionUSec
EOF
# Requires root privileges
loginctl lock-sessions
loginctl unlock-sessions
loginctl flush-devices
}
2022-07-08 20:22:40 +09:00
test_session( ) {
local dev
if systemd-detect-virt --quiet --container; then
echo "Skipping ACL tests in container"
return
fi
if [ [ ! -c /dev/tty2 ] ] ; then
echo " /dev/tty2 does not exist, skipping test ${ FUNCNAME [0] } . "
return
fi
trap teardown_session RETURN
create_session
2022-06-01 08:56:08 +09:00
# scsi_debug should not be loaded yet
if [ [ -d /sys/bus/pseudo/drivers/scsi_debug ] ] ; then
echo "scsi_debug module is already loaded." >& 2
exit 1
fi
# we use scsi_debug to create new devices which we can put ACLs on
# tell udev about the tagging, so that logind can pick it up
mkdir -p /run/udev/rules.d
cat >/run/udev/rules.d/70-logindtest-scsi_debug-user.rules <<EOF
SUBSYSTEM = = "block" , ATTRS{ model} = = "scsi_debug*" , TAG += "uaccess"
EOF
udevadm control --reload
# coldplug: logind started with existing device
systemctl stop systemd-logind.service
modprobe scsi_debug
2022-07-07 10:10:05 +09:00
timeout 30 bash -c 'while ! ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null; do sleep 1; done'
dev = /dev/$( ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null)
2022-06-01 08:56:08 +09:00
if [ [ ! -b " $dev " ] ] ; then
echo "cannot find suitable scsi block device" >& 2
exit 1
fi
udevadm settle
udevadm info " $dev "
# trigger logind and activate session
2022-07-17 15:41:38 +02:00
loginctl activate " $( loginctl --no-legend | awk '$3 == "logind-test-user" { print $1 }' ) "
2022-06-01 08:56:08 +09:00
# check ACL
sleep 1
2022-07-07 10:10:05 +09:00
assert_in "user:logind-test-user:rw-" " $( getfacl -p " $dev " ) "
2022-06-01 08:56:08 +09:00
# hotplug: new device appears while logind is running
rmmod scsi_debug
modprobe scsi_debug
2022-07-07 10:10:05 +09:00
timeout 30 bash -c 'while ! ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null; do sleep 1; done'
dev = /dev/$( ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null)
2022-06-01 08:56:08 +09:00
if [ [ ! -b " $dev " ] ] ; then
echo "cannot find suitable scsi block device" >& 2
exit 1
fi
udevadm settle
# check ACL
sleep 1
2022-07-07 10:10:05 +09:00
assert_in "user:logind-test-user:rw-" " $( getfacl -p " $dev " ) "
2022-06-01 08:56:08 +09:00
}
2022-07-07 10:10:05 +09:00
teardown_lock_idle_action( ) (
set +eux
2022-07-01 12:59:57 +02:00
rm -f /run/systemd/logind.conf.d/idle-action-lock.conf
systemctl restart systemd-logind.service
2022-07-13 11:29:20 +02:00
2022-07-30 23:51:25 +09:00
cleanup_session
2022-07-13 11:29:20 +02:00
return 0
2022-07-07 10:10:05 +09:00
)
2022-07-01 12:59:57 +02:00
test_lock_idle_action( ) {
2022-07-07 10:10:05 +09:00
local ts
if [ [ ! -c /dev/tty2 ] ] ; then
echo " /dev/tty2 does not exist, skipping test ${ FUNCNAME [0] } . "
return
2022-07-01 12:59:57 +02:00
fi
2022-07-08 20:22:40 +09:00
if loginctl --no-legend | grep -q logind-test-user; then
echo >& 2 "Session of the \'logind-test-user\' is already present."
exit 1
fi
2022-07-07 10:10:05 +09:00
trap teardown_lock_idle_action RETURN
2022-07-01 12:59:57 +02:00
2022-07-08 20:22:40 +09:00
create_session
ts = " $( date '+%H:%M:%S' ) "
2022-07-07 10:10:05 +09:00
mkdir -p /run/systemd/logind.conf.d
cat >/run/systemd/logind.conf.d/idle-action-lock.conf <<EOF
[ Login]
IdleAction = lock
IdleActionSec = 1s
EOF
systemctl restart systemd-logind.service
# Wait for 35s, in that interval all sessions should have become idle
2022-07-01 12:59:57 +02:00
# and "Lock" signal should have been sent out. Then we wrote to tty to make
# session active again and next we slept for another 35s so sessions have
# become idle again. 'Lock' signal is sent out for each session, we have at
# least one session, so minimum of 2 "Lock" signals must have been sent.
2022-07-07 10:10:05 +09:00
timeout 35 bash -c " while [[ \"\$(journalctl -b -u systemd-logind.service --since= $ts | grep -c 'Sent message type=signal .* member=Lock')\" -lt 1 ]]; do sleep 1; done "
2022-07-01 12:59:57 +02:00
2022-07-07 10:10:05 +09:00
# Wakeup
touch /dev/tty2
2022-07-01 12:59:57 +02:00
2022-07-07 10:10:05 +09:00
# Wait again
timeout 35 bash -c " while [[ \"\$(journalctl -b -u systemd-logind.service --since= $ts | grep -c 'Sent message type=signal .* member=Lock')\" -lt 2 ]]; do sleep 1; done "
2022-07-01 12:59:57 +02:00
2022-07-07 10:10:05 +09:00
if [ [ " $( journalctl -b -u systemd-logind.service --since= " $ts " | grep -c 'System idle. Will be locked now.' ) " -lt 2 ] ] ; then
echo >& 2 "System haven't entered idle state at least 2 times."
exit 1
fi
2022-06-21 18:41:46 +02:00
}
2022-06-27 08:37:22 +02:00
test_session_properties( ) {
local s
if [ [ ! -c /dev/tty2 ] ] ; then
echo " /dev/tty2 does not exist, skipping test ${ FUNCNAME [0] } . "
return
fi
trap cleanup_session RETURN
create_session
s = $( loginctl list-sessions --no-legend | awk '$3 == "logind-test-user" { print $1 }' )
/usr/lib/systemd/tests/manual/test-session-properties " /org/freedesktop/login1/session/_3 ${ s ? } "
}
2022-07-17 15:35:22 +02:00
test_list_users( ) {
if [ [ ! -c /dev/tty2 ] ] ; then
echo " /dev/tty2 does not exist, skipping test ${ FUNCNAME [0] } . "
return
fi
trap cleanup_session RETURN
create_session
assert_eq " $( loginctl list-users --no-legend | awk '$2 == "logind-test-user" { print $1 }' ) " " $( id -ru logind-test-user) "
assert_eq " $( loginctl list-users --no-legend | awk '$2 == "logind-test-user" { print $3 }' ) " no
loginctl enable-linger logind-test-user
assert_eq " $( loginctl list-users --no-legend | awk '$2 == "logind-test-user" { print $3 }' ) " yes
}
2022-08-08 11:39:52 +02:00
teardown_stop_idle_session( ) (
set +eux
rm -f /run/systemd/logind.conf.d/stop-idle-session.conf
systemctl restart systemd-logind.service
cleanup_session
)
test_stop_idle_session( ) {
local id ts
if [ [ ! -c /dev/tty2 ] ] ; then
echo " /dev/tty2 does not exist, skipping test ${ FUNCNAME [0] } . "
return
fi
create_session
trap teardown_stop_idle_session RETURN
id = " $( loginctl --no-legend | awk '$3 == "logind-test-user" { print $1; }' ) "
ts = " $( date '+%H:%M:%S' ) "
mkdir -p /run/systemd/logind.conf.d
cat >/run/systemd/logind.conf.d/stop-idle-session.conf <<EOF
[ Login]
StopIdleSessionSec = 2s
EOF
systemctl restart systemd-logind.service
sleep 5
assert_eq " $( journalctl -b -u systemd-logind.service --since= " $ts " --grep " Session \" $id \" of user \"logind-test-user\" is idle, stopping. " | wc -l) " 1
assert_eq " $( loginctl --no-legend | grep -c "logind-test-user" ) " 0
}
2022-06-01 08:56:08 +09:00
: >/failed
2022-07-07 10:10:05 +09:00
setup_test_user
2022-06-01 08:56:08 +09:00
test_enable_debug
test_properties
test_started
test_suspend_on_lid
test_shutdown
2022-11-01 09:17:58 +01:00
test_sanity_check
2022-06-01 08:56:08 +09:00
test_session
2022-07-01 12:59:57 +02:00
test_lock_idle_action
2022-06-27 08:37:22 +02:00
test_session_properties
2022-07-17 15:35:22 +02:00
test_list_users
2022-08-08 11:39:52 +02:00
test_stop_idle_session
2022-06-01 08:56:08 +09:00
touch /testok
rm /failed