diff options
Diffstat (limited to 'toolkit/components/timermanager/tests/unit/consumerNotifications.js')
-rw-r--r-- | toolkit/components/timermanager/tests/unit/consumerNotifications.js | 519 |
1 files changed, 0 insertions, 519 deletions
diff --git a/toolkit/components/timermanager/tests/unit/consumerNotifications.js b/toolkit/components/timermanager/tests/unit/consumerNotifications.js deleted file mode 100644 index b9926e11e..000000000 --- a/toolkit/components/timermanager/tests/unit/consumerNotifications.js +++ /dev/null @@ -1,519 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -/* General Update Timer Manager Tests */ - -'use strict'; - -const { classes: Cc, interfaces: Ci, manager: Cm, results: Cr, - utils: Cu } = Components; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); - -const CATEGORY_UPDATE_TIMER = "update-timer"; - -const PREF_APP_UPDATE_TIMERMINIMUMDELAY = "app.update.timerMinimumDelay"; -const PREF_APP_UPDATE_TIMERFIRSTINTERVAL = "app.update.timerFirstInterval"; -const PREF_APP_UPDATE_LOG_ALL = "app.update.log.all"; -const PREF_BRANCH_LAST_UPDATE_TIME = "app.update.lastUpdateTime."; - -const MAIN_TIMER_INTERVAL = 1000; // milliseconds -const CONSUMER_TIMER_INTERVAL = 1; // seconds - -const TESTS = [ { - desc: "Test Timer Callback 0", - timerID: "test0-update-timer", - defaultInterval: "bogus", - prefInterval: "test0.timer.interval", - contractID: "@mozilla.org/test0/timercallback;1", - method: "createInstance", - classID: Components.ID("9c7ce81f-98bb-4729-adb4-4d0deb0f59e5"), - notified: false -}, { - desc: "Test Timer Callback 1", - timerID: "test1-update-timer", - defaultInterval: 86400, - prefInterval: "test1.timer.interval", - contractID: "@mozilla.org/test2/timercallback;1", - method: "createInstance", - classID: Components.ID("512834f3-05bb-46be-84e0-81d881a140b7"), - notified: false -}, { - desc: "Test Timer Callback 2", - timerID: "test2-update-timer", - defaultInterval: CONSUMER_TIMER_INTERVAL, - prefInterval: "test2.timer.interval", - contractID: "@mozilla.org/test2/timercallback;1", - method: "createInstance", - classID: Components.ID("c8ac5027-8d11-4471-9d7c-fd692501b437"), - notified: false -}, { - desc: "Test Timer Callback 3", - timerID: "test3-update-timer", - defaultInterval: CONSUMER_TIMER_INTERVAL, - prefInterval: "test3.timer.interval", - contractID: "@mozilla.org/test3/timercallback;1", - method: "createInstance", - classID: Components.ID("6b0e79f3-4ab8-414c-8f14-dde10e185727"), - notified: false -}, { - desc: "Test Timer Callback 4", - timerID: "test4-update-timer", - defaultInterval: CONSUMER_TIMER_INTERVAL, - prefInterval: "test4.timer.interval", - contractID: "@mozilla.org/test4/timercallback;1", - method: "createInstance", - classID: Components.ID("2f6b7b92-e40f-4874-bfbb-eeb2412c959d"), - notified: false -}, { - desc: "Test Timer Callback 5", - timerID: "test5-update-timer", - defaultInterval: 86400, - prefInterval: "test5.timer.interval", - contractID: "@mozilla.org/test5/timercallback;1", - method: "createInstance", - classID: Components.ID("8a95f611-b2ac-4c7e-8b73-9748c4839731"), - notified: false -}, { - desc: "Test Timer Callback 6", - timerID: "test6-update-timer", - defaultInterval: CONSUMER_TIMER_INTERVAL, - prefInterval: "test6.timer.interval", - contractID: "@mozilla.org/test6/timercallback;1", - method: "createInstance", - classID: Components.ID("2d091020-e23c-11e2-a28f-0800200c9a66"), - notified: false -}, { - desc: "Test Timer Callback 7", - timerID: "test7-update-timer", - defaultInterval: 86400, - maxInterval: CONSUMER_TIMER_INTERVAL, - prefInterval: "test7.timer.interval", - contractID: "@mozilla.org/test7/timercallback;1", - method: "createInstance", - classID: Components.ID("8e8633ae-1d70-4a7a-8bea-6e1e6c5d7742"), - notified: false -}, { - desc: "Test Timer Callback 8", - timerID: "test8-update-timer", - defaultInterval: CONSUMER_TIMER_INTERVAL, - contractID: "@mozilla.org/test8/timercallback;1", - classID: Components.ID("af878d4b-1d12-41f6-9a90-4e687367ecc1"), - notified: false, - lastUpdateTime: 0 -}, { - desc: "Test Timer Callback 9", - timerID: "test9-update-timer", - defaultInterval: CONSUMER_TIMER_INTERVAL, - contractID: "@mozilla.org/test9/timercallback;1", - classID: Components.ID("5136b201-d64c-4328-8cf1-1a63491cc117"), - notified: false, - lastUpdateTime: 0 -} ]; - -var gUTM; -var gNextFunc; - -XPCOMUtils.defineLazyServiceGetter(this, "gPref", - "@mozilla.org/preferences-service;1", - "nsIPrefBranch"); - -XPCOMUtils.defineLazyServiceGetter(this, "gCatMan", - "@mozilla.org/categorymanager;1", - "nsICategoryManager"); - -XPCOMUtils.defineLazyGetter(this, "gCompReg", function () { - return Cm.QueryInterface(Ci.nsIComponentRegistrar); -}); - -const gTest0TimerCallback = { - notify: function T0CB_notify(aTimer) { - // This can happen when another notification fails and this timer having - // time to fire so check other timers are successful. - do_throw("gTest0TimerCallback notify method should not have been called"); - }, - QueryInterface: XPCOMUtils.generateQI([Ci.nsITimerCallback]) -}; - -const gTest0Factory = { - createInstance: function T0F_createInstance(aOuter, aIID) { - if (aOuter == null) { - return gTest0TimerCallback.QueryInterface(aIID); - } - throw Cr.NS_ERROR_NO_AGGREGATION; - } -}; - -const gTest1TimerCallback = { - notify: function T1CB_notify(aTimer) { - // This can happen when another notification fails and this timer having - // time to fire so check other timers are successful. - do_throw("gTest1TimerCallback notify method should not have been called"); - }, - QueryInterface: XPCOMUtils.generateQI([Ci.nsITimer]) -}; - -const gTest1Factory = { - createInstance: function T1F_createInstance(aOuter, aIID) { - if (aOuter == null) { - return gTest1TimerCallback.QueryInterface(aIID); - } - throw Cr.NS_ERROR_NO_AGGREGATION; - } -}; - -const gTest2TimerCallback = { - notify: function T2CB_notify(aTimer) { - // This can happen when another notification fails and this timer having - // time to fire so check other timers are successful. - do_throw("gTest2TimerCallback notify method should not have been called"); - }, - QueryInterface: XPCOMUtils.generateQI([Ci.nsITimerCallback]) -}; - -const gTest2Factory = { - createInstance: function T2F_createInstance(aOuter, aIID) { - if (aOuter == null) { - return gTest2TimerCallback.QueryInterface(aIID); - } - throw Cr.NS_ERROR_NO_AGGREGATION; - } -}; - -const gTest3TimerCallback = { - QueryInterface: XPCOMUtils.generateQI([Ci.nsITimerCallback]) -}; - -const gTest3Factory = { - createInstance: function T3F_createInstance(aOuter, aIID) { - if (aOuter == null) { - return gTest3TimerCallback.QueryInterface(aIID); - } - throw Cr.NS_ERROR_NO_AGGREGATION; - } -}; - -const gTest4TimerCallback = { - notify: function T4CB_notify(aTimer) { - gCatMan.deleteCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[4].desc, true); - TESTS[4].notified = true; - finished_test0thru7(); - }, - QueryInterface: XPCOMUtils.generateQI([Ci.nsITimerCallback]) -}; - -const gTest4Factory = { - createInstance: function T4F_createInstance(aOuter, aIID) { - if (aOuter == null) { - return gTest4TimerCallback.QueryInterface(aIID); - } - throw Cr.NS_ERROR_NO_AGGREGATION; - } -}; - -const gTest5TimerCallback = { - notify: function T5CB_notify(aTimer) { - gCatMan.deleteCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[5].desc, true); - TESTS[5].notified = true; - finished_test0thru7(); - }, - QueryInterface: XPCOMUtils.generateQI([Ci.nsITimerCallback]) -}; - -const gTest5Factory = { - createInstance: function T5F_createInstance(aOuter, aIID) { - if (aOuter == null) { - return gTest5TimerCallback.QueryInterface(aIID); - } - throw Cr.NS_ERROR_NO_AGGREGATION; - } -}; - -const gTest6TimerCallback = { - notify: function T6CB_notify(aTimer) { - gCatMan.deleteCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[6].desc, true); - TESTS[6].notified = true; - finished_test0thru7(); - }, - QueryInterface: XPCOMUtils.generateQI([Ci.nsITimerCallback]) -}; - -const gTest6Factory = { - createInstance: function T6F_createInstance(aOuter, aIID) { - if (aOuter == null) { - return gTest6TimerCallback.QueryInterface(aIID); - } - throw Cr.NS_ERROR_NO_AGGREGATION; - } -}; - -const gTest7TimerCallback = { - notify: function T7CB_notify(aTimer) { - gCatMan.deleteCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[7].desc, true); - TESTS[7].notified = true; - finished_test0thru7(); - }, - QueryInterface: XPCOMUtils.generateQI([Ci.nsITimerCallback]) -}; - -const gTest7Factory = { - createInstance: function T7F_createInstance(aOuter, aIID) { - if (aOuter == null) { - return gTest7TimerCallback.QueryInterface(aIID); - } - throw Cr.NS_ERROR_NO_AGGREGATION; - } -}; - -const gTest8TimerCallback = { - notify: function T8CB_notify(aTimer) { - TESTS[8].notified = true; - TESTS[8].notifyTime = Date.now(); - do_execute_soon(function () { - check_test8thru9(gTest8TimerCallback); - }); - }, - QueryInterface: XPCOMUtils.generateQI([Ci.nsITimerCallback]) -}; - -const gTest8Factory = { - createInstance: function T8F_createInstance(aOuter, aIID) { - if (aOuter == null) { - return gTest8TimerCallback.QueryInterface(aIID); - } - throw Cr.NS_ERROR_NO_AGGREGATION; - } -}; - -const gTest9TimerCallback = { - notify: function T9CB_notify(aTimer) { - TESTS[9].notified = true; - TESTS[9].notifyTime = Date.now(); - do_execute_soon(function () { - check_test8thru9(gTest9TimerCallback); - }); - }, - QueryInterface: XPCOMUtils.generateQI([Ci.nsITimerCallback]) -}; - -const gTest9Factory = { - createInstance: function T9F_createInstance(aOuter, aIID) { - if (aOuter == null) { - return gTest9TimerCallback.QueryInterface(aIID); - } - throw Cr.NS_ERROR_NO_AGGREGATION; - } -}; - -function run_test() { - do_test_pending(); - - // Set the timer to fire every second - gPref.setIntPref(PREF_APP_UPDATE_TIMERMINIMUMDELAY, MAIN_TIMER_INTERVAL / 1000); - gPref.setIntPref(PREF_APP_UPDATE_TIMERFIRSTINTERVAL, MAIN_TIMER_INTERVAL); - gPref.setBoolPref(PREF_APP_UPDATE_LOG_ALL, true); - - // Remove existing update timers to prevent them from being notified - let entries = gCatMan.enumerateCategory(CATEGORY_UPDATE_TIMER); - while (entries.hasMoreElements()) { - let entry = entries.getNext().QueryInterface(Ci.nsISupportsCString).data; - gCatMan.deleteCategoryEntry(CATEGORY_UPDATE_TIMER, entry, false); - } - - gUTM = Cc["@mozilla.org/updates/timer-manager;1"]. - getService(Ci.nsIUpdateTimerManager). - QueryInterface(Ci.nsIObserver); - gUTM.observe(null, "utm-test-init", ""); - - do_execute_soon(run_test0thru7); -} - -function end_test() { - gUTM.observe(null, "xpcom-shutdown", ""); - do_test_finished(); -} - -function run_test0thru7() { - gNextFunc = check_test0thru7; - // bogus default interval - gCompReg.registerFactory(TESTS[0].classID, TESTS[0].desc, - TESTS[0].contractID, gTest0Factory); - gCatMan.addCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[0].desc, - [TESTS[0].contractID, TESTS[0].method, - TESTS[0].timerID, TESTS[0].prefInterval, - TESTS[0].defaultInterval].join(","), false, true); - - // doesn't implement nsITimerCallback - gCompReg.registerFactory(TESTS[1].classID, TESTS[1].desc, - TESTS[1].contractID, gTest1Factory); - gCatMan.addCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[1].desc, - [TESTS[1].contractID, TESTS[1].method, - TESTS[1].timerID, TESTS[1].prefInterval, - TESTS[1].defaultInterval].join(","), false, true); - - // has a last update time of now - 43200 which is half of its interval - let lastUpdateTime = Math.round(Date.now() / 1000) - 43200; - gPref.setIntPref(PREF_BRANCH_LAST_UPDATE_TIME + TESTS[2].timerID, lastUpdateTime); - gCompReg.registerFactory(TESTS[2].classID, TESTS[2].desc, - TESTS[2].contractID, gTest2Factory); - gCatMan.addCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[2].desc, - [TESTS[2].contractID, TESTS[2].method, - TESTS[2].timerID, TESTS[2].prefInterval, - TESTS[2].defaultInterval].join(","), false, true); - - // doesn't have a notify method - gCompReg.registerFactory(TESTS[3].classID, TESTS[3].desc, - TESTS[3].contractID, gTest3Factory); - gCatMan.addCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[3].desc, - [TESTS[3].contractID, TESTS[3].method, - TESTS[3].timerID, TESTS[3].prefInterval, - TESTS[3].defaultInterval].join(","), false, true); - - // already has a last update time - gPref.setIntPref(PREF_BRANCH_LAST_UPDATE_TIME + TESTS[4].timerID, 1); - gCompReg.registerFactory(TESTS[4].classID, TESTS[4].desc, - TESTS[4].contractID, gTest4Factory); - gCatMan.addCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[4].desc, - [TESTS[4].contractID, TESTS[4].method, - TESTS[4].timerID, TESTS[4].prefInterval, - TESTS[4].defaultInterval].join(","), false, true); - - // has an interval preference that overrides the default - gPref.setIntPref(TESTS[5].prefInterval, CONSUMER_TIMER_INTERVAL); - gCompReg.registerFactory(TESTS[5].classID, TESTS[5].desc, - TESTS[5].contractID, gTest5Factory); - gCatMan.addCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[5].desc, - [TESTS[5].contractID, TESTS[5].method, - TESTS[5].timerID, TESTS[5].prefInterval, - TESTS[5].defaultInterval].join(","), false, true); - - // has a next update time 24 hours from now - let nextUpdateTime = Math.round(Date.now() / 1000) + 86400; - gPref.setIntPref(PREF_BRANCH_LAST_UPDATE_TIME + TESTS[6].timerID, nextUpdateTime); - gCompReg.registerFactory(TESTS[6].classID, TESTS[6].desc, - TESTS[6].contractID, gTest6Factory); - gCatMan.addCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[6].desc, - [TESTS[6].contractID, TESTS[6].method, - TESTS[6].timerID, TESTS[6].prefInterval, - TESTS[6].defaultInterval].join(","), false, true); - - // has a maximum interval set by the value of MAIN_TIMER_INTERVAL - gPref.setIntPref(TESTS[7].prefInterval, 86400); - gCompReg.registerFactory(TESTS[7].classID, TESTS[7].desc, - TESTS[7].contractID, gTest7Factory); - gCatMan.addCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[7].desc, - [TESTS[7].contractID, TESTS[7].method, - TESTS[7].timerID, TESTS[7].prefInterval, - TESTS[7].defaultInterval, - TESTS[7].maxInterval].join(","), false, true); -} - -function finished_test0thru7() { - if (TESTS[4].notified && TESTS[5].notified && TESTS[6].notified && TESTS[7].notified) { - do_execute_soon(gNextFunc); - } -} - -function check_test0thru7() { - Assert.ok(!TESTS[0].notified, - "a category registered timer didn't fire due to an invalid " + - "default interval"); - - Assert.ok(!TESTS[1].notified, - "a category registered timer didn't fire due to not implementing " + - "nsITimerCallback"); - - Assert.ok(!TESTS[2].notified, - "a category registered timer didn't fire due to the next update " + - "time being in the future"); - - Assert.ok(!TESTS[3].notified, - "a category registered timer didn't fire due to not having a " + - "notify method"); - - Assert.ok(TESTS[4].notified, - "a category registered timer has fired"); - - Assert.ok(TESTS[5].notified, - "a category registered timer fired that has an interval " + - "preference that overrides a default that wouldn't have fired yet"); - - Assert.ok(TESTS[6].notified, - "a category registered timer has fired due to the next update " + - "time being reset due to a future last update time"); - - Assert.ok(gPref.prefHasUserValue(PREF_BRANCH_LAST_UPDATE_TIME + - TESTS[4].timerID), - "first of two category registered timers last update time has " + - "a user value"); - Assert.ok(gPref.prefHasUserValue(PREF_BRANCH_LAST_UPDATE_TIME + - TESTS[5].timerID), - "second of two category registered timers last update time has " + - "a user value"); - - // Remove the category timers that should have failed - gCatMan.deleteCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[0].desc, true); - gCatMan.deleteCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[1].desc, true); - gCatMan.deleteCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[2].desc, true); - gCatMan.deleteCategoryEntry(CATEGORY_UPDATE_TIMER, TESTS[3].desc, true); - let entries = gCatMan.enumerateCategory(CATEGORY_UPDATE_TIMER); - while (entries.hasMoreElements()) { - let entry = entries.getNext().QueryInterface(Ci.nsISupportsCString).data; - gCatMan.deleteCategoryEntry(CATEGORY_UPDATE_TIMER, entry, false); - } - - entries = gCatMan.enumerateCategory(CATEGORY_UPDATE_TIMER); - Assert.ok(!entries.hasMoreElements(), - "no " + CATEGORY_UPDATE_TIMER + " categories should still be " + - "registered"); - - do_execute_soon(run_test8thru9); -} - -function run_test8thru9() { - gPref.setIntPref(PREF_BRANCH_LAST_UPDATE_TIME + TESTS[8].timerID, 1); - gCompReg.registerFactory(TESTS[8].classID, TESTS[8].desc, - TESTS[8].contractID, gTest8Factory); - gUTM.registerTimer(TESTS[8].timerID, gTest8TimerCallback, - TESTS[8].defaultInterval); - gPref.setIntPref(PREF_BRANCH_LAST_UPDATE_TIME + TESTS[9].timerID, 1); - gCompReg.registerFactory(TESTS[9].classID, TESTS[9].desc, - TESTS[9].contractID, gTest9Factory); - gUTM.registerTimer(TESTS[9].timerID, gTest9TimerCallback, - TESTS[9].defaultInterval); -} - -function check_test8thru9(aTestTimerCallback) { - aTestTimerCallback.timesCalled = (aTestTimerCallback.timesCalled || 0) + 1; - if (aTestTimerCallback.timesCalled < 2) { - return; - } - - Assert.ok(TESTS[8].notified, - "first registerTimer registered timer should have fired"); - - Assert.ok(TESTS[9].notified, - "second registerTimer registered timer should have fired"); - - // Check that 'staggering' has happened: even though the two events wanted to fire at - // the same time, we waited a full MAIN_TIMER_INTERVAL between them. - // (to avoid sensitivity to random timing issues, we fudge by a factor of 0.5 here) - Assert.ok(Math.abs(TESTS[8].notifyTime - TESTS[9].notifyTime) >= - MAIN_TIMER_INTERVAL * 0.5, - "staggering between two timers that want to fire at the same " + - "time should have occured"); - - let time = gPref.getIntPref(PREF_BRANCH_LAST_UPDATE_TIME + TESTS[8].timerID); - Assert.notEqual(time, 1, - "first registerTimer registered timer last update time " + - "should have been updated"); - - time = gPref.getIntPref(PREF_BRANCH_LAST_UPDATE_TIME + TESTS[9].timerID); - Assert.notEqual(time, 1, - "second registerTimer registered timer last update time " + - "should have been updated"); - - end_test(); -} |