Bug 807783 - Develop test to verify filtering SMS messages by delivery, update manifest; r=jgriffin
authorRob Wood <rwood@mozilla.com>
Tue, 06 Nov 2012 16:42:01 -0500
changeset 113284 0c22f08662e08ab8758b1ae7c640ff634beadc01
parent 113283 9992b91433a36ac34bc61be551d789ed30198526
child 113285 606325d07fe1a9b3473dc01bcff50de0bf3c6f53
push id18060
push userjgriffin@mozilla.com
push dateWed, 14 Nov 2012 21:36:36 +0000
treeherdermozilla-inbound@0c22f08662e0 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjgriffin
bugs807783
milestone19.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 807783 - Develop test to verify filtering SMS messages by delivery, update manifest; r=jgriffin
dom/sms/tests/marionette/manifest.ini
dom/sms/tests/marionette/test_filter_received.js
dom/sms/tests/marionette/test_filter_sent.js
--- a/dom/sms/tests/marionette/manifest.ini
+++ b/dom/sms/tests/marionette/manifest.ini
@@ -6,11 +6,13 @@ qemu = true
 ;[test_between_emulators.py]
 [test_incoming.js]
 [test_outgoing.js]
 [test_message_classes.js]
 [test_incoming_delete.js]
 [test_outgoing_delete.js]
 [test_getmessage.js]
 [test_getmessage_notfound.js]
+[test_filter_received.js]
+[test_filter_sent.js]
 [test_filter_read.js]
 [test_filter_unread.js]
 [test_number_of_messages.js]
