]> granicus.if.org Git - libevent/commitdiff
add tests for evutil_date_rfc1123().
authorVis Virial <visvrial@gmail.com>
Fri, 16 Dec 2016 05:49:59 +0000 (14:49 +0900)
committerAzat Khuzhin <a3at.mail@gmail.com>
Sun, 18 Dec 2016 21:58:49 +0000 (00:58 +0300)
test/regress_util.c

index 60f085bf1db3f85d3cf0738f00e146cc3d7418b7..0a57f7ce6bb94d5fbb5c2a84055b5510894ab315 100644 (file)
@@ -1378,6 +1378,70 @@ end:
        ;
 }
 
+static void
+create_tm_from_unix_epoch(struct tm *cur_p, const time_t t) {
+#ifdef _WIN32
+       cur_p = gmtime(&t);
+#else
+       gmtime_r(&t, cur_p);
+#endif
+}
+
+static struct date_rfc1123_case {
+       time_t t;
+       char date[30];
+} date_rfc1123_cases[] = {
+       {           0, "Thu, 01 Jan 1970 00:00:00 GMT"} /* UNIX time of zero */,
+       {   946684799, "Fri, 31 Dec 1999 23:59:59 GMT"} /* the last moment of the 20th century */,
+       {   946684800, "Sat, 01 Jan 2000 00:00:00 GMT"} /* the first moment of the 21st century */,
+       {   981072000, "Fri, 02 Feb 2001 00:00:00 GMT"},
+       {  1015113600, "Sun, 03 Mar 2002 00:00:00 GMT"},
+       {  1049414400, "Fri, 04 Apr 2003 00:00:00 GMT"},
+       {  1083715200, "Wed, 05 May 2004 00:00:00 GMT"},
+       {  1118016000, "Mon, 06 Jun 2005 00:00:00 GMT"},
+       {  1152230400, "Fri, 07 Jul 2006 00:00:00 GMT"},
+       {  1186531200, "Wed, 08 Aug 2007 00:00:00 GMT"},
+       {  1220918400, "Tue, 09 Sep 2008 00:00:00 GMT"},
+       {  1255132800, "Sat, 10 Oct 2009 00:00:00 GMT"},
+       {  1289433600, "Thu, 11 Nov 2010 00:00:00 GMT"},
+       {  1323648000, "Mon, 12 Dec 2011 00:00:00 GMT"},
+       {  4294967296, "Sun, 07 Feb 2106 06:28:16 GMT"} /* 2^32 */,
+       {253402300799, "Fri, 31 Dec 9999 23:59:59 GMT"} /* long long future no one can imagine */,
+       {  1456704000, "Mon, 29 Feb 2016 00:00:00 GMT"} /* leap year */,
+       {  1435708800, "Wed, 01 Jul 2015 00:00:00 GMT"} /* leap second */,
+       {  1481866376, "Fri, 16 Dec 2016 05:32:56 GMT"} /* the time this test case is generated */,
+       {0, ""} /* end of test cases. */
+};
+
+static void
+test_evutil_date_rfc1123(void *arg)
+{
+       struct tm query;
+       char result[30];
+
+       /* Checks if too small buffers are safely accepted. */
+       {
+               create_tm_from_unix_epoch(&query, 0);
+               evutil_date_rfc1123(result, 8, &query);
+               tt_str_op(result, ==, "Thu, 01");
+       }
+
+       /* Checks for testcases. */
+       for (size_t i=0; ; i++) {
+               struct date_rfc1123_case c = date_rfc1123_cases[i];
+
+               if (strlen(c.date) == 0)
+                       break;
+
+               create_tm_from_unix_epoch(&query, c.t);
+               evutil_date_rfc1123(result, sizeof(result), &query);
+               tt_str_op(result, ==, c.date);
+       }
+
+end:
+       ;
+}
+
 struct testcase_t util_testcases[] = {
        { "ipv4_parse", regress_ipv4_parse, 0, NULL, NULL },
        { "ipv6_parse", regress_ipv6_parse, 0, NULL, NULL },
@@ -1408,6 +1472,7 @@ struct testcase_t util_testcases[] = {
        { "monotonic_prc", test_evutil_monotonic_prc, 0, &basic_setup, (void*)"" },
        { "monotonic_prc_precise", test_evutil_monotonic_prc, 0, &basic_setup, (void*)"precise" },
        { "monotonic_prc_fallback", test_evutil_monotonic_prc, 0, &basic_setup, (void*)"fallback" },
+       { "date_rfc1123", test_evutil_date_rfc1123, 0, NULL, NULL },
        END_OF_TESTCASES,
 };