upstream: add some tests for parse_absolute_time(), including cases

where it is forced to the UTC timezone. bz3468 ok dtucker

OpenBSD-Regress-ID: ea07ca31c2f3847a38df028ca632763ae44e8759
This commit is contained in:
djm@openbsd.org 2022-08-11 01:57:50 +00:00 committed by Damien Miller
parent ec1ddb72a1
commit b98a42afb6

View 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();
}