1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/services/sync/tests/unit/test_addons_tracker.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,178 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +"use strict"; 1.8 + 1.9 +Cu.import("resource://gre/modules/AddonManager.jsm"); 1.10 +Cu.import("resource://services-sync/engines/addons.js"); 1.11 +Cu.import("resource://services-sync/constants.js"); 1.12 +Cu.import("resource://services-sync/service.js"); 1.13 +Cu.import("resource://services-sync/util.js"); 1.14 + 1.15 +loadAddonTestFunctions(); 1.16 +startupManager(); 1.17 +Svc.Prefs.set("addons.ignoreRepositoryChecking", true); 1.18 +Svc.Prefs.set("engine.addons", true); 1.19 + 1.20 +Service.engineManager.register(AddonsEngine); 1.21 +let engine = Service.engineManager.get("addons"); 1.22 +let reconciler = engine._reconciler; 1.23 +let store = engine._store; 1.24 +let tracker = engine._tracker; 1.25 + 1.26 +// Don't write out by default. 1.27 +tracker.persistChangedIDs = false; 1.28 + 1.29 +const addon1ID = "addon1@tests.mozilla.org"; 1.30 + 1.31 +function cleanup_and_advance() { 1.32 + Svc.Obs.notify("weave:engine:stop-tracking"); 1.33 + tracker.stopTracking(); 1.34 + 1.35 + tracker.resetScore(); 1.36 + tracker.clearChangedIDs(); 1.37 + 1.38 + reconciler._addons = {}; 1.39 + reconciler._changes = []; 1.40 + let cb = Async.makeSpinningCallback(); 1.41 + reconciler.saveState(null, cb); 1.42 + cb.wait(); 1.43 + 1.44 + run_next_test(); 1.45 +} 1.46 + 1.47 +function run_test() { 1.48 + initTestLogging("Trace"); 1.49 + Log.repository.getLogger("Sync.Engine.Addons").level = Log.Level.Trace; 1.50 + Log.repository.getLogger("Sync.AddonsReconciler").level = 1.51 + Log.Level.Trace; 1.52 + 1.53 + cleanup_and_advance(); 1.54 +} 1.55 + 1.56 +add_test(function test_empty() { 1.57 + _("Verify the tracker is empty to start with."); 1.58 + 1.59 + do_check_eq(0, Object.keys(tracker.changedIDs).length); 1.60 + do_check_eq(0, tracker.score); 1.61 + 1.62 + cleanup_and_advance(); 1.63 +}); 1.64 + 1.65 +add_test(function test_not_tracking() { 1.66 + _("Ensures the tracker doesn't do anything when it isn't tracking."); 1.67 + 1.68 + let addon = installAddon("test_bootstrap1_1"); 1.69 + uninstallAddon(addon); 1.70 + 1.71 + do_check_eq(0, Object.keys(tracker.changedIDs).length); 1.72 + do_check_eq(0, tracker.score); 1.73 + 1.74 + cleanup_and_advance(); 1.75 +}); 1.76 + 1.77 +add_test(function test_track_install() { 1.78 + _("Ensure that installing an add-on notifies tracker."); 1.79 + 1.80 + reconciler.startListening(); 1.81 + 1.82 + Svc.Obs.notify("weave:engine:start-tracking"); 1.83 + 1.84 + do_check_eq(0, tracker.score); 1.85 + let addon = installAddon("test_bootstrap1_1"); 1.86 + let changed = tracker.changedIDs; 1.87 + 1.88 + do_check_eq(1, Object.keys(changed).length); 1.89 + do_check_true(addon.syncGUID in changed); 1.90 + do_check_eq(SCORE_INCREMENT_XLARGE, tracker.score); 1.91 + 1.92 + uninstallAddon(addon); 1.93 + cleanup_and_advance(); 1.94 +}); 1.95 + 1.96 +add_test(function test_track_uninstall() { 1.97 + _("Ensure that uninstalling an add-on notifies tracker."); 1.98 + 1.99 + reconciler.startListening(); 1.100 + 1.101 + let addon = installAddon("test_bootstrap1_1"); 1.102 + let guid = addon.syncGUID; 1.103 + do_check_eq(0, tracker.score); 1.104 + 1.105 + Svc.Obs.notify("weave:engine:start-tracking"); 1.106 + 1.107 + uninstallAddon(addon); 1.108 + let changed = tracker.changedIDs; 1.109 + do_check_eq(1, Object.keys(changed).length); 1.110 + do_check_true(guid in changed); 1.111 + do_check_eq(SCORE_INCREMENT_XLARGE, tracker.score); 1.112 + 1.113 + cleanup_and_advance(); 1.114 +}); 1.115 + 1.116 +add_test(function test_track_user_disable() { 1.117 + _("Ensure that tracker sees disabling of add-on"); 1.118 + 1.119 + reconciler.startListening(); 1.120 + 1.121 + let addon = installAddon("test_bootstrap1_1"); 1.122 + do_check_false(addon.userDisabled); 1.123 + do_check_false(addon.appDisabled); 1.124 + do_check_true(addon.isActive); 1.125 + 1.126 + Svc.Obs.notify("weave:engine:start-tracking"); 1.127 + do_check_eq(0, tracker.score); 1.128 + 1.129 + let cb = Async.makeSyncCallback(); 1.130 + 1.131 + let listener = { 1.132 + onDisabled: function(disabled) { 1.133 + _("onDisabled"); 1.134 + if (disabled.id == addon.id) { 1.135 + AddonManager.removeAddonListener(listener); 1.136 + cb(); 1.137 + } 1.138 + }, 1.139 + onDisabling: function(disabling) { 1.140 + _("onDisabling add-on"); 1.141 + } 1.142 + }; 1.143 + AddonManager.addAddonListener(listener); 1.144 + 1.145 + _("Disabling add-on"); 1.146 + addon.userDisabled = true; 1.147 + _("Disabling started..."); 1.148 + Async.waitForSyncCallback(cb); 1.149 + 1.150 + let changed = tracker.changedIDs; 1.151 + do_check_eq(1, Object.keys(changed).length); 1.152 + do_check_true(addon.syncGUID in changed); 1.153 + do_check_eq(SCORE_INCREMENT_XLARGE, tracker.score); 1.154 + 1.155 + uninstallAddon(addon); 1.156 + cleanup_and_advance(); 1.157 +}); 1.158 + 1.159 +add_test(function test_track_enable() { 1.160 + _("Ensure that enabling a disabled add-on notifies tracker."); 1.161 + 1.162 + reconciler.startListening(); 1.163 + 1.164 + let addon = installAddon("test_bootstrap1_1"); 1.165 + addon.userDisabled = true; 1.166 + store._sleep(0); 1.167 + 1.168 + do_check_eq(0, tracker.score); 1.169 + 1.170 + Svc.Obs.notify("weave:engine:start-tracking"); 1.171 + addon.userDisabled = false; 1.172 + store._sleep(0); 1.173 + 1.174 + let changed = tracker.changedIDs; 1.175 + do_check_eq(1, Object.keys(changed).length); 1.176 + do_check_true(addon.syncGUID in changed); 1.177 + do_check_eq(SCORE_INCREMENT_XLARGE, tracker.score); 1.178 + 1.179 + uninstallAddon(addon); 1.180 + cleanup_and_advance(); 1.181 +});