toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:40ea687302df
1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/
3 */
4
5 Components.utils.import("resource://gre/modules/Services.jsm");
6
7 // restartManager() mucks with XPIProvider.jsm importing, so we hack around.
8 this.__defineGetter__("XPIProvider", function () {
9 let scope = {};
10 return Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", scope)
11 .XPIProvider;
12 });
13
14 const addonId = "addon1@tests.mozilla.org";
15
16 function run_test() {
17 Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
18
19 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9");
20 startupManager();
21
22 run_next_test();
23 }
24
25 add_test(function test_getter_and_setter() {
26 // Our test add-on requires a restart.
27 let listener = {
28 onInstallEnded: function onInstallEnded() {
29 AddonManager.removeInstallListener(listener);
30 // never restart directly inside an onInstallEnded handler!
31 do_execute_soon(function getter_setter_install_ended() {
32 restartManager();
33
34 AddonManager.getAddonByID(addonId, function(addon) {
35
36 do_check_neq(addon, null);
37 do_check_neq(addon.syncGUID, null);
38 do_check_true(addon.syncGUID.length >= 9);
39
40 let oldGUID = addon.SyncGUID;
41 let newGUID = "foo";
42
43 addon.syncGUID = newGUID;
44 do_check_eq(newGUID, addon.syncGUID);
45
46 // Verify change made it to DB.
47 AddonManager.getAddonByID(addonId, function(newAddon) {
48 do_check_neq(newAddon, null);
49 do_check_eq(newGUID, newAddon.syncGUID);
50 });
51
52 run_next_test();
53 });
54 });
55 }
56 };
57
58 AddonManager.addInstallListener(listener);
59
60 AddonManager.getInstallForFile(do_get_addon("test_install1"),
61 function(install) {
62 install.install();
63 });
64 });
65
66 add_test(function test_fetch_by_guid_unknown_guid() {
67 XPIProvider.getAddonBySyncGUID("XXXX", function(addon) {
68 do_check_eq(null, addon);
69 run_next_test();
70 });
71 });
72
73 // Ensure setting an extension to an existing syncGUID results in error.
74 add_test(function test_error_on_duplicate_syncguid_insert() {
75 const installNames = ["test_install1", "test_install2_1"];
76 const installIDs = ["addon1@tests.mozilla.org", "addon2@tests.mozilla.org"];
77
78 let installCount = 0;
79
80 let listener = {
81 onInstallEnded: function onInstallEnded() {
82 installCount++;
83
84 if (installCount == installNames.length) {
85 AddonManager.removeInstallListener(listener);
86 do_execute_soon(function duplicate_syncguid_install_ended() {
87 restartManager();
88
89 AddonManager.getAddonsByIDs(installIDs, callback_soon(function(addons) {
90 let initialGUID = addons[1].syncGUID;
91
92 try {
93 addons[1].syncGUID = addons[0].syncGUID;
94 do_throw("Should not get here.");
95 }
96 catch (e) {
97 do_check_true(e.message.startsWith("Addon sync GUID conflict"));
98 restartManager();
99
100 AddonManager.getAddonByID(installIDs[1], function(addon) {
101 do_check_eq(initialGUID, addon.syncGUID);
102 run_next_test();
103 });
104 }
105 }));
106 });
107 }
108 }
109 };
110
111 AddonManager.addInstallListener(listener);
112 let getInstallCB = function(install) { install.install(); };
113
114 for each (let name in installNames) {
115 AddonManager.getInstallForFile(do_get_addon(name), getInstallCB);
116 }
117 });
118
119 add_test(function test_fetch_by_guid_known_guid() {
120 AddonManager.getAddonByID(addonId, function(addon) {
121 do_check_neq(null, addon);
122 do_check_neq(null, addon.syncGUID);
123
124 let syncGUID = addon.syncGUID;
125
126 XPIProvider.getAddonBySyncGUID(syncGUID, function(newAddon) {
127 do_check_neq(null, newAddon);
128 do_check_eq(syncGUID, newAddon.syncGUID);
129
130 run_next_test();
131 });
132 });
133 });
134
135 add_test(function test_addon_manager_get_by_sync_guid() {
136 AddonManager.getAddonByID(addonId, function(addon) {
137 do_check_neq(null, addon.syncGUID);
138
139 let syncGUID = addon.syncGUID;
140
141 AddonManager.getAddonBySyncGUID(syncGUID, function(newAddon) {
142 do_check_neq(null, newAddon);
143 do_check_eq(addon.id, newAddon.id);
144 do_check_eq(syncGUID, newAddon.syncGUID);
145
146 AddonManager.getAddonBySyncGUID("DOES_NOT_EXIST", function(missing) {
147 do_check_eq(undefined, missing);
148
149 run_next_test();
150 });
151 });
152 });
153 });
154

mercurial