1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,154 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.6 + */ 1.7 + 1.8 +Components.utils.import("resource://gre/modules/Services.jsm"); 1.9 + 1.10 +// restartManager() mucks with XPIProvider.jsm importing, so we hack around. 1.11 +this.__defineGetter__("XPIProvider", function () { 1.12 + let scope = {}; 1.13 + return Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", scope) 1.14 + .XPIProvider; 1.15 +}); 1.16 + 1.17 +const addonId = "addon1@tests.mozilla.org"; 1.18 + 1.19 +function run_test() { 1.20 + Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false); 1.21 + 1.22 + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9"); 1.23 + startupManager(); 1.24 + 1.25 + run_next_test(); 1.26 +} 1.27 + 1.28 +add_test(function test_getter_and_setter() { 1.29 + // Our test add-on requires a restart. 1.30 + let listener = { 1.31 + onInstallEnded: function onInstallEnded() { 1.32 + AddonManager.removeInstallListener(listener); 1.33 + // never restart directly inside an onInstallEnded handler! 1.34 + do_execute_soon(function getter_setter_install_ended() { 1.35 + restartManager(); 1.36 + 1.37 + AddonManager.getAddonByID(addonId, function(addon) { 1.38 + 1.39 + do_check_neq(addon, null); 1.40 + do_check_neq(addon.syncGUID, null); 1.41 + do_check_true(addon.syncGUID.length >= 9); 1.42 + 1.43 + let oldGUID = addon.SyncGUID; 1.44 + let newGUID = "foo"; 1.45 + 1.46 + addon.syncGUID = newGUID; 1.47 + do_check_eq(newGUID, addon.syncGUID); 1.48 + 1.49 + // Verify change made it to DB. 1.50 + AddonManager.getAddonByID(addonId, function(newAddon) { 1.51 + do_check_neq(newAddon, null); 1.52 + do_check_eq(newGUID, newAddon.syncGUID); 1.53 + }); 1.54 + 1.55 + run_next_test(); 1.56 + }); 1.57 + }); 1.58 + } 1.59 + }; 1.60 + 1.61 + AddonManager.addInstallListener(listener); 1.62 + 1.63 + AddonManager.getInstallForFile(do_get_addon("test_install1"), 1.64 + function(install) { 1.65 + install.install(); 1.66 + }); 1.67 +}); 1.68 + 1.69 +add_test(function test_fetch_by_guid_unknown_guid() { 1.70 + XPIProvider.getAddonBySyncGUID("XXXX", function(addon) { 1.71 + do_check_eq(null, addon); 1.72 + run_next_test(); 1.73 + }); 1.74 +}); 1.75 + 1.76 +// Ensure setting an extension to an existing syncGUID results in error. 1.77 +add_test(function test_error_on_duplicate_syncguid_insert() { 1.78 + const installNames = ["test_install1", "test_install2_1"]; 1.79 + const installIDs = ["addon1@tests.mozilla.org", "addon2@tests.mozilla.org"]; 1.80 + 1.81 + let installCount = 0; 1.82 + 1.83 + let listener = { 1.84 + onInstallEnded: function onInstallEnded() { 1.85 + installCount++; 1.86 + 1.87 + if (installCount == installNames.length) { 1.88 + AddonManager.removeInstallListener(listener); 1.89 + do_execute_soon(function duplicate_syncguid_install_ended() { 1.90 + restartManager(); 1.91 + 1.92 + AddonManager.getAddonsByIDs(installIDs, callback_soon(function(addons) { 1.93 + let initialGUID = addons[1].syncGUID; 1.94 + 1.95 + try { 1.96 + addons[1].syncGUID = addons[0].syncGUID; 1.97 + do_throw("Should not get here."); 1.98 + } 1.99 + catch (e) { 1.100 + do_check_true(e.message.startsWith("Addon sync GUID conflict")); 1.101 + restartManager(); 1.102 + 1.103 + AddonManager.getAddonByID(installIDs[1], function(addon) { 1.104 + do_check_eq(initialGUID, addon.syncGUID); 1.105 + run_next_test(); 1.106 + }); 1.107 + } 1.108 + })); 1.109 + }); 1.110 + } 1.111 + } 1.112 + }; 1.113 + 1.114 + AddonManager.addInstallListener(listener); 1.115 + let getInstallCB = function(install) { install.install(); }; 1.116 + 1.117 + for each (let name in installNames) { 1.118 + AddonManager.getInstallForFile(do_get_addon(name), getInstallCB); 1.119 + } 1.120 +}); 1.121 + 1.122 +add_test(function test_fetch_by_guid_known_guid() { 1.123 + AddonManager.getAddonByID(addonId, function(addon) { 1.124 + do_check_neq(null, addon); 1.125 + do_check_neq(null, addon.syncGUID); 1.126 + 1.127 + let syncGUID = addon.syncGUID; 1.128 + 1.129 + XPIProvider.getAddonBySyncGUID(syncGUID, function(newAddon) { 1.130 + do_check_neq(null, newAddon); 1.131 + do_check_eq(syncGUID, newAddon.syncGUID); 1.132 + 1.133 + run_next_test(); 1.134 + }); 1.135 + }); 1.136 +}); 1.137 + 1.138 +add_test(function test_addon_manager_get_by_sync_guid() { 1.139 + AddonManager.getAddonByID(addonId, function(addon) { 1.140 + do_check_neq(null, addon.syncGUID); 1.141 + 1.142 + let syncGUID = addon.syncGUID; 1.143 + 1.144 + AddonManager.getAddonBySyncGUID(syncGUID, function(newAddon) { 1.145 + do_check_neq(null, newAddon); 1.146 + do_check_eq(addon.id, newAddon.id); 1.147 + do_check_eq(syncGUID, newAddon.syncGUID); 1.148 + 1.149 + AddonManager.getAddonBySyncGUID("DOES_NOT_EXIST", function(missing) { 1.150 + do_check_eq(undefined, missing); 1.151 + 1.152 + run_next_test(); 1.153 + }); 1.154 + }); 1.155 + }); 1.156 +}); 1.157 +