diff options
Diffstat (limited to 'src/tests/test-at-serial-port.c')
-rw-r--r-- | src/tests/test-at-serial-port.c | 108 |
1 files changed, 87 insertions, 21 deletions
diff --git a/src/tests/test-at-serial-port.c b/src/tests/test-at-serial-port.c index c0be5fa1..5372c478 100644 --- a/src/tests/test-at-serial-port.c +++ b/src/tests/test-at-serial-port.c @@ -18,13 +18,20 @@ #include <glib.h> #include "mm-port-serial-at.h" -#include "mm-log.h" +#include "mm-serial-parsers.h" +#include "mm-log-test.h" typedef struct { - gchar *original; - gchar *without_echo; + const gchar *original; + const gchar *without_echo; } EchoRemovalTest; +typedef struct { + const gchar *response; + const gboolean found; + const gboolean expected_error; +} ParseResponseTest; + static const EchoRemovalTest echo_removal_tests[] = { { "\r\n", "\r\n" }, { "\r", "\r" }, @@ -41,6 +48,41 @@ static const EchoRemovalTest echo_removal_tests[] = { { "\r\nthis is valid\r\nand so is this\r\n", "\r\nthis is valid\r\nand so is this\r\n" }, }; +static const ParseResponseTest parse_ok_tests[] = { + { "\r\nOK\r\n", TRUE, FALSE}, + { "\r\nOK\r\n\r\n+CMTI: \"ME\",1\r\n", TRUE, FALSE}, + { "\r\nOK\r\n\r\n+CIEV: 7,1\r\n\r\n+CRING: VOICE\r\n\r\n+CLIP: \"+0123456789\",145,,,,0\r\n", TRUE, FALSE}, + { "\r\nUNKNOWN COMMAND\r\n", FALSE, FALSE} +}; + +static const ParseResponseTest parse_error_tests[] = { + { "\r\nUNKNOWN COMMAND\r\n", FALSE, FALSE}, + { "\r\nERROR\r\n", TRUE, TRUE}, + { "\r\nERROR\r\n\r\noooops\r\n", TRUE, TRUE}, + { "\r\n+CME ERROR: raspberry\r\n", TRUE, TRUE}, + { "\r\n+CME ERROR: 123\r\n", TRUE, TRUE}, + { "\r\n+CME ERROR: \r\n", TRUE, TRUE}, + { "\r\n+CME ERROR:\r\n", FALSE, FALSE}, + { "\r\n+CMS ERROR: bananas\r\n", TRUE, TRUE}, + { "\r\n+CMS ERROR: 456\r\n", TRUE, TRUE}, + { "\r\n+CMS ERROR: \r\n", TRUE, TRUE}, + { "\r\n+CMS ERROR:\r\n", FALSE, FALSE}, + { "\r\nMODEM ERROR: 5\r\n", TRUE, TRUE}, + { "\r\nMODEM ERROR: apple\r\n", FALSE, FALSE}, + { "\r\nMODEM ERROR: \r\n", FALSE, FALSE}, + { "\r\nMODEM ERROR:\r\n", FALSE, FALSE}, + { "\r\nCOMMAND NOT SUPPORT\r\n", TRUE, TRUE}, + { "\r\nCOMMAND NOT SUPPORT\r\n\r\nSomething extra\r\n", TRUE, TRUE}, + { "\r\nNO CARRIER\r\n", TRUE, TRUE}, + { "\r\nNO CARRIER\r\n\r\nSomething extra\r\n", TRUE, TRUE}, + { "\r\nBUSY\r\n", TRUE, TRUE}, + { "\r\nBUSY\r\n\r\nSomething extra\r\n", TRUE, TRUE}, + { "\r\nNO ANSWER\r\n", TRUE, TRUE}, + { "\r\nNO ANSWER\r\n\r\nSomething extra\r\n", TRUE, TRUE}, + { "\r\nNO DIALTONE\r\n", TRUE, TRUE}, + { "\r\nNO DIALTONE\r\n\r\nSomething extra\r\n", TRUE, TRUE} +}; + static void at_serial_echo_removal (void) { @@ -64,32 +106,56 @@ at_serial_echo_removal (void) } } -void -_mm_log (const char *loc, - const char *func, - guint32 level, - const char *fmt, - ...) +static void +_run_parse_test (const ParseResponseTest tests[], guint number_of_tests) +{ + guint i; + gpointer parser; + GError *error = NULL; + gboolean found = FALSE; + GString *response; + + for (i = 0; i < number_of_tests; i++) { + parser = mm_serial_parser_v1_new (); + response = g_string_new (tests[i].response); + found = mm_serial_parser_v1_parse (parser, response, NULL, &error); + + /* Verify if we expect a match or not */ + g_assert_cmpint (found, ==, tests[i].found); + + /* Error expected */ + if (tests[i].expected_error) { + g_assert (error != NULL); + } + /* No error expected */ + else { + g_assert_no_error (error); + } + + g_string_free (response, TRUE); + error = NULL ; + } +} + +static void +at_serial_parse_ok (void) +{ + _run_parse_test (parse_ok_tests, G_N_ELEMENTS(parse_ok_tests)); +} + +static void +at_serial_parse_error (void) { -#if defined ENABLE_TEST_MESSAGE_TRACES - /* Dummy log function */ - va_list args; - gchar *msg; - - va_start (args, fmt); - msg = g_strdup_vprintf (fmt, args); - va_end (args); - g_print ("%s\n", msg); - g_free (msg); -#endif + _run_parse_test (parse_error_tests, G_N_ELEMENTS(parse_error_tests)); } int main (int argc, char **argv) { - g_type_init (); g_test_init (&argc, &argv, NULL); g_test_add_func ("/ModemManager/AT-serial/echo-removal", at_serial_echo_removal); + g_test_add_func ("/ModemManager/AT-serial/parse-ok", at_serial_parse_ok); + g_test_add_func ("/ModemManager/AT-serial/parse-error", at_serial_parse_error); return g_test_run (); } |