summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-07-22 23:39:11 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-10-25 19:47:19 +0200
commite493292b7a1a0648d058147aca0022b64538653b (patch)
treef2f2852260f30117e9012e79b588ca35283405df
parentc440f121cc8625332e5dce63cda054e1ca8ce66f (diff)
downloadModemManager-e493292b7a1a0648d058147aca0022b64538653b.tar.gz
tests: new CDMA SMS part tester
-rw-r--r--.gitignore1
-rw-r--r--src/tests/Makefile.am27
-rw-r--r--src/tests/test-sms-part-cdma.c241
3 files changed, 268 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index ae9d5b1e4..b6e8fa225 100644
--- a/.gitignore
+++ b/.gitignore
@@ -53,6 +53,7 @@ src/tests/test-charsets
src/tests/test-qcdm-serial-port
src/tests/test-at-serial-port
src/tests/test-sms-part-3gpp
+src/tests/test-sms-part-cdma
cli/mmcli
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
index 4d80f0da1..2d13f25da 100644
--- a/src/tests/Makefile.am
+++ b/src/tests/Makefile.am
@@ -5,7 +5,8 @@ noinst_PROGRAMS = \
test-charsets \
test-qcdm-serial-port \
test-at-serial-port \
- test-sms-part-3gpp
+ test-sms-part-3gpp \
+ test-sms-part-cdma
if WITH_QMI
noinst_PROGRAMS += test-modem-helpers-qmi
@@ -160,3 +161,27 @@ if WITH_QMI
test_sms_part_3gpp_CPPFLAGS += $(QMI_CFLAGS)
test_sms_part_3gpp_LDADD += $(QMI_LIBS)
endif
+
+################
+
+test_sms_part_cdma_SOURCES = \
+ test-sms-part-cdma.c
+
+test_sms_part_cdma_CPPFLAGS = \
+ $(MM_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/src \
+ -I$(top_srcdir)/include \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/libmm-glib \
+ -I$(top_srcdir)/libmm-glib/generated \
+ -I$(top_builddir)/libmm-glib/generated
+
+test_sms_part_cdma_LDADD = \
+ $(top_builddir)/src/libmodem-helpers.la \
+ $(MM_LIBS)
+
+if WITH_QMI
+test_sms_part_cdma_CPPFLAGS += $(QMI_CFLAGS)
+test_sms_part_cdma_LDADD += $(QMI_LIBS)
+endif
diff --git a/src/tests/test-sms-part-cdma.c b/src/tests/test-sms-part-cdma.c
new file mode 100644
index 000000000..86aaaed59
--- /dev/null
+++ b/src/tests/test-sms-part-cdma.c
@@ -0,0 +1,241 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details:
+ *
+ * Copyright (C) 2013 Google, Inc.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <string.h>
+#include <stdio.h>
+#include <locale.h>
+
+#define _LIBMM_INSIDE_MM
+#include <libmm-glib.h>
+
+#include "mm-sms-part-cdma.h"
+#include "mm-log.h"
+
+/* If defined will print debugging traces */
+#ifdef TEST_SMS_PART_ENABLE_TRACE
+#define trace_pdu(pdu, pdu_len) do { \
+ guint i; \
+ \
+ g_print ("\n "); \
+ for (i = 0; i < len; i++) { \
+ g_print (" 0x%02X", pdu[i]); \
+ if (((i + 1) % 12) == 0) \
+ g_print ("\n "); \
+ } \
+ g_print ("\n"); \
+ } while (0)
+#else
+#define trace_pdu(...)
+#endif
+
+/********************* PDU PARSER TESTS *********************/
+
+static void
+common_test_part_from_hexpdu (const gchar *hexpdu,
+ MMSmsCdmaTeleserviceId expected_teleservice_id,
+ MMSmsCdmaServiceCategory expected_service_category,
+ const gchar *expected_address,
+ guint8 expected_bearer_reply_option)
+{
+ MMSmsPart *part;
+ GError *error = NULL;
+
+ mm_dbg (" ");
+ part = mm_sms_part_cdma_new_from_pdu (0, hexpdu, &error);
+ g_assert_no_error (error);
+ g_assert (part != NULL);
+
+ if (expected_teleservice_id != MM_SMS_CDMA_TELESERVICE_ID_UNKNOWN)
+ g_assert_cmpuint (expected_teleservice_id, ==, mm_sms_part_get_cdma_teleservice_id (part));
+ if (expected_service_category != MM_SMS_CDMA_SERVICE_CATEGORY_UNKNOWN)
+ g_assert_cmpuint (expected_service_category, ==, mm_sms_part_get_cdma_service_category (part));
+ if (expected_address) {
+ if (expected_address[0])
+ g_assert_cmpstr (expected_address, ==, mm_sms_part_get_number (part));
+ else
+ g_assert (mm_sms_part_get_number (part) == NULL);
+ }
+ if (expected_bearer_reply_option)
+ g_assert_cmpuint (expected_bearer_reply_option, ==, mm_sms_part_get_message_reference (part));
+
+ mm_sms_part_free (part);
+}
+
+static void
+common_test_part_from_pdu (const guint8 *pdu,
+ gsize pdu_size,
+ MMSmsCdmaTeleserviceId expected_teleservice_id,
+ MMSmsCdmaServiceCategory expected_service_category,
+ const gchar *expected_address,
+ guint8 expected_bearer_reply_option)
+{
+ gchar *hexpdu;
+
+ hexpdu = mm_utils_bin2hexstr (pdu, pdu_size);
+ common_test_part_from_hexpdu (hexpdu,
+ expected_teleservice_id,
+ expected_service_category,
+ expected_address,
+ expected_bearer_reply_option);
+ g_free (hexpdu);
+}
+
+static void
+common_test_invalid_part_from_hexpdu (const gchar *hexpdu)
+{
+ MMSmsPart *part;
+ GError *error = NULL;
+
+ mm_dbg (" ");
+ part = mm_sms_part_cdma_new_from_pdu (0, hexpdu, &error);
+ g_assert (part == NULL);
+ /* We don't care for the specific error type */
+ g_assert (error != NULL);
+ g_error_free (error);
+}
+
+static void
+common_test_invalid_part_from_pdu (const guint8 *pdu,
+ gsize pdu_size)
+{
+ gchar *hexpdu;
+
+ hexpdu = mm_utils_bin2hexstr (pdu, pdu_size);
+ common_test_invalid_part_from_hexpdu (hexpdu);
+ g_free (hexpdu);
+}
+
+static void
+test_pdu1 (void)
+{
+ static const guint8 pdu[] = {
+ /* message type */
+ 0x00,
+ /* teleservice id */
+ 0x00, 0x02,
+ 0x10, 0x02,
+ /* originating address */
+ 0x02, 0x07,
+ 0x02, 0x8C, 0xE9, 0x5D, 0xCC, 0x65, 0x80,
+ /* bearer reply option */
+ 0x06, 0x01,
+ 0xFC,
+ /* bearer data */
+ 0x08, 0x15,
+ 0x00, 0x03, 0x16, 0x8D, 0x30, 0x01, 0x06,
+ 0x10, 0x24, 0x18, 0x30, 0x60, 0x80, 0x03,
+ 0x06, 0x10, 0x10, 0x04, 0x04, 0x48, 0x47
+ };
+
+ common_test_part_from_pdu (
+ pdu, sizeof (pdu),
+ MM_SMS_CDMA_TELESERVICE_ID_WMT,
+ MM_SMS_CDMA_SERVICE_CATEGORY_UNKNOWN,
+ "3305773196",
+ 63);
+}
+
+static void
+test_invalid_parameter_length (void)
+{
+ static const guint8 pdu[] = {
+ /* message type */
+ 0x00,
+ /* teleservice id */
+ 0x00, 0x02,
+ 0x10, 0x02,
+ /* originating address */
+ 0x02, 0x07,
+ 0x02, 0x8C, 0xE9, 0x5D, 0xCC, 0x65, 0x80,
+ /* bearer reply option */
+ 0x06, 0x01,
+ 0xFC,
+ /* bearer data */
+ 0x08, 0x20, /* wrong parameter length! */
+ 0x00, 0x03, 0x16, 0x8D, 0x30, 0x01, 0x06,
+ 0x10, 0x24, 0x18, 0x30, 0x60, 0x80, 0x03,
+ 0x06, 0x10, 0x10, 0x04, 0x04, 0x48, 0x47
+ };
+
+ common_test_invalid_part_from_pdu (pdu, sizeof (pdu));
+}
+
+static void
+test_invalid_address_length (void)
+{
+ static const guint8 pdu[] = {
+ /* message type */
+ 0x00,
+ /* teleservice id */
+ 0x00, 0x02,
+ 0x10, 0x02,
+ /* originating address (wrong num_fields) */
+ 0x02, 0x07,
+ 0x03, 0x8C, 0xE9, 0x5D, 0xCC, 0x65, 0x80,
+ /* bearer reply option */
+ 0x06, 0x01,
+ 0xFC,
+ /* bearer data */
+ 0x08, 0x15,
+ 0x00, 0x03, 0x16, 0x8D, 0x30, 0x01, 0x06,
+ 0x10, 0x24, 0x18, 0x30, 0x60, 0x80, 0x03,
+ 0x06, 0x10, 0x10, 0x04, 0x04, 0x48, 0x47
+ };
+
+ common_test_part_from_pdu (
+ pdu, sizeof (pdu),
+ MM_SMS_CDMA_TELESERVICE_ID_WMT,
+ MM_SMS_CDMA_SERVICE_CATEGORY_UNKNOWN,
+ "",
+ 63);
+}
+
+/************************************************************/
+
+void
+_mm_log (const char *loc,
+ const char *func,
+ guint32 level,
+ const char *fmt,
+ ...)
+{
+#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
+}
+
+int main (int argc, char **argv)
+{
+ setlocale (LC_ALL, "");
+
+ g_type_init ();
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/MM/SMS/CDMA/PDU-Parser/pdu1", test_pdu1);
+ g_test_add_func ("/MM/SMS/CDMA/PDU-Parser/invalid-parameter-length", test_invalid_parameter_length);
+ g_test_add_func ("/MM/SMS/CDMA/PDU-Parser/invalid-address-length", test_invalid_address_length);
+
+ return g_test_run ();
+}