new file mode 100644
--- /dev/null
+++ b/dom/sms/tests/marionette/test_filter_received.js
@@ -0,0 +1,241 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 20000;
+
+SpecialPowers.addPermission("sms", true, document);
+SpecialPowers.setBoolPref("dom.sms.enabled", true);
+
+let sms = window.navigator.mozSms;
+let numberMsgs = 10;
+let smsList = new Array();
+
+function verifyInitialState() {
+  log("Verifying initial state.");
+  ok(sms, "mozSms");
+  // Ensure test is starting clean with no existing sms messages
+  deleteAllMsgs(simulateIncomingSms);
+}
+
+function deleteAllMsgs(nextFunction) {
+  let msgList = new Array();
+  let filter = new MozSmsFilter;
+
+  let request = sms.getMessages(filter, false);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    ok(event.target.result, "smsrequest event.target.result");
+    cursor = event.target.result;
+    // Check if message was found
+    if (cursor.message) {
+      msgList.push(cursor.message.id);
+      // Now get next message in the list
+      cursor.continue();
+    } else {
+      // No (more) messages found
+      if (msgList.length) {
+        log("Found " + msgList.length + " SMS messages to delete.");
+        deleteMsgs(msgList, nextFunction);
+      } else {
+        log("No SMS messages found.");
+        nextFunction();
+      }
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    log("sms.getMessages error: " + event.target.error.name);
+    ok(false,"Could not get SMS messages");
+    cleanUp();
+  };
+}
+
+function deleteMsgs(msgList, nextFunction) {
+  let smsId = msgList.shift();
+
+  log("Deleting SMS (id: " + smsId + ").");
+  let request = sms.delete(smsId);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    if (event.target.result) {
+      // Message deleted, continue until none are left
+      if (msgList.length) {
+        deleteMsgs(msgList, nextFunction);
+      } else {
+        log("Finished deleting SMS messages.");
+        nextFunction();
+      }
+    } else {
+      log("SMS delete failed.");
+      ok(false,"sms.delete request returned false");
+      cleanUp();
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    ok(false, "sms.delete request returned unexpected error: "
+        + event.target.error.name );
+    cleanUp();
+  };
+}
+
+function simulateIncomingSms() {
+  let text = "Incoming SMS number " + (smsList.length + 1);
+  let remoteNumber = "5552229797";
+
+  log("Simulating incoming SMS number " + (smsList.length + 1) + " of "
+      + (numberMsgs - 1) + ".");
+
+  // Simulate incoming sms sent from remoteNumber to our emulator
+  rcvdEmulatorCallback = false;
+  runEmulatorCmd("sms send " + remoteNumber + " " + text, function(result) {
+    is(result[0], "OK", "emulator callback");
+    rcvdEmulatorCallback = true;
+  });
+}
+
+// Callback for incoming sms
+sms.onreceived = function onreceived(event) {
+  log("Received 'onreceived' sms event.");
+  let incomingSms = event.message;
+  log("Received SMS (id: " + incomingSms.id + ").");
+
+  smsList.push(incomingSms);
+
+  // Wait for emulator to catch up before continuing
+  waitFor(nextRep,function() {
+    return(rcvdEmulatorCallback);
+  });
+};
+
+function nextRep() {
+  if (smsList.length < (numberMsgs - 1)) {
+    simulateIncomingSms();
+  } else {
+    // Now send one message also so the filter won't find all
+    sendSms();
+  }
+}
+
+function sendSms() {  
+  let gotSmsSent = false;
+  let gotRequestSuccess = false;
+  let remoteNumber = "5557779999";
+  let text = "Outgoing SMS brought to you by Firefox OS!";
+
+  log("Sending an SMS.");
+
+  sms.onsent = function(event) {
+    log("Received 'onsent' smsmanager event.");
+    gotSmsSent = true;
+    let sentSms = event.message;
+    log("Sent SMS (id: " + sentSms.id + ").");
+    is(sentSms.delivery, "sent", "delivery");
+    if (gotSmsSent && gotRequestSuccess) {
+      // Test the filter
+      getMsgs();
+    }
+  };
+
+  let request = sms.send(remoteNumber, text);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    if(event.target.result) {
+      gotRequestSuccess = true;
+      if (gotSmsSent && gotRequestSuccess) {
+        // Test the filter
+        getMsgs(); 
+      }
+    } else {
+      log("smsrequest returned false for sms.send");
+      ok(false,"SMS send failed");
+      cleanUp();
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    ok(false, "sms.send request returned unexpected error: "
+        + event.target.error.name );
+    cleanUp();
+  };
+}
+
+function getMsgs() {
+  var filter = new MozSmsFilter();
+  let foundSmsList = new Array();
+
+  // Set filter for received messages
+  filter.delivery = "received";
+
+  log("Getting the received SMS messages.");
+  let request = sms.getMessages(filter, false);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    ok(event.target.result, "smsrequest event.target.result");
+    cursor = event.target.result;
+
+    if (cursor.message) {
+      // Another message found
+      log("Got SMS (id: " + cursor.message.id + ").");
+      // Store found message
+      foundSmsList.push(cursor.message);
+      // Now get next message in the list
+      cursor.continue();
+    } else {
+      // No more messages; ensure correct number found
+      if (foundSmsList.length == smsList.length) {
+        log("SMS getMessages returned " + foundSmsList.length +
+            " messages as expected.");
+        verifyFoundMsgs(foundSmsList);
+      } else {
+        log("SMS getMessages returned " + foundSmsList.length +
+            " messages, but expected " + smsList.length + ".");
+        ok(false, "Incorrect number of messages returned by sms.getMessages");
+        deleteAllMsgs(cleanUp);
+      }
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    log("sms.getMessages error: " + event.target.error.name);
+    ok(false,"Could not get SMS messages");
+    cleanUp();
+  };
+}
+
+function verifyFoundMsgs(foundSmsList) {
+  for (var x = 0; x < foundSmsList.length; x++) {
+    is(foundSmsList[x].id, smsList[x].id, "id");
+    is(foundSmsList[x].delivery, "received", "delivery");
+  }
+  deleteAllMsgs(cleanUp);
+}
+
+function cleanUp() {
+  sms.onreceived = null;
+  SpecialPowers.removePermission("sms", document);
+  SpecialPowers.clearUserPref("dom.sms.enabled");
+  finish();
+}
+
+// Start the test
+verifyInitialState();
new file mode 100644
--- /dev/null
+++ b/dom/sms/tests/marionette/test_filter_sent.js
@@ -0,0 +1,238 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 20000;
+
+SpecialPowers.addPermission("sms", true, document);
+SpecialPowers.setBoolPref("dom.sms.enabled", true);
+
+let sms = window.navigator.mozSms;
+let numberMsgs = 10;
+let smsList = new Array();
+
+function verifyInitialState() {
+  log("Verifying initial state.");
+  ok(sms, "mozSms");
+  // Ensure test is starting clean with no existing sms messages
+  deleteAllMsgs(sendSms);
+}
+
+function deleteAllMsgs(nextFunction) {
+  let msgList = new Array();
+  let filter = new MozSmsFilter;
+
+  let request = sms.getMessages(filter, false);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    ok(event.target.result, "smsrequest event.target.result");
+    cursor = event.target.result;
+    // Check if message was found
+    if (cursor.message) {
+      msgList.push(cursor.message.id);
+      // Now get next message in the list
+      cursor.continue();
+    } else {
+      // No (more) messages found
+      if (msgList.length) {
+        log("Found " + msgList.length + " SMS messages to delete.");
+        deleteMsgs(msgList, nextFunction);
+      } else {
+        log("No SMS messages found.");
+        nextFunction();
+      }
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    log("sms.getMessages error: " + event.target.error.name);
+    ok(false,"Could not get SMS messages");
+    cleanUp();
+  };
+}
+
+function deleteMsgs(msgList, nextFunction) {
+  let smsId = msgList.shift();
+
+  log("Deleting SMS (id: " + smsId + ").");
+  let request = sms.delete(smsId);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    if (event.target.result) {
+      // Message deleted, continue until none are left
+      if (msgList.length) {
+        deleteMsgs(msgList, nextFunction);
+      } else {
+        log("Finished deleting SMS messages.");
+        nextFunction();
+      }
+    } else {
+      log("SMS delete failed.");
+      ok(false,"sms.delete request returned false");
+      cleanUp();
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    ok(false, "sms.delete request returned unexpected error: "
+        + event.target.error.name );
+    cleanUp();
+  };
+}
+
+function sendSms() {  
+  let gotSmsSent = false;
+  let gotRequestSuccess = false;
+  let remoteNumber = "5557779999";
+  let text = "Outgoing SMS brought to you by Firefox OS!";
+
+  log("Sending SMS " + (smsList.length + 1) + " of "
+      + (numberMsgs - 1) + ".");
+
+  sms.onsent = function(event) {
+    log("Received 'onsent' smsmanager event.");
+    gotSmsSent = true;
+    let sentSms = event.message;
+    log("Sent SMS (id: " + sentSms.id + ").");
+    is(sentSms.delivery, "sent", "delivery");
+    smsList.push(sentSms);
+    if (gotSmsSent && gotRequestSuccess) {
+      nextRep();
+    }
+  };
+
+  let request = sms.send(remoteNumber, text);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    if(event.target.result) {
+      gotRequestSuccess = true;
+      if (gotSmsSent && gotRequestSuccess) {
+        nextRep(); 
+      }
+    } else {
+      log("smsrequest returned false for sms.send");
+      ok(false,"SMS send failed");
+      cleanUp();
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    ok(false, "sms.send request returned unexpected error: "
+        + event.target.error.name );
+    cleanUp();
+  };
+}
+
+function nextRep() {
+  if (smsList.length < (numberMsgs - 1)) {
+    sendSms();
+  } else {
+    // Now receive one message so filter won't find all
+    simulateIncomingSms();
+  }
+}
+
+function simulateIncomingSms() {
+  let text = "Incoming SMS number " + (smsList.length + 1);
+  let remoteNumber = "5552229797";
+
+  log("Simulating incoming SMS.");
+
+  // Simulate incoming sms sent from remoteNumber to our emulator
+  rcvdEmulatorCallback = false;
+  runEmulatorCmd("sms send " + remoteNumber + " " + text, function(result) {
+    is(result[0], "OK", "emulator callback");
+    rcvdEmulatorCallback = true;
+  });
+}
+
+// Callback for incoming sms
+sms.onreceived = function onreceived(event) {
+  log("Received 'onreceived' sms event.");
+  let incomingSms = event.message;
+  log("Received SMS (id: " + incomingSms.id + ").");
+
+  // Wait for emulator to catch up before continuing
+  waitFor(getMsgs,function() {
+    return(rcvdEmulatorCallback);
+  });
+};
+
+function getMsgs() {
+  var filter = new MozSmsFilter();
+  let foundSmsList = new Array();
+
+  // Set filter for sent messages
+  filter.delivery = "sent";
+
+  log("Getting the sent SMS messages.");
+  let request = sms.getMessages(filter, false);
+  ok(request instanceof MozSmsRequest,
+      "request is instanceof " + request.constructor);
+
+  request.onsuccess = function(event) {
+    log("Received 'onsuccess' smsrequest event.");
+    ok(event.target.result, "smsrequest event.target.result");
+    cursor = event.target.result;
+
+    if (cursor.message) {
+      // Another message found
+      log("Got SMS (id: " + cursor.message.id + ").");
+      // Store found message
+      foundSmsList.push(cursor.message);
+      // Now get next message in the list
+      cursor.continue();
+    } else {
+      // No more messages; ensure correct number found
+      if (foundSmsList.length == smsList.length) {
+        log("SMS getMessages returned " + foundSmsList.length +
+            " messages as expected.");
+        verifyFoundMsgs(foundSmsList);
+      } else {
+        log("SMS getMessages returned " + foundSmsList.length +
+            " messages, but expected " + smsList.length + ".");
+        ok(false, "Incorrect number of messages returned by sms.getMessages");
+        deleteAllMsgs(cleanUp);
+      }
+    }
+  };
+
+  request.onerror = function(event) {
+    log("Received 'onerror' smsrequest event.");
+    ok(event.target.error, "domerror obj");
+    log("sms.getMessages error: " + event.target.error.name);
+    ok(false,"Could not get SMS messages");
+    cleanUp();
+  };
+}
+
+function verifyFoundMsgs(foundSmsList) {
+  for (var x = 0; x < foundSmsList.length; x++) {
+    is(foundSmsList[x].id, smsList[x].id, "id");
+    is(foundSmsList[x].delivery, "sent", "delivery");
+  }
+  deleteAllMsgs(cleanUp);
+}
+
+function cleanUp() {
+  sms.onreceived = null;
+  SpecialPowers.removePermission("sms", document);
+  SpecialPowers.clearUserPref("dom.sms.enabled");
+  finish();
+}
+
+// Start the test
+verifyInitialState();