]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: add some tests for parse_absolute_time(), including cases
authordjm@openbsd.org <djm@openbsd.org>
Thu, 11 Aug 2022 01:57:50 +0000 (01:57 +0000)
committerDamien Miller <djm@mindrot.org>
Thu, 11 Aug 2022 02:01:50 +0000 (12:01 +1000)
where it is forced to the UTC timezone. bz3468 ok dtucker

OpenBSD-Regress-ID: ea07ca31c2f3847a38df028ca632763ae44e8759

regress/unittests/misc/test_convtime.c

index ef6fd77deda5740532aefb03c77d8795b851bb22..4794dbd9daae4de45645c8607e9785cc6a08c290 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: test_convtime.c,v 1.2 2021/12/14 21:25:27 deraadt Exp $ */
+/*     $OpenBSD: test_convtime.c,v 1.3 2022/08/11 01:57:50 djm Exp $ */
 /*
  * Regress test for misc time conversion functions.
  *
@@ -20,6 +20,7 @@
 
 #include "log.h"
 #include "misc.h"
+#include "ssherr.h"
 
 void test_convtime(void);
 
@@ -27,6 +28,7 @@ void
 test_convtime(void)
 {
        char buf[1024];
+       uint64_t t;
 
        TEST_START("misc_convtime");
        ASSERT_INT_EQ(convtime("0"), 0);
@@ -56,4 +58,64 @@ test_convtime(void)
        ASSERT_INT_EQ(convtime("3550w5d3h14m8s"), -1);
 #endif
        TEST_DONE();
+
+       /* XXX timezones/DST make verification of this tricky */
+       /* XXX maybe setenv TZ and tzset() to make it unambiguous? */
+       TEST_START("misc_parse_absolute_time");
+       ASSERT_INT_EQ(parse_absolute_time("20000101", &t), 0);
+       ASSERT_INT_EQ(parse_absolute_time("200001011223", &t), 0);
+       ASSERT_INT_EQ(parse_absolute_time("20000101122345", &t), 0);
+
+       /* forced UTC TZ */
+       ASSERT_INT_EQ(parse_absolute_time("20000101Z", &t), 0);
+       ASSERT_U64_EQ(t, 946684800);
+       ASSERT_INT_EQ(parse_absolute_time("200001011223Z", &t), 0);
+       ASSERT_U64_EQ(t, 946729380);
+       ASSERT_INT_EQ(parse_absolute_time("20000101122345Z", &t), 0);
+       ASSERT_U64_EQ(t, 946729425);
+       ASSERT_INT_EQ(parse_absolute_time("20000101UTC", &t), 0);
+       ASSERT_U64_EQ(t, 946684800);
+       ASSERT_INT_EQ(parse_absolute_time("200001011223UTC", &t), 0);
+       ASSERT_U64_EQ(t, 946729380);
+       ASSERT_INT_EQ(parse_absolute_time("20000101122345UTC", &t), 0);
+       ASSERT_U64_EQ(t, 946729425);
+
+       /* Bad month */
+       ASSERT_INT_EQ(parse_absolute_time("20001301", &t),
+           SSH_ERR_INVALID_FORMAT);
+       ASSERT_INT_EQ(parse_absolute_time("20000001", &t),
+           SSH_ERR_INVALID_FORMAT);
+       /* Incomplete */
+       ASSERT_INT_EQ(parse_absolute_time("2", &t),
+           SSH_ERR_INVALID_FORMAT);
+       ASSERT_INT_EQ(parse_absolute_time("2000", &t),
+           SSH_ERR_INVALID_FORMAT);
+       ASSERT_INT_EQ(parse_absolute_time("20000", &t),
+           SSH_ERR_INVALID_FORMAT);
+       ASSERT_INT_EQ(parse_absolute_time("200001", &t),
+           SSH_ERR_INVALID_FORMAT);
+       ASSERT_INT_EQ(parse_absolute_time("2000010", &t),
+           SSH_ERR_INVALID_FORMAT);
+       ASSERT_INT_EQ(parse_absolute_time("200001010", &t),
+           SSH_ERR_INVALID_FORMAT);
+       /* Bad day, hour, minute, second */
+       ASSERT_INT_EQ(parse_absolute_time("20000199", &t),
+           SSH_ERR_INVALID_FORMAT);
+       ASSERT_INT_EQ(parse_absolute_time("200001019900", &t),
+           SSH_ERR_INVALID_FORMAT);
+       ASSERT_INT_EQ(parse_absolute_time("200001010099", &t),
+           SSH_ERR_INVALID_FORMAT);
+       ASSERT_INT_EQ(parse_absolute_time("20000101000099", &t),
+           SSH_ERR_INVALID_FORMAT);
+       /* Invalid TZ specifier */
+       ASSERT_INT_EQ(parse_absolute_time("20000101ZZ", &t),
+           SSH_ERR_INVALID_FORMAT);
+       ASSERT_INT_EQ(parse_absolute_time("20000101PDT", &t),
+           SSH_ERR_INVALID_FORMAT);
+       ASSERT_INT_EQ(parse_absolute_time("20000101U", &t),
+           SSH_ERR_INVALID_FORMAT);
+       ASSERT_INT_EQ(parse_absolute_time("20000101UTCUTC", &t),
+           SSH_ERR_INVALID_FORMAT);
+
+       TEST_DONE();
 }