dom/mobilemessage/tests/marionette/test_mt_sms_concatenation.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/ */
     4 MARIONETTE_TIMEOUT = 60000;
     5 MARIONETTE_HEAD_JS = 'head.js';
     7 const PDU_SMSC_NONE = "00"; // no SMSC Address
     9 const PDU_FIRST_OCTET = "40"; // RP:no, UDHI:yes, SRI:no, MMS:no, MTI:SMS-DELIVER
    11 const PDU_SENDER = "0A912143658709"; // +1234567890
    12 const SENDER = "+1234567890";
    14 const PDU_PID_NORMAL = "00";
    16 const PDU_DCS_NORMAL_UCS2 = "08";
    17 const PDU_DCS_CLASS0_UCS2 = "18";
    18 const PDU_DCS_NORMAL_8BIT = "04";
    19 const PDU_DCS_CLASS0_8BIT = "14";
    21 const PDU_TIMESTAMP = "00101000000000"; // 2000/01/01
    23 function byteValueToHexString(aValue) {
    24   let str = Number(aValue).toString(16).toUpperCase();
    25   return str.length == 1 ? "0" + str : str;
    26 }
    28 let ref_num = 0;
    29 function buildTextPdus(aDcs) {
    30   ref_num++;
    32   let IEI_CONCATE_1 = "0003" + byteValueToHexString(ref_num) + "0301";
    33   let IEI_CONCATE_2 = "0003" + byteValueToHexString(ref_num) + "0302";
    34   let IEI_CONCATE_3 = "0003" + byteValueToHexString(ref_num) + "0303";
    35   let PDU_UDL = "08"; // UDHL(1) + UDH(5) + UCS2 Char (2)
    36   let PDU_UDHL = "05";
    38   let PDU_UD_A = "0041"; // "A"
    39   let PDU_UD_B = "0042"; // "B"
    40   let PDU_UD_C = "0043"; // "C"
    42   let PDU_COMMON = PDU_SMSC_NONE + PDU_FIRST_OCTET + PDU_SENDER +
    43     PDU_PID_NORMAL + aDcs + PDU_TIMESTAMP + PDU_UDL + PDU_UDHL;
    45   return [
    46     PDU_COMMON + IEI_CONCATE_1 + PDU_UD_A,
    47     PDU_COMMON + IEI_CONCATE_2 + PDU_UD_B,
    48     PDU_COMMON + IEI_CONCATE_3 + PDU_UD_C
    49   ];
    50 }
    52 function buildBinaryPdus(aDcs) {
    53   ref_num++;
    54   let IEI_PORT = "05040B8423F0";
    56   let PDU_DATA1 = "C106316170706C69636174696F6E2F76" +
    57                   "6E642E7761702E6D6D732D6D65737361" +
    58                   "676500B131302E382E3133302E313800" +
    59                   "AF84B4818C82986B4430595538595347" +
    60                   "77464E446741416B4876736C58303141" +
    61                   "41414141414141008D90890380310096" +
    62                   "05EA4D4D53008A808E02024188058103" +
    63                   "015F9083687474703A2F2F6D6D732E65";
    65   let PDU_DATA2 = "6D6F6D652E6E65743A383030322F6B44" +
    66                   "3059553859534777464E446741416B48" +
    67                   "76736C583031414141414141414100";
    69   let PDU_COMMON = PDU_SMSC_NONE + PDU_FIRST_OCTET + PDU_SENDER +
    70     PDU_PID_NORMAL + aDcs + PDU_TIMESTAMP;
    72   function construstBinaryUserData(aBinaryData, aSeqNum) {
    73     let ieiConcat = "0003" + byteValueToHexString(ref_num) + "02" +
    74                     byteValueToHexString(aSeqNum);
    76     let udh = IEI_PORT + ieiConcat;
    77     let udhl = byteValueToHexString(udh.length / 2);
    78     let ud = udhl + udh + aBinaryData;
    79     let udl = byteValueToHexString(ud.length / 2);
    81     return udl + ud;
    82   }
    84   return [
    85     PDU_COMMON + construstBinaryUserData(PDU_DATA1, 1),
    86     PDU_COMMON + construstBinaryUserData(PDU_DATA2, 2)
    87   ];
    88 }
    90 function verifyTextMessage(aMessage, aMessageClass) {
    91   is(aMessage.messageClass, aMessageClass, "SmsMessage class");
    92   is(aMessage.sender, SENDER, "SmsMessage sender");
    93   is(aMessage.body, "ABC", "SmsMessage body");
    94 }
    96 function verifyBinaryMessage(aMessage) {
    97   is(aMessage.type, "mms", "MmsMessage type");
    98   is(aMessage.delivery, "not-downloaded", "MmsMessage delivery");
   100   // remove duplicated M-Notification.ind for next test.
   101   return deleteMessagesById([aMessage.id]);
   102 }
   104 function testText(aDcs, aClass) {
   105   log("testText(): aDcs = " + aDcs + ", aClass = " + aClass);
   106   return sendMultipleRawSmsToEmulatorAndWait(buildTextPdus(aDcs))
   107     .then((results) => verifyTextMessage(results[0].message, aClass));
   108 }
   110 function testBinary(aDcs) {
   111   log("testBinary(): aDcs = " + aDcs);
   112   return sendMultipleRawSmsToEmulatorAndWait(buildBinaryPdus(aDcs))
   113     .then((results) => verifyBinaryMessage(results[0].message));
   114 }
   116 SpecialPowers.pushPrefEnv(
   117   {"set": [["dom.mms.retrieval_mode", "manual"]]},
   118   function startTest() {
   119     startTestCommon(function testCaseMain() {
   120       return Promise.resolve()
   121         .then(() => testText(PDU_DCS_NORMAL_UCS2, "normal"))
   122         .then(() => testText(PDU_DCS_CLASS0_UCS2, "class-0"))
   123         .then(() => testBinary(PDU_DCS_NORMAL_8BIT))
   124         .then(() => testBinary(PDU_DCS_CLASS0_8BIT));
   125     });
   126   }
   127 );

mercurial