aboutsummaryrefslogtreecommitdiff
path: root/src/tests/test-modem-helpers.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-05-29 12:41:49 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-06-05 19:15:14 +0200
commit45ceba76924f184ed9e12ba3d35e00a55ad3a197 (patch)
treec413d3e29a64eb86340e964ec48e67d8a66c6f76 /src/tests/test-modem-helpers.c
parent212d00c529ee07131bf3b71a8759dca49292c059 (diff)
api,introspection: 'SupportedModes' is now a list of possible combinations
Instead of just a mask of MMModemMode values, we now provide a list of the allowed and preferred mode combinations supported by the modem. E.g.: $> sudo mmcli -m 0 ------------------------- Modes | supported: 'allowed: 2g; preferred: none | allowed: 3g; preferred: none | allowed: 2g, 3g; preferred: none | allowed: 2g, 3g; preferred: 2g | allowed: 2g, 3g; preferred: 3g | allowed: 4g; preferred: none | allowed: 2g, 3g, 4g; preferred: none'
Diffstat (limited to 'src/tests/test-modem-helpers.c')
-rw-r--r--src/tests/test-modem-helpers.c124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/tests/test-modem-helpers.c b/src/tests/test-modem-helpers.c
index 0d245b29..c61f190c 100644
--- a/src/tests/test-modem-helpers.c
+++ b/src/tests/test-modem-helpers.c
@@ -18,6 +18,7 @@
#include <string.h>
#include <stdlib.h>
+#include <libmm-glib.h>
#include "mm-modem-helpers.h"
#include "mm-log.h"
@@ -1931,6 +1932,127 @@ test_cdma_parse_gsn (void *f, gpointer d)
/*****************************************************************************/
+static gboolean
+find_mode_combination (GArray *modes,
+ MMModemMode allowed,
+ MMModemMode preferred)
+{
+ guint i;
+
+ for (i = 0; i < modes->len; i++) {
+ MMModemModeCombination *mode;
+
+ mode = &g_array_index (modes, MMModemModeCombination, i);
+ if (mode->allowed == allowed && mode->preferred == preferred)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static GArray *
+build_mode_all (MMModemMode all_mask)
+{
+ MMModemModeCombination all_item;
+ GArray *all;
+
+ all_item.allowed = all_mask;
+ all_item.preferred = MM_MODEM_MODE_NONE;
+ all = g_array_sized_new (FALSE, FALSE, sizeof (MMModemModeCombination), 1);
+ g_array_append_val (all, all_item);
+ return all;
+}
+
+static void
+test_supported_mode_filter (void *f, gpointer d)
+{
+ MMModemModeCombination mode;
+ GArray *all;
+ GArray *combinations;
+ GArray *filtered;
+
+ /* Build array of combinations */
+ combinations = g_array_sized_new (FALSE, FALSE, sizeof (MMModemModeCombination), 5);
+
+ /* 2G only */
+ mode.allowed = MM_MODEM_MODE_2G;
+ mode.preferred = MM_MODEM_MODE_NONE;
+ g_array_append_val (combinations, mode);
+ /* 3G only */
+ mode.allowed = MM_MODEM_MODE_3G;
+ mode.preferred = MM_MODEM_MODE_NONE;
+ g_array_append_val (combinations, mode);
+ /* 2G and 3G */
+ mode.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G);
+ mode.preferred = MM_MODEM_MODE_NONE;
+ g_array_append_val (combinations, mode);
+ /* 4G only */
+ mode.allowed = MM_MODEM_MODE_4G;
+ mode.preferred = MM_MODEM_MODE_NONE;
+ g_array_append_val (combinations, mode);
+ /* 3G and 4G */
+ mode.allowed = (MM_MODEM_MODE_3G | MM_MODEM_MODE_4G);
+ mode.preferred = MM_MODEM_MODE_NONE;
+ g_array_append_val (combinations, mode);
+ /* 2G, 3G and 4G */
+ mode.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G);
+ mode.preferred = MM_MODEM_MODE_NONE;
+ g_array_append_val (combinations, mode);
+
+ /* Only 2G supported */
+ all = build_mode_all (MM_MODEM_MODE_2G);
+ filtered = mm_filter_supported_modes (all, combinations);
+ g_assert_cmpuint (filtered->len, ==, 1);
+ g_assert (find_mode_combination (filtered, MM_MODEM_MODE_2G, MM_MODEM_MODE_NONE));
+ g_array_unref (filtered);
+ g_array_unref (all);
+
+ /* Only 3G supported */
+ all = build_mode_all (MM_MODEM_MODE_3G);
+ filtered = mm_filter_supported_modes (all, combinations);
+ g_assert_cmpuint (filtered->len, ==, 1);
+ g_assert (find_mode_combination (filtered, MM_MODEM_MODE_3G, MM_MODEM_MODE_NONE));
+ g_array_unref (filtered);
+ g_array_unref (all);
+
+ /* 2G and 3G supported */
+ all = build_mode_all (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G);
+ filtered = mm_filter_supported_modes (all, combinations);
+ g_assert_cmpuint (filtered->len, ==, 3);
+ g_assert (find_mode_combination (filtered, MM_MODEM_MODE_2G, MM_MODEM_MODE_NONE));
+ g_assert (find_mode_combination (filtered, MM_MODEM_MODE_3G, MM_MODEM_MODE_NONE));
+ g_assert (find_mode_combination (filtered, (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G), MM_MODEM_MODE_NONE));
+ g_array_unref (filtered);
+ g_array_unref (all);
+
+ /* 3G and 4G supported */
+ all = build_mode_all (MM_MODEM_MODE_3G | MM_MODEM_MODE_4G);
+ filtered = mm_filter_supported_modes (all, combinations);
+ g_assert_cmpuint (filtered->len, ==, 3);
+ g_assert (find_mode_combination (filtered, MM_MODEM_MODE_3G, MM_MODEM_MODE_NONE));
+ g_assert (find_mode_combination (filtered, MM_MODEM_MODE_4G, MM_MODEM_MODE_NONE));
+ g_assert (find_mode_combination (filtered, (MM_MODEM_MODE_3G | MM_MODEM_MODE_4G), MM_MODEM_MODE_NONE));
+ g_array_unref (filtered);
+ g_array_unref (all);
+
+ /* 2G, 3G and 4G supported */
+ all = build_mode_all (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G);
+ filtered = mm_filter_supported_modes (all, combinations);
+ g_assert_cmpuint (filtered->len, ==, 6);
+ g_assert (find_mode_combination (filtered, MM_MODEM_MODE_2G, MM_MODEM_MODE_NONE));
+ g_assert (find_mode_combination (filtered, MM_MODEM_MODE_3G, MM_MODEM_MODE_NONE));
+ g_assert (find_mode_combination (filtered, (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G), MM_MODEM_MODE_NONE));
+ g_assert (find_mode_combination (filtered, MM_MODEM_MODE_4G, MM_MODEM_MODE_NONE));
+ g_assert (find_mode_combination (filtered, (MM_MODEM_MODE_3G | MM_MODEM_MODE_4G), MM_MODEM_MODE_NONE));
+ g_assert (find_mode_combination (filtered, (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G), MM_MODEM_MODE_NONE));
+ g_array_unref (filtered);
+ g_array_unref (all);
+
+ g_array_unref (combinations);
+}
+
+/*****************************************************************************/
+
void
_mm_log (const char *loc,
const char *func,
@@ -2060,6 +2182,8 @@ int main (int argc, char **argv)
g_test_suite_add (suite, TESTCASE (test_cmgl_response_pantech, NULL));
g_test_suite_add (suite, TESTCASE (test_cmgl_response_pantech_multiple, NULL));
+ g_test_suite_add (suite, TESTCASE (test_supported_mode_filter, NULL));
+
result = g_test_run ();
reg_test_data_free (reg_data);