dom/mobilemessage/tests/marionette/test_massive_incoming_delete.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;
     6 SpecialPowers.setBoolPref("dom.sms.enabled", true);
     7 SpecialPowers.addPermission("sms", true, document);
     9 const SENDER = "5555552368"; // the remote number
    10 const RECEIVER = "15555215554"; // the emulator's number
    12 let manager = window.navigator.mozMobileMessage;
    13 let MSG_TEXT = "Mozilla Firefox OS!";
    14 let SMS_NUMBER = 100;
    16 let SmsList = [];
    17 let checkDone = true;
    18 let emulatorReady = true;
    20 let pendingEmulatorCmdCount = 0;
    21 function sendSmsToEmulator(from, text) {
    22   ++pendingEmulatorCmdCount;
    24   let cmd = "sms send " + from + " " + text;
    25   runEmulatorCmd(cmd, function(result) {
    26     --pendingEmulatorCmdCount;
    28     is(result[0], "OK", "Emulator response");
    29   });
    30 }
    32 let tasks = {
    33   // List of test fuctions. Each of them should call |tasks.next()| when
    34   // completed or |tasks.finish()| to jump to the last one.
    35   _tasks: [],
    36   _nextTaskIndex: 0,
    38   push: function(func) {
    39     this._tasks.push(func);
    40   },
    42   next: function() {
    43     let index = this._nextTaskIndex++;
    44     let task = this._tasks[index];
    45     try {
    46       task();
    47     } catch (ex) {
    48       ok(false, "test task[" + index + "] throws: " + ex);
    49       // Run last task as clean up if possible.
    50       if (index != this._tasks.length - 1) {
    51         this.finish();
    52       }
    53     }
    54   },
    56   finish: function() {
    57     this._tasks[this._tasks.length - 1]();
    58   },
    60   run: function() {
    61     this.next();
    62   }
    63 };
    65 function taskNextWrapper() {
    66   tasks.next();
    67 }
    69 function verifySmsExists(incomingSms) {
    70   log("Getting SMS (id: " + incomingSms.id + ").");
    71   let requestRet = manager.getMessage(incomingSms.id);
    72   ok(requestRet, "smsrequest obj returned");
    74   requestRet.onsuccess = function(event) {
    75     log("Received 'onsuccess' smsrequest event.");
    76     ok(event.target.result, "smsrequest event.target.result");
    77     let foundSms = event.target.result;
    78     is(foundSms.id, incomingSms.id, "found SMS id matches");
    79     is(foundSms.threadId, incomingSms.threadId, "found SMS thread id matches");
    80     is(foundSms.body, MSG_TEXT, "found SMS msg text matches");
    81     is(foundSms.delivery, "received", "delivery");
    82     is(foundSms.deliveryStatus, "success", "deliveryStatus");
    83     is(foundSms.read, false, "read");
    84     is(foundSms.receiver, RECEIVER, "receiver");
    85     is(foundSms.sender, SENDER, "sender");
    86     is(foundSms.messageClass, "normal", "messageClass");
    87     log("Got SMS (id: " + foundSms.id + ") as expected.");
    89     SmsList.push(incomingSms);
    90   };
    92   requestRet.onerror = function(event) {
    93     log("Received 'onerror' smsrequest event.");
    94     ok(event.target.error, "domerror obj");
    95     is(event.target.error.name, "NotFoundError", "error returned");
    96     log("Could not get SMS (id: " + incomingSms.id + ") but should have.");
    97     ok(false,"SMS was not found");
    98     tasks.finish();
    99   };
   100 }
   102 let verifDeletedCount = 0;
   103 function verifySmsDeleted(smsId) {
   104   log("Getting SMS (id: " + smsId + ").");
   105   let requestRet = manager.getMessage(smsId);
   106   ok(requestRet, "smsrequest obj returned");
   108   requestRet.onsuccess = function(event) {
   109     log("Received 'onsuccess' smsrequest event.");
   110     ok(event.target.result, "smsrequest event.target.result");
   111     let foundSms = event.target.result;
   112     is(foundSms.id, smsId, "found SMS id matches");
   113     is(foundSms.body, MSG_TEXT, "found SMS msg text matches");
   114     log("Got SMS (id: " + foundSms.id + ") but should not have.");
   115     ok(false, "SMS was not deleted");
   116     tasks.finish();
   117   };
   119   requestRet.onerror = function(event) {
   120     log("Received 'onerror' smsrequest event.");
   121     ok(event.target.error, "domerror obj");
   122     is(event.target.error.name, "NotFoundError", "error returned");
   123     log("Could not get SMS (id: " + smsId + ") as expected.");
   124     verifDeletedCount++;
   125   };
   126 }
   128 tasks.push(function init() {
   129   log("Initialize test object.");
   130   ok(manager instanceof MozMobileMessageManager,
   131      "manager is instance of " + manager.constructor);
   133   // Callback for incoming sms
   134   manager.onreceived = function onreceived(event) {
   135     log("Received 'onreceived' event.");
   136     let incomingSms = event.message;
   137     ok(incomingSms, "incoming sms");
   138     ok(incomingSms.id, "sms id");
   139     log("Received SMS (id: " + incomingSms.id + ").");
   140     ok(incomingSms.threadId, "thread id");
   141     is(incomingSms.body, MSG_TEXT, "msg body");
   142     is(incomingSms.delivery, "received", "delivery");
   143     is(incomingSms.deliveryStatus, "success", "deliveryStatus");
   144     is(incomingSms.read, false, "read");
   145     is(incomingSms.receiver, RECEIVER, "receiver");
   146     is(incomingSms.sender, SENDER, "sender");
   147     is(incomingSms.messageClass, "normal", "messageClass");
   148     is(incomingSms.deliveryTimestamp, 0, "deliveryTimestamp is 0");
   150     verifySmsExists(incomingSms);
   151   };
   153   tasks.next();
   154 });
   156 tasks.push(function sendAllSms() {
   157   log("Send " + SMS_NUMBER + " SMS");
   158   for (let i = 0; i < SMS_NUMBER; i++) {
   159     sendSmsToEmulator(SENDER, MSG_TEXT);
   160   }
   162   waitFor(taskNextWrapper, function() {
   163     return (pendingEmulatorCmdCount === 0) && (SmsList.length === SMS_NUMBER);
   164   });
   165 });
   167 tasks.push(function deleteAllSms() {
   168   log("Deleting SMS using smsmsg obj array parameter.");
   169   let deleteStart = Date.now();
   170   log("deleteStart: " + deleteStart);
   171   log("SmsList: " + JSON.stringify(SmsList));
   172   let requestRet = manager.delete(SmsList);
   173   ok(requestRet,"smsrequest obj returned");
   175   requestRet.onsuccess = function(event) {
   176     let deleteDone = Date.now();
   177     log("Delete " + SMS_NUMBER + " SMS takes " + (deleteDone - deleteStart) + " ms.");
   178     log("Received 'onsuccess' smsrequest event.");
   179     if (event.target.result) {
   180       for (let i = 0; i < SmsList.length; i++) {
   181         verifySmsDeleted(SmsList[i].id);
   182       }
   183     } else {
   184       log("smsrequest returned false for manager.delete");
   185       ok(false, "SMS delete failed");
   186     }
   187   };
   189   requestRet.onerror = function(event) {
   190     log("Received 'onerror' smsrequest event.");
   191     ok(event.target.error, "domerror obj");
   192     ok(false, "manager.delete request returned unexpected error: "
   193         + event.target.error.name);
   194     tasks.finish();
   195   };
   197   waitFor(taskNextWrapper, function() {
   198     return verifDeletedCount === SMS_NUMBER;
   199   });
   200 });
   202 // WARNING: All tasks should be pushed before this!!!
   203 tasks.push(function cleanUp() {
   204   if (pendingEmulatorCmdCount) {
   205     window.setTimeout(cleanUp, 100);
   206     return;
   207   }
   209   manager.onreceived = null;
   210   SpecialPowers.removePermission("sms", document);
   211   SpecialPowers.setBoolPref("dom.sms.enabled", false);
   212   log("Finish!!!");
   213   finish();
   214 });
   216 // Start the test
   217 tasks.run();

mercurial