Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/
3 */
5 // This verifies that AddonUpdateChecker works correctly
7 Components.utils.import("resource://gre/modules/addons/AddonUpdateChecker.jsm");
9 Components.utils.import("resource://testing-common/httpd.js");
10 var testserver;
12 function run_test() {
13 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
15 // Create and configure the HTTP server.
16 testserver = new HttpServer();
17 testserver.registerDirectory("/data/", do_get_file("data"));
18 testserver.start(4444);
20 do_test_pending();
21 run_test_1();
22 }
24 function end_test() {
25 testserver.stop(do_test_finished);
26 }
28 // Test that a basic update check returns the expected available updates
29 function run_test_1() {
30 AddonUpdateChecker.checkForUpdates("updatecheck1@tests.mozilla.org", null,
31 "http://localhost:4444/data/test_updatecheck.rdf", {
32 onUpdateCheckComplete: function(updates) {
33 check_test_1(updates);
34 },
36 onUpdateCheckError: function(status) {
37 do_throw("Update check failed with status " + status);
38 }
39 });
40 }
42 function check_test_1(updates) {
43 do_check_eq(updates.length, 5);
44 let update = AddonUpdateChecker.getNewestCompatibleUpdate(updates);
45 do_check_neq(update, null);
46 do_check_eq(update.version, 3);
47 update = AddonUpdateChecker.getCompatibilityUpdate(updates, "2");
48 do_check_neq(update, null);
49 do_check_eq(update.version, 2);
50 do_check_eq(update.targetApplications[0].minVersion, 1);
51 do_check_eq(update.targetApplications[0].maxVersion, 2);
53 run_test_2();
54 }
56 /*
57 * Tests that the security checks are applied correctly
58 *
59 * Test signature updateHash updateLink expected
60 *--------------------------------------------------------
61 * 2 absent absent http fail
62 * 3 broken absent http fail
63 * 4 correct absent http no update
64 * 5 correct sha1 http update
65 * 6 corrent absent https update
66 * 7 corrent sha1 https update
67 * 8 corrent md2 http no update
68 * 9 corrent md2 https update
69 */
71 let updateKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK426erD/H3XtsjvaB5+PJqbhj" +
72 "Zc9EDI5OCJS8R3FIObJ9ZHJK1TXeaE7JWqt9WUmBWTEFvwS+FI9vWu8058N9CHhD" +
73 "NyeP6i4LuUYjTURnn7Yw/IgzyIJ2oKsYa32RuxAyteqAWqPT/J63wBixIeCxmysf" +
74 "awB/zH4KaPiY3vnrzQIDAQAB";
76 function run_test_2() {
77 AddonUpdateChecker.checkForUpdates("test_bug378216_5@tests.mozilla.org",
78 updateKey,
79 "http://localhost:4444/data/test_updatecheck.rdf", {
80 onUpdateCheckComplete: function(updates) {
81 do_throw("Expected the update check to fail");
82 },
84 onUpdateCheckError: function(status) {
85 run_test_3();
86 }
87 });
88 }
90 function run_test_3() {
91 AddonUpdateChecker.checkForUpdates("test_bug378216_7@tests.mozilla.org",
92 updateKey,
93 "http://localhost:4444/data/test_updatecheck.rdf", {
94 onUpdateCheckComplete: function(updates) {
95 do_throw("Expected the update check to fail");
96 },
98 onUpdateCheckError: function(status) {
99 run_test_4();
100 }
101 });
102 }
104 function run_test_4() {
105 AddonUpdateChecker.checkForUpdates("test_bug378216_8@tests.mozilla.org",
106 updateKey,
107 "http://localhost:4444/data/test_updatecheck.rdf", {
108 onUpdateCheckComplete: function(updates) {
109 do_check_eq(updates.length, 1);
110 do_check_false("updateURL" in updates[0]);
111 run_test_5();
112 },
114 onUpdateCheckError: function(status) {
115 do_throw("Update check failed with status " + status);
116 }
117 });
118 }
120 function run_test_5() {
121 AddonUpdateChecker.checkForUpdates("test_bug378216_9@tests.mozilla.org",
122 updateKey,
123 "http://localhost:4444/data/test_updatecheck.rdf", {
124 onUpdateCheckComplete: function(updates) {
125 do_check_eq(updates.length, 1);
126 do_check_eq(updates[0].version, "2.0");
127 do_check_true("updateURL" in updates[0]);
128 run_test_6();
129 },
131 onUpdateCheckError: function(status) {
132 do_throw("Update check failed with status " + status);
133 }
134 });
135 }
137 function run_test_6() {
138 AddonUpdateChecker.checkForUpdates("test_bug378216_10@tests.mozilla.org",
139 updateKey,
140 "http://localhost:4444/data/test_updatecheck.rdf", {
141 onUpdateCheckComplete: function(updates) {
142 do_check_eq(updates.length, 1);
143 do_check_eq(updates[0].version, "2.0");
144 do_check_true("updateURL" in updates[0]);
145 run_test_7();
146 },
148 onUpdateCheckError: function(status) {
149 do_throw("Update check failed with status " + status);
150 }
151 });
152 }
154 function run_test_7() {
155 AddonUpdateChecker.checkForUpdates("test_bug378216_11@tests.mozilla.org",
156 updateKey,
157 "http://localhost:4444/data/test_updatecheck.rdf", {
158 onUpdateCheckComplete: function(updates) {
159 do_check_eq(updates.length, 1);
160 do_check_eq(updates[0].version, "2.0");
161 do_check_true("updateURL" in updates[0]);
162 run_test_8();
163 },
165 onUpdateCheckError: function(status) {
166 do_throw("Update check failed with status " + status);
167 }
168 });
169 }
171 function run_test_8() {
172 AddonUpdateChecker.checkForUpdates("test_bug378216_12@tests.mozilla.org",
173 updateKey,
174 "http://localhost:4444/data/test_updatecheck.rdf", {
175 onUpdateCheckComplete: function(updates) {
176 do_check_eq(updates.length, 1);
177 do_check_false("updateURL" in updates[0]);
178 run_test_9();
179 },
181 onUpdateCheckError: function(status) {
182 do_throw("Update check failed with status " + status);
183 }
184 });
185 }
187 function run_test_9() {
188 AddonUpdateChecker.checkForUpdates("test_bug378216_13@tests.mozilla.org",
189 updateKey,
190 "http://localhost:4444/data/test_updatecheck.rdf", {
191 onUpdateCheckComplete: function(updates) {
192 do_check_eq(updates.length, 1);
193 do_check_eq(updates[0].version, "2.0");
194 do_check_true("updateURL" in updates[0]);
195 run_test_10();
196 },
198 onUpdateCheckError: function(status) {
199 do_throw("Update check failed with status " + status);
200 }
201 });
202 }
204 function run_test_10() {
205 AddonUpdateChecker.checkForUpdates("test_bug378216_14@tests.mozilla.org",
206 null,
207 "http://localhost:4444/data/test_updatecheck.rdf", {
208 onUpdateCheckComplete: function(updates) {
209 do_check_eq(updates.length, 0);
210 run_test_11();
211 },
213 onUpdateCheckError: function(status) {
214 do_throw("Update check failed with status " + status);
215 }
216 });
217 }
219 function run_test_11() {
220 AddonUpdateChecker.checkForUpdates("test_bug378216_15@tests.mozilla.org",
221 null,
222 "http://localhost:4444/data/test_updatecheck.rdf", {
223 onUpdateCheckComplete: function(updates) {
224 do_throw("Update check should have failed");
225 },
227 onUpdateCheckError: function(status) {
228 do_check_eq(status, AddonUpdateChecker.ERROR_PARSE_ERROR);
229 run_test_12();
230 }
231 });
232 }
234 function run_test_12() {
235 AddonUpdateChecker.checkForUpdates("ignore-compat@tests.mozilla.org",
236 null,
237 "http://localhost:4444/data/test_updatecheck.rdf", {
238 onUpdateCheckComplete: function(updates) {
239 do_check_eq(updates.length, 3);
240 let update = AddonUpdateChecker.getNewestCompatibleUpdate(updates,
241 null,
242 null,
243 true);
244 do_check_neq(update, null);
245 do_check_eq(update.version, 2);
246 run_test_13();
247 },
249 onUpdateCheckError: function(status) {
250 do_throw("Update check failed with status " + status);
251 }
252 });
253 }
255 function run_test_13() {
256 AddonUpdateChecker.checkForUpdates("compat-override@tests.mozilla.org",
257 null,
258 "http://localhost:4444/data/test_updatecheck.rdf", {
259 onUpdateCheckComplete: function(updates) {
260 do_check_eq(updates.length, 3);
261 let overrides = [{
262 type: "incompatible",
263 minVersion: 1,
264 maxVersion: 2,
265 appID: "xpcshell@tests.mozilla.org",
266 appMinVersion: 0.1,
267 appMaxVersion: 0.2
268 }, {
269 type: "incompatible",
270 minVersion: 2,
271 maxVersion: 2,
272 appID: "xpcshell@tests.mozilla.org",
273 appMinVersion: 1,
274 appMaxVersion: 2
275 }];
276 let update = AddonUpdateChecker.getNewestCompatibleUpdate(updates,
277 null,
278 null,
279 true,
280 false,
281 overrides);
282 do_check_neq(update, null);
283 do_check_eq(update.version, 1);
284 run_test_14();
285 },
287 onUpdateCheckError: function(status) {
288 do_throw("Update check failed with status " + status);
289 }
290 });
291 }
293 function run_test_14() {
294 AddonUpdateChecker.checkForUpdates("compat-strict-optin@tests.mozilla.org",
295 null,
296 "http://localhost:4444/data/test_updatecheck.rdf", {
297 onUpdateCheckComplete: function(updates) {
298 do_check_eq(updates.length, 1);
299 let update = AddonUpdateChecker.getNewestCompatibleUpdate(updates,
300 null,
301 null,
302 true,
303 false);
304 do_check_eq(update, null);
305 end_test();
306 },
308 onUpdateCheckError: function(status) {
309 do_throw("Update check failed with status " + status);
310 }
311 });
312 }