summaryrefslogtreecommitdiffstats
path: root/unit/test-sms.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2009-06-02 13:20:18 -0500
committerDenis Kenzior <denkenz@gmail.com>2009-06-03 21:08:39 -0500
commit7470393da7d7c5ecf83739e1c0e82a079e9c1830 (patch)
tree84ac77bee547e7cd842518223d7c8a5913e771c8 /unit/test-sms.c
parent0fbf2acb9de244b9be30e4705c49bdeed3342848 (diff)
downloadofono-7470393da7d7c5ecf83739e1c0e82a079e9c1830.tar.bz2
Add UDH Iterator unit test
Diffstat (limited to 'unit/test-sms.c')
-rw-r--r--unit/test-sms.c119
1 files changed, 119 insertions, 0 deletions
diff --git a/unit/test-sms.c b/unit/test-sms.c
index 6f056310..d644cda0 100644
--- a/unit/test-sms.c
+++ b/unit/test-sms.c
@@ -450,6 +450,124 @@ static void test_submit_encode()
g_free(encoded_pdu);
}
+static const char *header_test = "0041000B915121551532F40000631A0A031906200A03"
+ "2104100A032705040A032E05080A043807002B8ACD29A85D9ECFC3E7F21C340EBB41E"
+ "3B79B1E4EBB41697A989D1EB340E2379BCC02B1C3F27399059AB7C36C3628EC2683C6"
+ "6FF65B5E2683E8653C1D";
+static int header_test_len = 100;
+static const char *header_test_expected = "EMS messages can contain italic, bold"
+ ", large, small and colored text";
+
+static void test_udh_iter()
+{
+ struct sms sms;
+ unsigned char *decoded_pdu;
+ long pdu_len;
+ gboolean ret;
+ int data_len;
+ int udhl;
+ struct sms_udh_iter iter;
+ int max_chars;
+ unsigned char *unpacked;
+ char *utf8;
+
+ decoded_pdu = decode_hex(header_test, -1, &pdu_len, 0);
+
+ g_assert(decoded_pdu);
+ g_assert(pdu_len == (long)strlen(header_test) / 2);
+
+ ret = decode_sms(decoded_pdu, pdu_len, TRUE,
+ header_test_len, &sms);
+
+ g_free(decoded_pdu);
+
+ g_assert(ret);
+ g_assert(sms.type == SMS_TYPE_SUBMIT);
+
+ if (g_test_verbose()) {
+ if (sms.sc_addr.address[0] == '\0')
+ g_print("SMSC Address absent, default will be used\n");
+ else
+ g_print("SMSC Address number_type: %d,"
+ " number_plan: %d, %s\n",
+ (int)sms.sc_addr.number_type,
+ (int)sms.sc_addr.numbering_plan,
+ sms.sc_addr.address);
+
+ g_print("SMS type: %d\n", (int)sms.type);
+
+ g_print("Message Reference: %u\n", (int)sms.submit.mr);
+
+ g_print("Destination-Address: %d, %d, %s\n",
+ (int)sms.submit.daddr.number_type,
+ (int)sms.submit.daddr.numbering_plan,
+ sms.submit.daddr.address);
+
+ g_print("PID: %d\n", (int)sms.submit.pid);
+ g_print("DCS: %d\n", (int)sms.submit.dcs);
+
+ print_vpf(sms.submit.vpf, &sms.submit.vp);
+ }
+
+ udhl = sms.submit.ud[0];
+ g_assert(sms.submit.udl == 99);
+ g_assert(udhl == 26);
+
+ ret = sms_udh_iter_init(&sms, &iter);
+
+ g_assert(ret);
+
+ g_assert(sms_udh_iter_get_ie_type(&iter) == SMS_IEI_TEXT_FORMAT);
+ g_assert(sms_udh_iter_get_ie_length(&iter) == 3);
+ g_assert(sms_udh_iter_has_next(&iter) == TRUE);
+ g_assert(sms_udh_iter_next(&iter) == TRUE);
+
+ g_assert(sms_udh_iter_get_ie_type(&iter) == SMS_IEI_TEXT_FORMAT);
+ g_assert(sms_udh_iter_get_ie_length(&iter) == 3);
+ g_assert(sms_udh_iter_has_next(&iter) == TRUE);
+ g_assert(sms_udh_iter_next(&iter) == TRUE);
+
+ g_assert(sms_udh_iter_get_ie_type(&iter) == SMS_IEI_TEXT_FORMAT);
+ g_assert(sms_udh_iter_get_ie_length(&iter) == 3);
+ g_assert(sms_udh_iter_has_next(&iter) == TRUE);
+ g_assert(sms_udh_iter_next(&iter) == TRUE);
+
+ g_assert(sms_udh_iter_get_ie_type(&iter) == SMS_IEI_TEXT_FORMAT);
+ g_assert(sms_udh_iter_get_ie_length(&iter) == 3);
+ g_assert(sms_udh_iter_has_next(&iter) == TRUE);
+ g_assert(sms_udh_iter_next(&iter) == TRUE);
+
+ g_assert(sms_udh_iter_get_ie_type(&iter) == SMS_IEI_TEXT_FORMAT);
+ g_assert(sms_udh_iter_get_ie_length(&iter) == 4);
+ g_assert(sms_udh_iter_has_next(&iter) == FALSE);
+ g_assert(sms_udh_iter_next(&iter) == FALSE);
+ g_assert(sms_udh_iter_get_ie_type(&iter) == SMS_IEI_INVALID);
+
+ data_len = ud_len_in_octets(sms.submit.udl, sms.submit.dcs);
+
+ g_assert(data_len == 87);
+
+ max_chars = (data_len - (udhl + 1)) * 8 / 7;
+
+ unpacked = unpack_7bit(sms.submit.ud + udhl + 1, data_len - (udhl + 1),
+ udhl + 1, FALSE, max_chars, NULL, 0xff);
+
+ g_assert(unpacked);
+
+ utf8 = convert_gsm_to_utf8(unpacked, -1, NULL, NULL, 0xff);
+
+ g_free(unpacked);
+
+ g_assert(utf8);
+
+ if (g_test_verbose())
+ g_print("Decoded user data is: %s\n", utf8);
+
+ g_assert(strcmp(utf8, header_test_expected) == 0);
+
+ g_free(utf8);
+}
+
int main(int argc, char **argv)
{
g_test_init(&argc, &argv, NULL);
@@ -459,6 +577,7 @@ int main(int argc, char **argv)
g_test_add_func("/testsms/Test Deliver Encode", test_deliver_encode);
g_test_add_func("/testsms/Test Simple Submit", test_simple_submit);
g_test_add_func("/testsms/Test Submit Encode", test_submit_encode);
+ g_test_add_func("/testsms/Test UDH Iterator", test_udh_iter);
return g_test_run();
}