xref: /openbsd-src/regress/usr.bin/ssh/unittests/conversion/tests.c (revision a8c975d25b8973125837f3cd4c63b4a611f5c5f5)
1*a8c975d2Sderaadt /* 	$OpenBSD: tests.c,v 1.4 2021/12/14 21:25:27 deraadt Exp $ */
270aa2176Sdtucker /*
370aa2176Sdtucker  * Regress test for conversions
470aa2176Sdtucker  *
570aa2176Sdtucker  * Placed in the public domain
670aa2176Sdtucker  */
770aa2176Sdtucker 
870aa2176Sdtucker #include <sys/types.h>
970aa2176Sdtucker #include <stdio.h>
1070aa2176Sdtucker #include <stdint.h>
1170aa2176Sdtucker #include <stdlib.h>
12*a8c975d2Sderaadt #include <limits.h>
1370aa2176Sdtucker #include <string.h>
1470aa2176Sdtucker 
1570aa2176Sdtucker #include "test_helper.h"
1670aa2176Sdtucker 
1770aa2176Sdtucker #include "misc.h"
1870aa2176Sdtucker 
1970aa2176Sdtucker void
tests(void)2070aa2176Sdtucker tests(void)
2170aa2176Sdtucker {
2270aa2176Sdtucker 	char buf[1024];
2370aa2176Sdtucker 
2470aa2176Sdtucker 	TEST_START("conversion_convtime");
25ab7e33edSdtucker 	ASSERT_INT_EQ(convtime("0"), 0);
26ab7e33edSdtucker 	ASSERT_INT_EQ(convtime("1"), 1);
27ab7e33edSdtucker 	ASSERT_INT_EQ(convtime("1S"), 1);
2870aa2176Sdtucker 	/* from the examples in the comment above the function */
29ab7e33edSdtucker 	ASSERT_INT_EQ(convtime("90m"), 5400);
30ab7e33edSdtucker 	ASSERT_INT_EQ(convtime("1h30m"), 5400);
31ab7e33edSdtucker 	ASSERT_INT_EQ(convtime("2d"), 172800);
32ab7e33edSdtucker 	ASSERT_INT_EQ(convtime("1w"), 604800);
3370aa2176Sdtucker 
3470aa2176Sdtucker 	/* negative time is not allowed */
35ab7e33edSdtucker 	ASSERT_INT_EQ(convtime("-7"), -1);
36ab7e33edSdtucker 	ASSERT_INT_EQ(convtime("-9d"), -1);
3770aa2176Sdtucker 
3870aa2176Sdtucker 	/* overflow */
39ab7e33edSdtucker 	snprintf(buf, sizeof buf, "%llu", (unsigned long long)INT_MAX);
40ab7e33edSdtucker 	ASSERT_INT_EQ(convtime(buf), INT_MAX);
41ab7e33edSdtucker 	snprintf(buf, sizeof buf, "%llu", (unsigned long long)INT_MAX + 1);
42ab7e33edSdtucker 	ASSERT_INT_EQ(convtime(buf), -1);
4370aa2176Sdtucker 
4470aa2176Sdtucker 	/* overflow with multiplier */
45ab7e33edSdtucker 	snprintf(buf, sizeof buf, "%lluM", (unsigned long long)INT_MAX/60 + 1);
46ab7e33edSdtucker 	ASSERT_INT_EQ(convtime(buf), -1);
47ab7e33edSdtucker 	ASSERT_INT_EQ(convtime("1000000000000000000000w"), -1);
4870aa2176Sdtucker 	TEST_DONE();
4970aa2176Sdtucker }
50