1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/mobilemessage/tests/marionette/test_massive_incoming_delete.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,217 @@ 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 + 1.9 +SpecialPowers.setBoolPref("dom.sms.enabled", true); 1.10 +SpecialPowers.addPermission("sms", true, document); 1.11 + 1.12 +const SENDER = "5555552368"; // the remote number 1.13 +const RECEIVER = "15555215554"; // the emulator's number 1.14 + 1.15 +let manager = window.navigator.mozMobileMessage; 1.16 +let MSG_TEXT = "Mozilla Firefox OS!"; 1.17 +let SMS_NUMBER = 100; 1.18 + 1.19 +let SmsList = []; 1.20 +let checkDone = true; 1.21 +let emulatorReady = true; 1.22 + 1.23 +let pendingEmulatorCmdCount = 0; 1.24 +function sendSmsToEmulator(from, text) { 1.25 + ++pendingEmulatorCmdCount; 1.26 + 1.27 + let cmd = "sms send " + from + " " + text; 1.28 + runEmulatorCmd(cmd, function(result) { 1.29 + --pendingEmulatorCmdCount; 1.30 + 1.31 + is(result[0], "OK", "Emulator response"); 1.32 + }); 1.33 +} 1.34 + 1.35 +let tasks = { 1.36 + // List of test fuctions. Each of them should call |tasks.next()| when 1.37 + // completed or |tasks.finish()| to jump to the last one. 1.38 + _tasks: [], 1.39 + _nextTaskIndex: 0, 1.40 + 1.41 + push: function(func) { 1.42 + this._tasks.push(func); 1.43 + }, 1.44 + 1.45 + next: function() { 1.46 + let index = this._nextTaskIndex++; 1.47 + let task = this._tasks[index]; 1.48 + try { 1.49 + task(); 1.50 + } catch (ex) { 1.51 + ok(false, "test task[" + index + "] throws: " + ex); 1.52 + // Run last task as clean up if possible. 1.53 + if (index != this._tasks.length - 1) { 1.54 + this.finish(); 1.55 + } 1.56 + } 1.57 + }, 1.58 + 1.59 + finish: function() { 1.60 + this._tasks[this._tasks.length - 1](); 1.61 + }, 1.62 + 1.63 + run: function() { 1.64 + this.next(); 1.65 + } 1.66 +}; 1.67 + 1.68 +function taskNextWrapper() { 1.69 + tasks.next(); 1.70 +} 1.71 + 1.72 +function verifySmsExists(incomingSms) { 1.73 + log("Getting SMS (id: " + incomingSms.id + ")."); 1.74 + let requestRet = manager.getMessage(incomingSms.id); 1.75 + ok(requestRet, "smsrequest obj returned"); 1.76 + 1.77 + requestRet.onsuccess = function(event) { 1.78 + log("Received 'onsuccess' smsrequest event."); 1.79 + ok(event.target.result, "smsrequest event.target.result"); 1.80 + let foundSms = event.target.result; 1.81 + is(foundSms.id, incomingSms.id, "found SMS id matches"); 1.82 + is(foundSms.threadId, incomingSms.threadId, "found SMS thread id matches"); 1.83 + is(foundSms.body, MSG_TEXT, "found SMS msg text matches"); 1.84 + is(foundSms.delivery, "received", "delivery"); 1.85 + is(foundSms.deliveryStatus, "success", "deliveryStatus"); 1.86 + is(foundSms.read, false, "read"); 1.87 + is(foundSms.receiver, RECEIVER, "receiver"); 1.88 + is(foundSms.sender, SENDER, "sender"); 1.89 + is(foundSms.messageClass, "normal", "messageClass"); 1.90 + log("Got SMS (id: " + foundSms.id + ") as expected."); 1.91 + 1.92 + SmsList.push(incomingSms); 1.93 + }; 1.94 + 1.95 + requestRet.onerror = function(event) { 1.96 + log("Received 'onerror' smsrequest event."); 1.97 + ok(event.target.error, "domerror obj"); 1.98 + is(event.target.error.name, "NotFoundError", "error returned"); 1.99 + log("Could not get SMS (id: " + incomingSms.id + ") but should have."); 1.100 + ok(false,"SMS was not found"); 1.101 + tasks.finish(); 1.102 + }; 1.103 +} 1.104 + 1.105 +let verifDeletedCount = 0; 1.106 +function verifySmsDeleted(smsId) { 1.107 + log("Getting SMS (id: " + smsId + ")."); 1.108 + let requestRet = manager.getMessage(smsId); 1.109 + ok(requestRet, "smsrequest obj returned"); 1.110 + 1.111 + requestRet.onsuccess = function(event) { 1.112 + log("Received 'onsuccess' smsrequest event."); 1.113 + ok(event.target.result, "smsrequest event.target.result"); 1.114 + let foundSms = event.target.result; 1.115 + is(foundSms.id, smsId, "found SMS id matches"); 1.116 + is(foundSms.body, MSG_TEXT, "found SMS msg text matches"); 1.117 + log("Got SMS (id: " + foundSms.id + ") but should not have."); 1.118 + ok(false, "SMS was not deleted"); 1.119 + tasks.finish(); 1.120 + }; 1.121 + 1.122 + requestRet.onerror = function(event) { 1.123 + log("Received 'onerror' smsrequest event."); 1.124 + ok(event.target.error, "domerror obj"); 1.125 + is(event.target.error.name, "NotFoundError", "error returned"); 1.126 + log("Could not get SMS (id: " + smsId + ") as expected."); 1.127 + verifDeletedCount++; 1.128 + }; 1.129 +} 1.130 + 1.131 +tasks.push(function init() { 1.132 + log("Initialize test object."); 1.133 + ok(manager instanceof MozMobileMessageManager, 1.134 + "manager is instance of " + manager.constructor); 1.135 + 1.136 + // Callback for incoming sms 1.137 + manager.onreceived = function onreceived(event) { 1.138 + log("Received 'onreceived' event."); 1.139 + let incomingSms = event.message; 1.140 + ok(incomingSms, "incoming sms"); 1.141 + ok(incomingSms.id, "sms id"); 1.142 + log("Received SMS (id: " + incomingSms.id + ")."); 1.143 + ok(incomingSms.threadId, "thread id"); 1.144 + is(incomingSms.body, MSG_TEXT, "msg body"); 1.145 + is(incomingSms.delivery, "received", "delivery"); 1.146 + is(incomingSms.deliveryStatus, "success", "deliveryStatus"); 1.147 + is(incomingSms.read, false, "read"); 1.148 + is(incomingSms.receiver, RECEIVER, "receiver"); 1.149 + is(incomingSms.sender, SENDER, "sender"); 1.150 + is(incomingSms.messageClass, "normal", "messageClass"); 1.151 + is(incomingSms.deliveryTimestamp, 0, "deliveryTimestamp is 0"); 1.152 + 1.153 + verifySmsExists(incomingSms); 1.154 + }; 1.155 + 1.156 + tasks.next(); 1.157 +}); 1.158 + 1.159 +tasks.push(function sendAllSms() { 1.160 + log("Send " + SMS_NUMBER + " SMS"); 1.161 + for (let i = 0; i < SMS_NUMBER; i++) { 1.162 + sendSmsToEmulator(SENDER, MSG_TEXT); 1.163 + } 1.164 + 1.165 + waitFor(taskNextWrapper, function() { 1.166 + return (pendingEmulatorCmdCount === 0) && (SmsList.length === SMS_NUMBER); 1.167 + }); 1.168 +}); 1.169 + 1.170 +tasks.push(function deleteAllSms() { 1.171 + log("Deleting SMS using smsmsg obj array parameter."); 1.172 + let deleteStart = Date.now(); 1.173 + log("deleteStart: " + deleteStart); 1.174 + log("SmsList: " + JSON.stringify(SmsList)); 1.175 + let requestRet = manager.delete(SmsList); 1.176 + ok(requestRet,"smsrequest obj returned"); 1.177 + 1.178 + requestRet.onsuccess = function(event) { 1.179 + let deleteDone = Date.now(); 1.180 + log("Delete " + SMS_NUMBER + " SMS takes " + (deleteDone - deleteStart) + " ms."); 1.181 + log("Received 'onsuccess' smsrequest event."); 1.182 + if (event.target.result) { 1.183 + for (let i = 0; i < SmsList.length; i++) { 1.184 + verifySmsDeleted(SmsList[i].id); 1.185 + } 1.186 + } else { 1.187 + log("smsrequest returned false for manager.delete"); 1.188 + ok(false, "SMS delete failed"); 1.189 + } 1.190 + }; 1.191 + 1.192 + requestRet.onerror = function(event) { 1.193 + log("Received 'onerror' smsrequest event."); 1.194 + ok(event.target.error, "domerror obj"); 1.195 + ok(false, "manager.delete request returned unexpected error: " 1.196 + + event.target.error.name); 1.197 + tasks.finish(); 1.198 + }; 1.199 + 1.200 + waitFor(taskNextWrapper, function() { 1.201 + return verifDeletedCount === SMS_NUMBER; 1.202 + }); 1.203 +}); 1.204 + 1.205 +// WARNING: All tasks should be pushed before this!!! 1.206 +tasks.push(function cleanUp() { 1.207 + if (pendingEmulatorCmdCount) { 1.208 + window.setTimeout(cleanUp, 100); 1.209 + return; 1.210 + } 1.211 + 1.212 + manager.onreceived = null; 1.213 + SpecialPowers.removePermission("sms", document); 1.214 + SpecialPowers.setBoolPref("dom.sms.enabled", false); 1.215 + log("Finish!!!"); 1.216 + finish(); 1.217 +}); 1.218 + 1.219 +// Start the test 1.220 +tasks.run();