diff options
Diffstat (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js')
-rw-r--r-- | toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js b/toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js new file mode 100644 index 0000000000..029d9cddc0 --- /dev/null +++ b/toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js @@ -0,0 +1,116 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// restartManager() mucks with XPIProvider.jsm importing, so we hack around. +this.__defineGetter__("XPIProvider", function () { + return ChromeUtils.import( + "resource://gre/modules/addons/XPIProvider.jsm" + ).XPIProvider; +}); + +const UUID_PATTERN = + /^\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}$/i; + +const ADDONS = [ + { + id: "addon1@tests.mozilla.org", + name: "Test 1", + }, + { + id: "addon2@tests.mozilla.org", + name: "Real Test 2", + }, +]; + +let xpis; + +add_task(async function setup() { + Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false); + + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9"); + await promiseStartupManager(); + + xpis = await Promise.all( + ADDONS.map(info => + createTempWebExtensionFile({ + manifest: { + name: info.name, + browser_specific_settings: { gecko: { id: info.id } }, + }, + }) + ) + ); +}); + +add_task(async function test_getter_and_setter() { + await promiseInstallFile(xpis[0]); + + let addon = await AddonManager.getAddonByID(ADDONS[0].id); + Assert.notEqual(addon, null); + Assert.notEqual(addon.syncGUID, null); + Assert.ok(UUID_PATTERN.test(addon.syncGUID)); + + let newGUID = "foo"; + + addon.syncGUID = newGUID; + Assert.equal(newGUID, addon.syncGUID); + + // Verify change made it to DB. + let newAddon = await AddonManager.getAddonByID(ADDONS[0].id); + Assert.notEqual(newAddon, null); + Assert.equal(newGUID, newAddon.syncGUID); +}); + +add_task(async function test_fetch_by_guid_unknown_guid() { + let addon = await XPIProvider.getAddonBySyncGUID("XXXX"); + Assert.equal(null, addon); +}); + +// Ensure setting an extension to an existing syncGUID results in error. +add_task(async function test_error_on_duplicate_syncguid_insert() { + await promiseInstallAllFiles(xpis); + + let addons = await AddonManager.getAddonsByIDs(ADDONS.map(a => a.id)); + let initialGUID = addons[1].syncGUID; + + Assert.throws( + () => { + addons[1].syncGUID = addons[0].syncGUID; + }, + /Addon sync GUID conflict/, + "Assigning conflicting sync guids throws" + ); + + await promiseRestartManager(); + + let addon = await AddonManager.getAddonByID(ADDONS[1].id); + Assert.equal(initialGUID, addon.syncGUID); +}); + +add_task(async function test_fetch_by_guid_known_guid() { + let addon = await AddonManager.getAddonByID(ADDONS[0].id); + Assert.notEqual(null, addon); + Assert.notEqual(null, addon.syncGUID); + + let syncGUID = addon.syncGUID; + + let newAddon = await XPIProvider.getAddonBySyncGUID(syncGUID); + Assert.notEqual(null, newAddon); + Assert.equal(syncGUID, newAddon.syncGUID); +}); + +add_task(async function test_addon_manager_get_by_sync_guid() { + let addon = await AddonManager.getAddonByID(ADDONS[0].id); + Assert.notEqual(null, addon.syncGUID); + + let syncGUID = addon.syncGUID; + + let newAddon = await AddonManager.getAddonBySyncGUID(syncGUID); + Assert.notEqual(null, newAddon); + Assert.equal(addon.id, newAddon.id); + Assert.equal(syncGUID, newAddon.syncGUID); + + let missing = await AddonManager.getAddonBySyncGUID("DOES_NOT_EXIST"); + Assert.equal(undefined, missing); +}); |