summaryrefslogtreecommitdiff
path: root/src/tests/test-at-serial-port.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/test-at-serial-port.c')
-rw-r--r--src/tests/test-at-serial-port.c108
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 ();
}