1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/mobilemessage/tests/marionette/test_mt_sms_concatenation.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,127 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +MARIONETTE_TIMEOUT = 60000; 1.8 +MARIONETTE_HEAD_JS = 'head.js'; 1.9 + 1.10 +const PDU_SMSC_NONE = "00"; // no SMSC Address 1.11 + 1.12 +const PDU_FIRST_OCTET = "40"; // RP:no, UDHI:yes, SRI:no, MMS:no, MTI:SMS-DELIVER 1.13 + 1.14 +const PDU_SENDER = "0A912143658709"; // +1234567890 1.15 +const SENDER = "+1234567890"; 1.16 + 1.17 +const PDU_PID_NORMAL = "00"; 1.18 + 1.19 +const PDU_DCS_NORMAL_UCS2 = "08"; 1.20 +const PDU_DCS_CLASS0_UCS2 = "18"; 1.21 +const PDU_DCS_NORMAL_8BIT = "04"; 1.22 +const PDU_DCS_CLASS0_8BIT = "14"; 1.23 + 1.24 +const PDU_TIMESTAMP = "00101000000000"; // 2000/01/01 1.25 + 1.26 +function byteValueToHexString(aValue) { 1.27 + let str = Number(aValue).toString(16).toUpperCase(); 1.28 + return str.length == 1 ? "0" + str : str; 1.29 +} 1.30 + 1.31 +let ref_num = 0; 1.32 +function buildTextPdus(aDcs) { 1.33 + ref_num++; 1.34 + 1.35 + let IEI_CONCATE_1 = "0003" + byteValueToHexString(ref_num) + "0301"; 1.36 + let IEI_CONCATE_2 = "0003" + byteValueToHexString(ref_num) + "0302"; 1.37 + let IEI_CONCATE_3 = "0003" + byteValueToHexString(ref_num) + "0303"; 1.38 + let PDU_UDL = "08"; // UDHL(1) + UDH(5) + UCS2 Char (2) 1.39 + let PDU_UDHL = "05"; 1.40 + 1.41 + let PDU_UD_A = "0041"; // "A" 1.42 + let PDU_UD_B = "0042"; // "B" 1.43 + let PDU_UD_C = "0043"; // "C" 1.44 + 1.45 + let PDU_COMMON = PDU_SMSC_NONE + PDU_FIRST_OCTET + PDU_SENDER + 1.46 + PDU_PID_NORMAL + aDcs + PDU_TIMESTAMP + PDU_UDL + PDU_UDHL; 1.47 + 1.48 + return [ 1.49 + PDU_COMMON + IEI_CONCATE_1 + PDU_UD_A, 1.50 + PDU_COMMON + IEI_CONCATE_2 + PDU_UD_B, 1.51 + PDU_COMMON + IEI_CONCATE_3 + PDU_UD_C 1.52 + ]; 1.53 +} 1.54 + 1.55 +function buildBinaryPdus(aDcs) { 1.56 + ref_num++; 1.57 + let IEI_PORT = "05040B8423F0"; 1.58 + 1.59 + let PDU_DATA1 = "C106316170706C69636174696F6E2F76" + 1.60 + "6E642E7761702E6D6D732D6D65737361" + 1.61 + "676500B131302E382E3133302E313800" + 1.62 + "AF84B4818C82986B4430595538595347" + 1.63 + "77464E446741416B4876736C58303141" + 1.64 + "41414141414141008D90890380310096" + 1.65 + "05EA4D4D53008A808E02024188058103" + 1.66 + "015F9083687474703A2F2F6D6D732E65"; 1.67 + 1.68 + let PDU_DATA2 = "6D6F6D652E6E65743A383030322F6B44" + 1.69 + "3059553859534777464E446741416B48" + 1.70 + "76736C583031414141414141414100"; 1.71 + 1.72 + let PDU_COMMON = PDU_SMSC_NONE + PDU_FIRST_OCTET + PDU_SENDER + 1.73 + PDU_PID_NORMAL + aDcs + PDU_TIMESTAMP; 1.74 + 1.75 + function construstBinaryUserData(aBinaryData, aSeqNum) { 1.76 + let ieiConcat = "0003" + byteValueToHexString(ref_num) + "02" + 1.77 + byteValueToHexString(aSeqNum); 1.78 + 1.79 + let udh = IEI_PORT + ieiConcat; 1.80 + let udhl = byteValueToHexString(udh.length / 2); 1.81 + let ud = udhl + udh + aBinaryData; 1.82 + let udl = byteValueToHexString(ud.length / 2); 1.83 + 1.84 + return udl + ud; 1.85 + } 1.86 + 1.87 + return [ 1.88 + PDU_COMMON + construstBinaryUserData(PDU_DATA1, 1), 1.89 + PDU_COMMON + construstBinaryUserData(PDU_DATA2, 2) 1.90 + ]; 1.91 +} 1.92 + 1.93 +function verifyTextMessage(aMessage, aMessageClass) { 1.94 + is(aMessage.messageClass, aMessageClass, "SmsMessage class"); 1.95 + is(aMessage.sender, SENDER, "SmsMessage sender"); 1.96 + is(aMessage.body, "ABC", "SmsMessage body"); 1.97 +} 1.98 + 1.99 +function verifyBinaryMessage(aMessage) { 1.100 + is(aMessage.type, "mms", "MmsMessage type"); 1.101 + is(aMessage.delivery, "not-downloaded", "MmsMessage delivery"); 1.102 + 1.103 + // remove duplicated M-Notification.ind for next test. 1.104 + return deleteMessagesById([aMessage.id]); 1.105 +} 1.106 + 1.107 +function testText(aDcs, aClass) { 1.108 + log("testText(): aDcs = " + aDcs + ", aClass = " + aClass); 1.109 + return sendMultipleRawSmsToEmulatorAndWait(buildTextPdus(aDcs)) 1.110 + .then((results) => verifyTextMessage(results[0].message, aClass)); 1.111 +} 1.112 + 1.113 +function testBinary(aDcs) { 1.114 + log("testBinary(): aDcs = " + aDcs); 1.115 + return sendMultipleRawSmsToEmulatorAndWait(buildBinaryPdus(aDcs)) 1.116 + .then((results) => verifyBinaryMessage(results[0].message)); 1.117 +} 1.118 + 1.119 +SpecialPowers.pushPrefEnv( 1.120 + {"set": [["dom.mms.retrieval_mode", "manual"]]}, 1.121 + function startTest() { 1.122 + startTestCommon(function testCaseMain() { 1.123 + return Promise.resolve() 1.124 + .then(() => testText(PDU_DCS_NORMAL_UCS2, "normal")) 1.125 + .then(() => testText(PDU_DCS_CLASS0_UCS2, "class-0")) 1.126 + .then(() => testBinary(PDU_DCS_NORMAL_8BIT)) 1.127 + .then(() => testBinary(PDU_DCS_CLASS0_8BIT)); 1.128 + }); 1.129 + } 1.130 +);