diff options
Diffstat (limited to 'plugins/cinterion/tests/test-modem-helpers-cinterion.c')
-rw-r--r-- | plugins/cinterion/tests/test-modem-helpers-cinterion.c | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/plugins/cinterion/tests/test-modem-helpers-cinterion.c b/plugins/cinterion/tests/test-modem-helpers-cinterion.c index 8332700b..d4816199 100644 --- a/plugins/cinterion/tests/test-modem-helpers-cinterion.c +++ b/plugins/cinterion/tests/test-modem-helpers-cinterion.c @@ -1744,6 +1744,187 @@ test_sgauth_response (void) } /*****************************************************************************/ +/* Test ^SXRAT responses */ + +static void +common_test_sxrat (const gchar *response, + const GArray *expected_rat, + const GArray *expected_pref1, + const GArray *expected_pref2) +{ + GArray *supported_rat = NULL; + GArray *supported_pref1 = NULL; + GArray *supported_pref2 = NULL; + GError *error = NULL; + gboolean res; + + g_assert (expected_rat != NULL); + g_assert (expected_pref1 != NULL); + + res = mm_cinterion_parse_sxrat_test (response, + &supported_rat, + &supported_pref1, + &supported_pref2, + &error); + g_assert_no_error (error); + g_assert (res == TRUE); + g_assert (supported_rat != NULL); + g_assert (supported_pref1 != NULL); + if (expected_pref2) + g_assert (supported_pref2 != NULL); + else + g_assert (supported_pref2 == NULL); + + compare_arrays (supported_rat, expected_rat); + compare_arrays (supported_pref1, expected_pref1); + if (expected_pref2) + compare_arrays (supported_pref2, expected_pref2); + + g_array_unref (supported_rat); + g_array_unref (supported_pref1); + if (supported_pref2) + g_array_unref (supported_pref2); +} + +static void +test_sxrat_response_els61 (void) +{ + GArray *expected_rat; + GArray *expected_pref1; + GArray *expected_pref2; + guint val; + const gchar *response = + "^SXRAT: (0-6),(0,2,3),(0,2,3)\r\n" + "\r\n"; + + expected_rat = g_array_sized_new (FALSE, FALSE, sizeof (guint), 7); + val = 0, g_array_append_val (expected_rat, val); + val = 1, g_array_append_val (expected_rat, val); + val = 2, g_array_append_val (expected_rat, val); + val = 3, g_array_append_val (expected_rat, val); + val = 4, g_array_append_val (expected_rat, val); + val = 5, g_array_append_val (expected_rat, val); + val = 6, g_array_append_val (expected_rat, val); + + expected_pref1 = g_array_sized_new (FALSE, FALSE, sizeof (guint), 3); + val = 0, g_array_append_val (expected_pref1, val); + val = 2, g_array_append_val (expected_pref1, val); + val = 3, g_array_append_val (expected_pref1, val); + + expected_pref2 = g_array_sized_new (FALSE, FALSE, sizeof (guint), 3); + val = 0, g_array_append_val (expected_pref2, val); + val = 2, g_array_append_val (expected_pref2, val); + val = 3, g_array_append_val (expected_pref2, val); + + common_test_sxrat (response, + expected_rat, + expected_pref1, + expected_pref2); + + g_array_unref (expected_rat); + g_array_unref (expected_pref1); + g_array_unref (expected_pref2); +} + +static void +test_sxrat_response_other (void) +{ + GArray *expected_rat; + GArray *expected_pref1; + GArray *expected_pref2 = NULL; + guint val; + const gchar *response = + "^SXRAT: (0-2),(0,2)\r\n" + "\r\n"; + + expected_rat = g_array_sized_new (FALSE, FALSE, sizeof (guint), 3); + val = 0, g_array_append_val (expected_rat, val); + val = 1, g_array_append_val (expected_rat, val); + val = 2, g_array_append_val (expected_rat, val); + + expected_pref1 = g_array_sized_new (FALSE, FALSE, sizeof (guint), 3); + val = 0, g_array_append_val (expected_pref1, val); + val = 2, g_array_append_val (expected_pref1, val); + + common_test_sxrat (response, + expected_rat, + expected_pref1, + expected_pref2); + + g_array_unref (expected_rat); + g_array_unref (expected_pref1); +} + +typedef struct { + const gchar *str; + MMModemMode allowed; + MMModemMode preferred; + gboolean success; +} SxratBuildTest; + +static const SxratBuildTest sxrat_build_tests[] = { + { + .str = "^SXRAT=0", + .allowed = MM_MODEM_MODE_2G, + .preferred = MM_MODEM_MODE_NONE, + .success = TRUE, + }, + { + .str = "^SXRAT=3", + .allowed = MM_MODEM_MODE_4G, + .preferred = MM_MODEM_MODE_NONE, + .success = TRUE, + }, + { + .str = "^SXRAT=1,2", + .allowed = MM_MODEM_MODE_2G | MM_MODEM_MODE_3G, + .preferred = MM_MODEM_MODE_3G, + .success = TRUE, + }, + { + .str = "^SXRAT=6,3", + .allowed = MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G, + .preferred = MM_MODEM_MODE_4G, + .success = TRUE, + }, + { + .str = NULL, + .allowed = MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G, + .preferred = MM_MODEM_MODE_3G | MM_MODEM_MODE_4G, + .success = FALSE, + }, + { + .str = NULL, + .allowed = MM_MODEM_MODE_5G, + .preferred = MM_MODEM_MODE_NONE, + .success = FALSE, + }, + +}; + +static void +test_sxrat (void) +{ + guint i; + + for (i = 0; i < G_N_ELEMENTS (sxrat_build_tests); i++) { + GError *error = NULL; + gchar* result; + + result = mm_cinterion_build_sxrat_set_command (sxrat_build_tests[i].allowed, + sxrat_build_tests[i].preferred, + &error); + if (sxrat_build_tests[i].success) { + g_assert_no_error (error); + g_assert (result); + g_assert_cmpstr (result, ==, sxrat_build_tests[i].str); + } else { + g_assert (error); + g_assert (!result); + } + } +} +/*****************************************************************************/ int main (int argc, char **argv) { @@ -1778,6 +1959,9 @@ int main (int argc, char **argv) g_test_add_func ("/MM/cinterion/smoni/query_response_to_signal", test_smoni_response_to_signal); g_test_add_func ("/MM/cinterion/scfg/provcfg", test_provcfg_response); g_test_add_func ("/MM/cinterion/sgauth", test_sgauth_response); + g_test_add_func ("/MM/cinterion/sxrat", test_sxrat); + g_test_add_func ("/MM/cinterion/sxrat/response/els61", test_sxrat_response_els61); + g_test_add_func ("/MM/cinterion/sxrat/response/other", test_sxrat_response_other); return g_test_run (); } |