tests: new CDMA SMS part tester
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -53,6 +53,7 @@ src/tests/test-charsets
|
|||||||
src/tests/test-qcdm-serial-port
|
src/tests/test-qcdm-serial-port
|
||||||
src/tests/test-at-serial-port
|
src/tests/test-at-serial-port
|
||||||
src/tests/test-sms-part-3gpp
|
src/tests/test-sms-part-3gpp
|
||||||
|
src/tests/test-sms-part-cdma
|
||||||
|
|
||||||
cli/mmcli
|
cli/mmcli
|
||||||
|
|
||||||
|
@@ -5,7 +5,8 @@ noinst_PROGRAMS = \
|
|||||||
test-charsets \
|
test-charsets \
|
||||||
test-qcdm-serial-port \
|
test-qcdm-serial-port \
|
||||||
test-at-serial-port \
|
test-at-serial-port \
|
||||||
test-sms-part-3gpp
|
test-sms-part-3gpp \
|
||||||
|
test-sms-part-cdma
|
||||||
|
|
||||||
if WITH_QMI
|
if WITH_QMI
|
||||||
noinst_PROGRAMS += test-modem-helpers-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_CPPFLAGS += $(QMI_CFLAGS)
|
||||||
test_sms_part_3gpp_LDADD += $(QMI_LIBS)
|
test_sms_part_3gpp_LDADD += $(QMI_LIBS)
|
||||||
endif
|
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
|
||||||
|
241
src/tests/test-sms-part-cdma.c
Normal file
241
src/tests/test-sms-part-cdma.c
Normal file
@@ -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 ();
|
||||||
|
}
|
Reference in New Issue
Block a user