Add GETINFO current-time/{local,utc} regression test

This commit is contained in:
Neel Chauhan 2018-04-16 20:35:45 -04:00
parent ce84de39ef
commit 3a6e37f57f

View File

@ -1470,6 +1470,61 @@ test_download_status_bridge(void *arg)
return;
}
/** Set timeval to a mock date and time. This is neccessary
* to make tor_gettimeofday() mockable. */
static void
mock_tor_gettimeofday(struct timeval *timeval)
{
timeval->tv_sec = 1523405073;
timeval->tv_usec = 271645;
}
static void
test_current_time(void *arg)
{
/* We just need one of these to pass, it doesn't matter what's in it */
control_connection_t dummy;
/* Get results out */
char *answer = NULL;
const char *errmsg = NULL;
(void)arg;
/* We need these for storing the (mock) time. */
MOCK(tor_gettimeofday, mock_tor_gettimeofday);
struct timeval now;
tor_gettimeofday(&now);
char timebuf[ISO_TIME_LEN+1];
/* Case 1 - local time */
format_local_iso_time_nospace(timebuf, (time_t)now.tv_sec);
getinfo_helper_current_time(&dummy,
"current-time/local",
&answer, &errmsg);
tt_ptr_op(answer, OP_NE, NULL);
tt_ptr_op(errmsg, OP_EQ, NULL);
tt_str_op(answer, OP_EQ, timebuf);
tor_free(answer);
errmsg = NULL;
/* Case 2 - UTC time */
format_iso_time_nospace(timebuf, (time_t)now.tv_sec);
getinfo_helper_current_time(&dummy,
"current-time/utc",
&answer, &errmsg);
tt_ptr_op(answer, OP_NE, NULL);
tt_ptr_op(errmsg, OP_EQ, NULL);
tt_str_op(answer, OP_EQ, timebuf);
tor_free(answer);
errmsg = NULL;
done:
UNMOCK(tor_gettimeofday);
tor_free(answer);
return;
}
struct testcase_t controller_tests[] = {
{ "add_onion_helper_keyarg_v2", test_add_onion_helper_keyarg_v2, 0,
NULL, NULL },
@ -1486,6 +1541,7 @@ struct testcase_t controller_tests[] = {
NULL },
{ "download_status_desc", test_download_status_desc, 0, NULL, NULL },
{ "download_status_bridge", test_download_status_bridge, 0, NULL, NULL },
{ "current_time", test_current_time, 0, NULL, NULL },
END_OF_TESTCASES
};