From 44848d5a9bb298219cc1bbeb54d83e342545adb4 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Thu, 3 Dec 2009 00:26:20 -0600 Subject: [PATCH] Add unit test for max message size encoding --- unit/test-sms.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/unit/test-sms.c b/unit/test-sms.c index 9c1528c5..5815cf44 100644 --- a/unit/test-sms.c +++ b/unit/test-sms.c @@ -846,6 +846,66 @@ static void test_prepare_concat() sms_assembly_free(assembly); } +static void test_limit(gunichar uni, int target_size, gboolean use_16bit) +{ + char *utf8; + char *decoded; + GSList *l; + unsigned int i; + char utf8_char[6]; + unsigned int stride; + + stride = g_unichar_to_utf8(uni, utf8_char); + + utf8 = g_new0(char, (target_size + 2) * stride); + + for (i = 0; i < target_size * stride; i += stride) + memcpy(utf8 + i, utf8_char, stride); + + utf8[i] = '\0'; + + l = sms_text_prepare(utf8, 0, use_16bit, NULL); + + g_assert(l); + g_assert(g_slist_length(l) == 255); + + decoded = sms_decode_text(l); + g_assert(g_utf8_strlen(decoded, -1) == target_size); + + g_free(decoded); + + memcpy(utf8 + i, utf8_char, stride); + utf8[i+stride] = '\0'; + + l = sms_text_prepare(utf8, 0, use_16bit, NULL); + + g_assert(l == NULL); + g_free(utf8); +} + +static void test_prepare_limits() +{ + gunichar ascii = 0x41; + gunichar ucs2 = 0x416; + unsigned int target_size; + + /* The limit for 16 bit headers is 255 * 152 for GSM7 */ + target_size = 255 * 152; + test_limit(ascii, target_size, TRUE); + + /* The limit for 8 bit headers is 255 * 153 for GSM7 */ + target_size = 255 * 153; + test_limit(ascii, target_size, FALSE); + + /* The limit for 16 bit headers is 255 * 66 for UCS2 */ + target_size = 255 * 66; + test_limit(ucs2, target_size, TRUE); + + /* The limit for 8 bit headers is 255 * 67 for UCS2 */ + target_size = 255 * 67; + test_limit(ucs2, target_size, FALSE); +} + static const char *cbs1 = "011000320111C2327BFC76BBCBEE46A3D168341A8D46A3D1683" "41A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168" "341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D100"; @@ -1111,6 +1171,7 @@ int main(int argc, char **argv) g_test_add_func("/testsms/Test Assembly", test_assembly); g_test_add_func("/testsms/Test Prepare 7Bit", test_prepare_7bit); g_test_add_func("/testsms/Test Prepare Concat", test_prepare_concat); + g_test_add_func("/testsms/Test Prepare Limits", test_prepare_limits); g_test_add_func("/testsms/Test CBS Encode / Decode", test_cbs_encode_decode);