support/testing: test_timezone: fix test by setting a fixed time

Since Buildroot commit [1], the runtime test emulator infra is setting
the emulated system date to the host date.

While this is desired in general, this behaviour is introducing a
variability in the test execution. Depending if the test is executed
during winter or summer time, the output of the command "date +%Z"
will produce a different output.

This commit fixes the issue by setting a fixed date and time on the
emulated system. The date is fixed to Unix Epoch plus one hour. This
is because Linux cannot set the system date to a value less than the
system uptime. So we cannot set the time back to Unix Epoch with the
command "date -s @0" (this would result to a EINVAL Invalid argument).

Fixes:
https://gitlab.com/buildroot.org/buildroot/-/jobs/9922589073
https://gitlab.com/buildroot.org/buildroot/-/jobs/9922589081

[1] cf8641b73e

Signed-off-by: Julien Olivain <ju.o@free.fr>
This commit is contained in:
Julien Olivain
2025-05-22 21:53:30 +02:00
parent 43dcaa19a0
commit 0839545a9b

View File

@@ -9,6 +9,24 @@ def boot_armv5_cpio(emulator, builddir):
options=["-initrd", img])
emulator.login()
# emulator.login() sets the emulated system date to the host
# date. In general, this is desirable (for correct SSL certificate
# behaviors, for example).
#
# This timezone runtime test checks that a Buildroot configuration
# is reflected in the generated system at runtime, using the
# standard "date" command. To make sure this test is stable in
# time (i.e. output is independent to the date/time the test is
# executed due to daylight saving time changes), we reset the
# system date to a constant value.
#
# We cannot set the system date to a value less than the system
# uptime. So we cannot set the time back to Unix Epoch with the
# command "date -s @0" (this would result to a EINVAL Invalid
# argument). Instead, we set the time at 1 hour after Epoch. This
# is sufficient as the emulated system takes few seconds to start.
emulator.run("date -s @3600")
class TestNoTimezone(infra.basetest.BRTest):
config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \