diff options
Diffstat (limited to 'src/tests/test-modem-helpers.c')
-rw-r--r-- | src/tests/test-modem-helpers.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/tests/test-modem-helpers.c b/src/tests/test-modem-helpers.c index 52e6302a..c2cc1105 100644 --- a/src/tests/test-modem-helpers.c +++ b/src/tests/test-modem-helpers.c @@ -3667,6 +3667,63 @@ test_cfun_generic_response (void) } } +typedef struct { + gchar *response; + gint result; + gchar *error_message; +} CSIMResponseTest; + +static CSIMResponseTest csim_response_test_list [] = { + /* The parser expects that 2nd arg contains + * substring "63Cx" where x is an HEX string + * representing the retry value */ + {"+CSIM:8,\"000063C1\"", 1, NULL}, + {"+CSIM:8,\"000063CA\"", 10, NULL}, + {"+CSIM:8,\"000063CF\"", 15, NULL}, + /* The parser accepts spaces */ + {"+CSIM:8, \"000063C1\"", 1, NULL}, + {"+CSIM: 8, \"000063C1\"", 1, NULL}, + {"+CSIM: 8, \"000063C1\"", 1, NULL}, + /* the parser expects an int as first argument (2nd arg's length), + * but does not check if it is correct */ + {"+CSIM: 10, \"63CF\"", 15, NULL}, + /* Valid +CSIM Error codes */ + {"+CSIM: 4, \"6300\"", -1, "SIM verification failed"}, + {"+CSIM: 4, \"6983\"", -1, "SIM authentication method blocked"}, + {"+CSIM: 4, \"6984\"", -1, "SIM reference data invalidated"}, + {"+CSIM: 4, \"6A86\"", -1, "Incorrect parameters in SIM request"}, + {"+CSIM: 4, \"6A88\"", -1, "SIM reference data not found"}, + /* Test error: missing first argument */ + {"+CSIM:000063CF\"", -1, "Could not recognize +CSIM response '+CSIM:000063CF\"'"}, + /* Test error: missing quotation mark */ + {"+CSIM: 8, 000063CF", -1, "Could not recognize +CSIM response '+CSIM: 8, 000063CF'"}, + /* Test generic error */ + {"+CSIM: 4, \"63BF\"", -1, "Unknown error returned '0x63bf'"}, + {"+CSIM: 4, \"63D0\"", -1, "Unknown error returned '0x63d0'"} +}; + +static void +test_csim_response (void) +{ + guint i; + gint res; + GError* error = NULL; + + for (i = 0; i < G_N_ELEMENTS (csim_response_test_list); i++) { + res = mm_parse_csim_response (csim_response_test_list[i].response, &error); + + if (csim_response_test_list[i].error_message == NULL) { + g_assert_no_error (error); + } else { + g_assert_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED); + g_assert_cmpstr (error->message, ==, csim_response_test_list[i].error_message); + g_clear_error (&error); + } + + g_assert_cmpint (res, ==, csim_response_test_list[i].result); + } +} + /*****************************************************************************/ typedef struct { @@ -3932,6 +3989,8 @@ int main (int argc, char **argv) g_test_suite_add (suite, TESTCASE (test_cfun_response, NULL)); g_test_suite_add (suite, TESTCASE (test_cfun_generic_response, NULL)); + g_test_suite_add (suite, TESTCASE (test_csim_response, NULL)); + g_test_suite_add (suite, TESTCASE (test_cesq_response, NULL)); g_test_suite_add (suite, TESTCASE (test_cesq_response_to_signal, NULL)); |