1
0
Fork 0
systemd/debian/tests/timedated
Daniel Baumann 1bd927b9e1
Adding debian version 257.7-1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 18:07:46 +02:00

186 lines
5 KiB
Bash
Executable file

#!/bin/sh
set -e
. `dirname $0`/assert.sh
ORIG_TZ=`readlink /etc/localtime | sed 's#^.*zoneinfo/##'`
echo "original tz: $ORIG_TZ"
echo 'timedatectl works'
assert_in "Local time:" "`timedatectl --no-pager`"
echo 'change timezone'
assert_eq "`timedatectl --no-pager set-timezone Europe/Moscow 2>&1`" ""
assert_eq "`readlink /etc/localtime | sed 's#^.*zoneinfo/##'`" "Europe/Moscow"
assert_in "Time.*zone: Europe/Moscow (MSK, +" "`timedatectl --no-pager`"
echo 'reset timezone to original'
assert_eq "`timedatectl --no-pager set-timezone $ORIG_TZ 2>&1`" ""
assert_eq "`readlink /etc/localtime | sed 's#^.*zoneinfo/##'`" "$ORIG_TZ"
# test setting UTC vs. LOCAL in /etc/adjtime
if [ -e /etc/adjtime ]; then
ORIG_ADJTIME=`cat /etc/adjtime`
trap "echo '$ORIG_ADJTIME' > /etc/adjtime" EXIT INT QUIT PIPE
else
trap "rm -f /etc/adjtime" EXIT INT QUIT PIPE
fi
echo 'no adjtime file'
rm -f /etc/adjtime
timedatectl set-local-rtc 0
assert_true '[ ! -e /etc/adjtime ]'
timedatectl set-local-rtc 1
assert_eq "`cat /etc/adjtime`" "0.0 0 0
0
LOCAL"
timedatectl set-local-rtc 0
assert_true '[ ! -e /etc/adjtime ]'
echo 'UTC set in adjtime file'
printf '0.0 0 0\n0\nUTC\n' > /etc/adjtime
timedatectl set-local-rtc 0
assert_eq "`cat /etc/adjtime`" "0.0 0 0
0
UTC"
timedatectl set-local-rtc 1
assert_eq "`cat /etc/adjtime`" "0.0 0 0
0
LOCAL"
echo 'non-zero values in adjtime file'
printf '0.1 123 0\n0\nLOCAL\n' > /etc/adjtime
timedatectl set-local-rtc 0
assert_eq "`cat /etc/adjtime`" "0.1 123 0
0
UTC"
timedatectl set-local-rtc 1
assert_eq "`cat /etc/adjtime`" "0.1 123 0
0
LOCAL"
echo 'fourth line adjtime file'
printf '0.0 0 0\n0\nLOCAL\nsomethingelse\n' > /etc/adjtime
timedatectl set-local-rtc 0
assert_eq "`cat /etc/adjtime`" "0.0 0 0
0
UTC
somethingelse"
timedatectl set-local-rtc 1
assert_eq "`cat /etc/adjtime`" "0.0 0 0
0
LOCAL
somethingelse"
echo 'no final newline in adjtime file'
printf '0.0 0 0\n0\nUTC' > /etc/adjtime
timedatectl set-local-rtc 0
assert_true '[ ! -e /etc/adjtime ]'
printf '0.0 0 0\n0\nUTC' > /etc/adjtime
timedatectl set-local-rtc 1
assert_eq "`cat /etc/adjtime`" "0.0 0 0
0
LOCAL"
echo 'only one line in adjtime file'
printf '0.0 0 0\n' > /etc/adjtime
timedatectl set-local-rtc 0
assert_true '[ ! -e /etc/adjtime ]'
printf '0.0 0 0\n' > /etc/adjtime
timedatectl set-local-rtc 1
assert_eq "`cat /etc/adjtime`" "0.0 0 0
0
LOCAL"
echo 'only one line in adjtime file, no final newline'
printf '0.0 0 0' > /etc/adjtime
timedatectl set-local-rtc 0
assert_true '[ ! -e /etc/adjtime ]'
printf '0.0 0 0' > /etc/adjtime
timedatectl set-local-rtc 1
assert_eq "`cat /etc/adjtime`" "0.0 0 0
0
LOCAL"
echo 'only two lines in adjtime file'
printf '0.0 0 0\n0\n' > /etc/adjtime
timedatectl set-local-rtc 0
assert_true '[ ! -e /etc/adjtime ]'
printf '0.0 0 0\n0\n' > /etc/adjtime
timedatectl set-local-rtc 1
assert_eq "`cat /etc/adjtime`" "0.0 0 0
0
LOCAL"
echo 'only two lines in adjtime file, no final newline'
printf '0.0 0 0\n0' > /etc/adjtime
timedatectl set-local-rtc 0
assert_true '[ ! -e /etc/adjtime ]'
printf '0.0 0 0\n0' > /etc/adjtime
timedatectl set-local-rtc 1
assert_eq "`cat /etc/adjtime`" "0.0 0 0
0
LOCAL"
echo 'unknown value in 3rd line of adjtime file'
printf '0.0 0 0\n0\nFOO\n' > /etc/adjtime
timedatectl set-local-rtc 0
assert_true '[ ! -e /etc/adjtime ]'
printf '0.0 0 0\n0\nFOO\n' > /etc/adjtime
timedatectl set-local-rtc 1
assert_eq "`cat /etc/adjtime`" "0.0 0 0
0
LOCAL"
# timesyncd has ConditionVirtualization=!container by default; drop/mock that for testing
if systemd-detect-virt --container --quiet; then
systemctl disable --quiet --now systemd-timesyncd
mkdir -p /run/systemd/system/systemd-timesyncd.service.d
printf '[Unit]\nConditionVirtualization=\n[Service]\nType=simple\nAmbientCapabilities=\nExecStart=\nExecStart=/bin/sleep infinity' > /run/systemd/system/systemd-timesyncd.service.d/container.conf
systemctl daemon-reload
fi
mon=$(mktemp -t dbusmon.XXXXXX)
trap "rm -f $mon" EXIT INT QUIT PIPE
assert_ntp() {
V=$(busctl get-property org.freedesktop.timedate1 /org/freedesktop/timedate1 org.freedesktop.timedate1 NTP)
assert_eq "$V" "b $1"
}
start_mon() {
dbus-monitor --system "type='signal', member='PropertiesChanged', path='/org/freedesktop/timedate1'" > $mon &
MONPID=$!
}
wait_mon() {
for retry in $(seq 10); do
grep -q "$1" $mon && break
sleep 1
done
assert_in "$2" "$(cat $mon)"
kill $MONPID
wait $MONPID 2>/dev/null || true
}
echo 'disable NTP'
timedatectl set-ntp false
while [ "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" != "ActiveState=inactive" ]; do sleep 1; done
assert_ntp false
assert_rc 3 systemctl is-active --quiet systemd-timesyncd
echo 'enable NTP'
start_mon
timedatectl set-ntp true
wait_mon "NTP" "boolean true"
assert_ntp true
while [ "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" != "ActiveState=active" ]; do sleep 1; done
assert_rc 0 systemctl is-active --quiet systemd-timesyncd
echo 're-disable NTP'
start_mon
timedatectl set-ntp false
wait_mon "NTP" "boolean false"
assert_ntp false
assert_rc 3 systemctl is-active --quiet systemd-timesyncd