aboutsummaryrefslogtreecommitdiff
path: root/src/tests/test-modem-helpers.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/test-modem-helpers.c')
-rw-r--r--src/tests/test-modem-helpers.c123
1 files changed, 87 insertions, 36 deletions
diff --git a/src/tests/test-modem-helpers.c b/src/tests/test-modem-helpers.c
index da5416d1..f02a0862 100644
--- a/src/tests/test-modem-helpers.c
+++ b/src/tests/test-modem-helpers.c
@@ -17,6 +17,7 @@
#include <glib-object.h>
#include <string.h>
#include <stdlib.h>
+#include <math.h>
#include <libmm-glib.h>
#include "mm-modem-helpers.h"
@@ -28,6 +29,9 @@
#define trace(...)
#endif
+#define g_assert_cmpfloat_tolerance(val1, val2, tolerance) \
+ g_assert_cmpfloat (fabs (val1 - val2), <, tolerance)
+
/*****************************************************************************/
/* Test CMGL responses */
@@ -3081,7 +3085,6 @@ test_cgcontrdp_response (void)
}
/*****************************************************************************/
-<<<<<<< HEAD
/* Test CFUN? response */
typedef struct {
@@ -3112,46 +3115,51 @@ test_cfun_response (void)
g_assert_no_error (error);
g_assert (success);
g_assert_cmpuint (cfun_query_tests[i].state, ==, state);
-=======
+ }
+}
+
+/*****************************************************************************/
/* Test +CESQ responses */
typedef struct {
const gchar *str;
- guint rxlev;
- guint ber;
- guint rscp;
- guint ecn0;
- guint rsrq;
- guint rsrp;
+
+ gboolean gsm_info;
+ guint rxlev;
+ gdouble rssi;
+ guint ber;
+
+ gboolean umts_info;
+ guint rscp_level;
+ gdouble rscp;
+ guint ecn0_level;
+ gdouble ecio;
+
+ gboolean lte_info;
+ guint rsrq_level;
+ gdouble rsrq;
+ guint rsrp_level;
+ gdouble rsrp;
} CesqResponseTest;
static const CesqResponseTest cesq_response_tests[] = {
{
- .str = "+CESQ: 99,99,255,255,20,80",
- .rxlev = 99,
- .ber = 99,
- .rscp = 255,
- .ecn0 = 255,
- .rsrq = 20,
- .rsrp = 80
+ .str = "+CESQ: 99,99,255,255,20,80",
+ .gsm_info = FALSE, .rxlev = 99, .ber = 99,
+ .umts_info = FALSE, .rscp_level = 255, .ecn0_level = 255,
+ .lte_info = TRUE, .rsrq_level = 20, .rsrq = -10.0, .rsrp_level = 80, .rsrp = -61.0,
},
{
- .str = "+CESQ: 99,99,95,40,255,255",
- .rxlev = 99,
- .ber = 99,
- .rscp = 95,
- .ecn0 = 40,
- .rsrq = 255,
- .rsrp = 255
+ .str = "+CESQ: 99,99,95,40,255,255",
+ .gsm_info = FALSE, .rxlev = 99, .ber = 99,
+ .umts_info = TRUE, .rscp_level = 95, .rscp = -26.0, .ecn0_level = 40, .ecio = -4.5,
+ .lte_info = FALSE, .rsrq_level = 255, .rsrp_level = 255,
},
{
- .str = "+CESQ: 10,6,255,255,255,255",
- .rxlev = 10,
- .ber = 6,
- .rscp = 255,
- .ecn0 = 255,
- .rsrq = 255,
- .rsrp = 255
+ .str = "+CESQ: 10,6,255,255,255,255",
+ .gsm_info = TRUE, .rxlev = 10, .rssi = -101.0, .ber = 6,
+ .umts_info = FALSE, .rscp_level = 255, .ecn0_level = 255,
+ .lte_info = FALSE, .rsrq_level = 255, .rsrp_level = 255,
}
};
@@ -3178,13 +3186,55 @@ test_cesq_response (void)
g_assert_no_error (error);
g_assert (success);
- g_assert_cmpuint (cesq_response_tests[i].rxlev, ==, rxlev);
- g_assert_cmpuint (cesq_response_tests[i].ber, ==, ber);
- g_assert_cmpuint (cesq_response_tests[i].rscp, ==, rscp);
- g_assert_cmpuint (cesq_response_tests[i].ecn0, ==, ecn0);
- g_assert_cmpuint (cesq_response_tests[i].rsrq, ==, rsrq);
- g_assert_cmpuint (cesq_response_tests[i].rsrp, ==, rsrp);
->>>>>>> fa0bc3bc... modem-helpers: new +CESQ response parser
+ g_assert_cmpuint (cesq_response_tests[i].rxlev, ==, rxlev);
+ g_assert_cmpuint (cesq_response_tests[i].ber, ==, ber);
+ g_assert_cmpuint (cesq_response_tests[i].rscp_level, ==, rscp);
+ g_assert_cmpuint (cesq_response_tests[i].ecn0_level, ==, ecn0);
+ g_assert_cmpuint (cesq_response_tests[i].rsrq_level, ==, rsrq);
+ g_assert_cmpuint (cesq_response_tests[i].rsrp_level, ==, rsrp);
+ }
+}
+
+static void
+test_cesq_response_to_signal (void)
+{
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (cesq_response_tests); i++) {
+ GError *error = NULL;
+ gboolean success;
+ MMSignal *gsm = NULL;
+ MMSignal *umts = NULL;
+ MMSignal *lte = NULL;
+
+ success = mm_3gpp_cesq_response_to_signal_info (cesq_response_tests[i].str,
+ &gsm, &umts, &lte,
+ &error);
+ g_assert_no_error (error);
+ g_assert (success);
+
+ if (cesq_response_tests[i].gsm_info) {
+ g_assert (gsm);
+ g_assert_cmpfloat_tolerance (mm_signal_get_rssi (gsm), cesq_response_tests[i].rssi, 0.1);
+ g_object_unref (gsm);
+ } else
+ g_assert (!gsm);
+
+ if (cesq_response_tests[i].umts_info) {
+ g_assert (umts);
+ g_assert_cmpfloat_tolerance (mm_signal_get_rscp (umts), cesq_response_tests[i].rscp, 0.1);
+ g_assert_cmpfloat_tolerance (mm_signal_get_ecio (umts), cesq_response_tests[i].ecio, 0.1);
+ g_object_unref (umts);
+ } else
+ g_assert (!umts);
+
+ if (cesq_response_tests[i].lte_info) {
+ g_assert (lte);
+ g_assert_cmpfloat_tolerance (mm_signal_get_rsrq (lte), cesq_response_tests[i].rsrq, 0.1);
+ g_assert_cmpfloat_tolerance (mm_signal_get_rsrp (lte), cesq_response_tests[i].rsrp, 0.1);
+ g_object_unref (lte);
+ } else
+ g_assert (!lte);
}
}
@@ -3455,6 +3505,7 @@ int main (int argc, char **argv)
g_test_suite_add (suite, TESTCASE (test_cfun_generic_response, NULL));
g_test_suite_add (suite, TESTCASE (test_cesq_response, NULL));
+ g_test_suite_add (suite, TESTCASE (test_cesq_response_to_signal, NULL));
g_test_suite_add (suite, TESTCASE (test_parse_uint_list, NULL));