From: Yu Watanabe Date: Sun, 12 Mar 2023 18:47:45 +0000 (+0900) Subject: test-time-util: do not fail on DST change X-Git-Tag: v254-rc1~1053^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F26772%2Fhead;p=thirdparty%2Fsystemd.git test-time-util: do not fail on DST change --- diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c index e5a4cb65154..e0386d4ec58 100644 --- a/src/test/test-time-util.c +++ b/src/test/test-time-util.c @@ -636,12 +636,30 @@ static void test_parse_timestamp_one(const char *str, usec_t max_diff, usec_t ex int r; r = parse_timestamp(str, &usec); - log_debug("/* %s(%s): max_diff="USEC_FMT", expected="USEC_FMT", result="USEC_FMT"*/", __func__, str, max_diff, expected, usec); + log_debug("/* %s(%s): max_diff="USEC_FMT", expected="USEC_FMT", result="USEC_FMT" */", __func__, str, max_diff, expected, usec); assert_se(r >= 0); assert_se(usec >= expected); assert_se(usec_sub_unsigned(usec, expected) <= max_diff); } +static bool time_is_zero(usec_t usec) { + const char *s; + + s = FORMAT_TIMESTAMP(usec); + return strstr(s, " 00:00:00 "); +} + +static bool timezone_equal(usec_t today, usec_t target) { + const char *s, *t, *sz, *tz; + + s = FORMAT_TIMESTAMP(today); + t = FORMAT_TIMESTAMP(target); + assert_se(sz = strrchr(s, ' ')); + assert_se(tz = strrchr(t, ' ')); + log_debug("%s("USEC_FMT", "USEC_FMT") -> %s, %s", __func__, today, target, s, t); + return streq(sz, tz); +} + static void test_parse_timestamp_impl(const char *tz) { usec_t today, now_usec; @@ -823,12 +841,17 @@ static void test_parse_timestamp_impl(const char *tz) { /* without date */ assert_se(parse_timestamp("today", &today) == 0); - test_parse_timestamp_one("00:01", 0, today + USEC_PER_MINUTE); - test_parse_timestamp_one("00:00:01", 0, today + USEC_PER_SEC); - test_parse_timestamp_one("00:00:01.001", 0, today + USEC_PER_SEC + 1000); - test_parse_timestamp_one("00:00:01.0010", 0, today + USEC_PER_SEC + 1000); - test_parse_timestamp_one("tomorrow", 0, today + USEC_PER_DAY); - test_parse_timestamp_one("yesterday", 0, today - USEC_PER_DAY); + if (time_is_zero(today)) { + test_parse_timestamp_one("00:01", 0, today + USEC_PER_MINUTE); + test_parse_timestamp_one("00:00:01", 0, today + USEC_PER_SEC); + test_parse_timestamp_one("00:00:01.001", 0, today + USEC_PER_SEC + 1000); + test_parse_timestamp_one("00:00:01.0010", 0, today + USEC_PER_SEC + 1000); + + if (timezone_equal(today, today + USEC_PER_DAY) && time_is_zero(today + USEC_PER_DAY)) + test_parse_timestamp_one("tomorrow", 0, today + USEC_PER_DAY); + if (timezone_equal(today, today - USEC_PER_DAY) && time_is_zero(today - USEC_PER_DAY)) + test_parse_timestamp_one("yesterday", 0, today - USEC_PER_DAY); + } /* relative */ assert_se(parse_timestamp("now", &now_usec) == 0);