diff options
author | Jason Simmons <jsimmons@chromium.org> | 2015-03-13 15:30:58 -0700 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2015-03-23 11:31:32 +0100 |
commit | 3ad64c8f5aed43697bf289fce277bde48f208051 (patch) | |
tree | 58cdbad518e592df883d8b2db681ad7a32aaf76b /src/tests/test-modem-helpers.c | |
parent | a92566ec0e01bc606fd3673276eb5f7ece3b8291 (diff) |
broadband-modem: default implementation of the network time interface
Add a default implementation that queries the real-time clock using the
AT+CCLK? command. Also set AT+CTZU=1 in case a modem requires it.
Diffstat (limited to 'src/tests/test-modem-helpers.c')
-rw-r--r-- | src/tests/test-modem-helpers.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/tests/test-modem-helpers.c b/src/tests/test-modem-helpers.c index b493e6bc..9fd25016 100644 --- a/src/tests/test-modem-helpers.c +++ b/src/tests/test-modem-helpers.c @@ -2341,6 +2341,77 @@ test_supported_capability_filter (void *f, gpointer d) } /*****************************************************************************/ +/* Test +CCLK responses */ + +typedef struct { + const gchar *str; + gboolean ret; + gboolean test_iso8601; + gboolean test_tz; + gchar *iso8601; + gint32 offset; +} CclkTest; + +static const CclkTest cclk_tests[] = { + { "+CCLK: \"14/08/05,04:00:21+40\"", TRUE, TRUE, FALSE, + "2014-08-05T04:00:21+10:00", 600 }, + { "+CCLK: \"14/08/05,04:00:21+40\"", TRUE, FALSE, TRUE, + "2014-08-05T04:00:21+10:00", 600 }, + { "+CCLK: \"14/08/05,04:00:21+40\"", TRUE, TRUE, TRUE, + "2014-08-05T04:00:21+10:00", 600 }, + + { "+CCLK: \"15/02/28,20:30:40-32\"", TRUE, TRUE, FALSE, + "2015-02-28T20:30:40-08:00", -480 }, + { "+CCLK: \"15/02/28,20:30:40-32\"", TRUE, FALSE, TRUE, + "2015-02-28T20:30:40-08:00", -480 }, + { "+CCLK: \"15/02/28,20:30:40-32\"", TRUE, TRUE, TRUE, + "2015-02-28T20:30:40-08:00", -480 }, + + { "+CCLK: \"XX/XX/XX,XX:XX:XX+XX\"", FALSE, TRUE, FALSE, + NULL, MM_NETWORK_TIMEZONE_OFFSET_UNKNOWN }, + + { NULL, FALSE, FALSE, FALSE, NULL, MM_NETWORK_TIMEZONE_OFFSET_UNKNOWN } +}; + +static void +test_cclk_response (void) +{ + guint i; + + for (i = 0; cclk_tests[i].str; i++) { + GError *error = NULL; + gchar *iso8601 = NULL; + MMNetworkTimezone *tz = NULL; + gboolean ret; + + ret = mm_parse_cclk_response (cclk_tests[i].str, + cclk_tests[i].test_iso8601 ? &iso8601 : NULL, + cclk_tests[i].test_tz ? &tz : NULL, + &error); + + g_assert (ret == cclk_tests[i].ret); + g_assert (ret == (error ? FALSE : TRUE)); + + g_clear_error (&error); + + if (cclk_tests[i].test_iso8601) + g_assert_cmpstr (cclk_tests[i].iso8601, ==, iso8601); + + if (cclk_tests[i].test_tz) { + g_assert (mm_network_timezone_get_offset (tz) == cclk_tests[i].offset); + g_assert (mm_network_timezone_get_dst_offset (tz) == MM_NETWORK_TIMEZONE_OFFSET_UNKNOWN); + g_assert (mm_network_timezone_get_leap_seconds (tz) == MM_NETWORK_TIMEZONE_LEAP_SECONDS_UNKNOWN); + } + + if (iso8601) + g_free (iso8601); + + if (tz) + g_object_unref (tz); + } +} + +/*****************************************************************************/ void _mm_log (const char *loc, @@ -2501,6 +2572,8 @@ int main (int argc, char **argv) g_test_suite_add (suite, TESTCASE (test_supported_capability_filter, NULL)); + g_test_suite_add (suite, TESTCASE (test_cclk_response, NULL)); + result = g_test_run (); reg_test_data_free (reg_data); |