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

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 /* Any copyright is dedicated to the Public Domain.
michael@0 2 * http://creativecommons.org/publicdomain/zero/1.0/
michael@0 3 */
michael@0 4
michael@0 5 // Checks that we rebuild something sensible from a corrupt database
michael@0 6
michael@0 7
michael@0 8 Components.utils.import("resource://testing-common/httpd.js");
michael@0 9 // Create and configure the HTTP server.
michael@0 10 var testserver = new HttpServer();
michael@0 11 testserver.start(-1);
michael@0 12 gPort = testserver.identity.primaryPort;
michael@0 13
michael@0 14 // register files with server
michael@0 15 testserver.registerDirectory("/addons/", do_get_file("addons"));
michael@0 16 mapFile("/data/test_corrupt.rdf", testserver);
michael@0 17
michael@0 18 // The test extension uses an insecure update url.
michael@0 19 Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false);
michael@0 20 Services.prefs.setBoolPref(PREF_EM_STRICT_COMPATIBILITY, false);
michael@0 21
michael@0 22 // Will be enabled
michael@0 23 var addon1 = {
michael@0 24 id: "addon1@tests.mozilla.org",
michael@0 25 version: "1.0",
michael@0 26 name: "Test 1",
michael@0 27 targetApplications: [{
michael@0 28 id: "xpcshell@tests.mozilla.org",
michael@0 29 minVersion: "2",
michael@0 30 maxVersion: "2"
michael@0 31 }]
michael@0 32 };
michael@0 33
michael@0 34 // Will be disabled
michael@0 35 var addon2 = {
michael@0 36 id: "addon2@tests.mozilla.org",
michael@0 37 version: "1.0",
michael@0 38 name: "Test 2",
michael@0 39 targetApplications: [{
michael@0 40 id: "xpcshell@tests.mozilla.org",
michael@0 41 minVersion: "2",
michael@0 42 maxVersion: "2"
michael@0 43 }]
michael@0 44 };
michael@0 45
michael@0 46 // Will get a compatibility update and stay enabled
michael@0 47 var addon3 = {
michael@0 48 id: "addon3@tests.mozilla.org",
michael@0 49 version: "1.0",
michael@0 50 name: "Test 3",
michael@0 51 updateURL: "http://localhost:" + gPort + "/data/test_corrupt.rdf",
michael@0 52 targetApplications: [{
michael@0 53 id: "xpcshell@tests.mozilla.org",
michael@0 54 minVersion: "1",
michael@0 55 maxVersion: "1"
michael@0 56 }]
michael@0 57 };
michael@0 58
michael@0 59 // Will get a compatibility update and be enabled
michael@0 60 var addon4 = {
michael@0 61 id: "addon4@tests.mozilla.org",
michael@0 62 version: "1.0",
michael@0 63 name: "Test 4",
michael@0 64 updateURL: "http://localhost:" + gPort + "/data/test_corrupt.rdf",
michael@0 65 targetApplications: [{
michael@0 66 id: "xpcshell@tests.mozilla.org",
michael@0 67 minVersion: "1",
michael@0 68 maxVersion: "1"
michael@0 69 }]
michael@0 70 };
michael@0 71
michael@0 72 // Would stay incompatible with strict compat
michael@0 73 var addon5 = {
michael@0 74 id: "addon5@tests.mozilla.org",
michael@0 75 version: "1.0",
michael@0 76 name: "Test 5",
michael@0 77 targetApplications: [{
michael@0 78 id: "xpcshell@tests.mozilla.org",
michael@0 79 minVersion: "1",
michael@0 80 maxVersion: "1"
michael@0 81 }]
michael@0 82 };
michael@0 83
michael@0 84 // Enabled bootstrapped
michael@0 85 var addon6 = {
michael@0 86 id: "addon6@tests.mozilla.org",
michael@0 87 version: "1.0",
michael@0 88 name: "Test 6",
michael@0 89 bootstrap: "true",
michael@0 90 targetApplications: [{
michael@0 91 id: "xpcshell@tests.mozilla.org",
michael@0 92 minVersion: "2",
michael@0 93 maxVersion: "2"
michael@0 94 }]
michael@0 95 };
michael@0 96
michael@0 97 // Disabled bootstrapped
michael@0 98 var addon7 = {
michael@0 99 id: "addon7@tests.mozilla.org",
michael@0 100 version: "1.0",
michael@0 101 name: "Test 7",
michael@0 102 bootstrap: "true",
michael@0 103 targetApplications: [{
michael@0 104 id: "xpcshell@tests.mozilla.org",
michael@0 105 minVersion: "2",
michael@0 106 maxVersion: "2"
michael@0 107 }]
michael@0 108 };
michael@0 109
michael@0 110 // The default theme
michael@0 111 var theme1 = {
michael@0 112 id: "theme1@tests.mozilla.org",
michael@0 113 version: "1.0",
michael@0 114 name: "Theme 1",
michael@0 115 internalName: "classic/1.0",
michael@0 116 targetApplications: [{
michael@0 117 id: "xpcshell@tests.mozilla.org",
michael@0 118 minVersion: "2",
michael@0 119 maxVersion: "2"
michael@0 120 }]
michael@0 121 };
michael@0 122
michael@0 123 // The selected theme
michael@0 124 var theme2 = {
michael@0 125 id: "theme2@tests.mozilla.org",
michael@0 126 version: "1.0",
michael@0 127 name: "Theme 2",
michael@0 128 internalName: "test/1.0",
michael@0 129 targetApplications: [{
michael@0 130 id: "xpcshell@tests.mozilla.org",
michael@0 131 minVersion: "2",
michael@0 132 maxVersion: "2"
michael@0 133 }]
michael@0 134 };
michael@0 135
michael@0 136 const profileDir = gProfD.clone();
michael@0 137 profileDir.append("extensions");
michael@0 138
michael@0 139 function run_test() {
michael@0 140 do_test_pending();
michael@0 141 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2");
michael@0 142
michael@0 143 writeInstallRDFForExtension(addon1, profileDir);
michael@0 144 writeInstallRDFForExtension(addon2, profileDir);
michael@0 145 writeInstallRDFForExtension(addon3, profileDir);
michael@0 146 writeInstallRDFForExtension(addon4, profileDir);
michael@0 147 writeInstallRDFForExtension(addon5, profileDir);
michael@0 148 writeInstallRDFForExtension(addon6, profileDir);
michael@0 149 writeInstallRDFForExtension(addon7, profileDir);
michael@0 150 writeInstallRDFForExtension(theme1, profileDir);
michael@0 151 writeInstallRDFForExtension(theme2, profileDir);
michael@0 152
michael@0 153 // Startup the profile and setup the initial state
michael@0 154 startupManager();
michael@0 155
michael@0 156 AddonManager.getAddonsByIDs(["addon2@tests.mozilla.org",
michael@0 157 "addon3@tests.mozilla.org",
michael@0 158 "addon4@tests.mozilla.org",
michael@0 159 "addon7@tests.mozilla.org",
michael@0 160 "theme2@tests.mozilla.org"], function([a2, a3, a4,
michael@0 161 a7, t2]) {
michael@0 162 // Set up the initial state
michael@0 163 a2.userDisabled = true;
michael@0 164 a4.userDisabled = true;
michael@0 165 a7.userDisabled = true;
michael@0 166 t2.userDisabled = false;
michael@0 167 a3.findUpdates({
michael@0 168 onUpdateFinished: function() {
michael@0 169 a4.findUpdates({
michael@0 170 onUpdateFinished: function() {
michael@0 171 do_execute_soon(run_test_1);
michael@0 172 }
michael@0 173 }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE);
michael@0 174 }
michael@0 175 }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE);
michael@0 176 });
michael@0 177 }
michael@0 178
michael@0 179 function end_test() {
michael@0 180 testserver.stop(do_test_finished);
michael@0 181 }
michael@0 182
michael@0 183 function run_test_1() {
michael@0 184 restartManager();
michael@0 185
michael@0 186 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
michael@0 187 "addon2@tests.mozilla.org",
michael@0 188 "addon3@tests.mozilla.org",
michael@0 189 "addon4@tests.mozilla.org",
michael@0 190 "addon5@tests.mozilla.org",
michael@0 191 "addon6@tests.mozilla.org",
michael@0 192 "addon7@tests.mozilla.org",
michael@0 193 "theme1@tests.mozilla.org",
michael@0 194 "theme2@tests.mozilla.org"],
michael@0 195 callback_soon(function([a1, a2, a3, a4, a5, a6, a7, t1, t2]) {
michael@0 196 do_check_neq(a1, null);
michael@0 197 do_check_true(a1.isActive);
michael@0 198 do_check_false(a1.userDisabled);
michael@0 199 do_check_false(a1.appDisabled);
michael@0 200 do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 201
michael@0 202 do_check_neq(a2, null);
michael@0 203 do_check_false(a2.isActive);
michael@0 204 do_check_true(a2.userDisabled);
michael@0 205 do_check_false(a2.appDisabled);
michael@0 206 do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 207
michael@0 208 do_check_neq(a3, null);
michael@0 209 do_check_true(a3.isActive);
michael@0 210 do_check_false(a3.userDisabled);
michael@0 211 do_check_false(a3.appDisabled);
michael@0 212 do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
michael@0 213
michael@0 214 do_check_neq(a4, null);
michael@0 215 do_check_false(a4.isActive);
michael@0 216 do_check_true(a4.userDisabled);
michael@0 217 do_check_false(a4.appDisabled);
michael@0 218 do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
michael@0 219
michael@0 220 do_check_neq(a5, null);
michael@0 221 do_check_true(a5.isActive);
michael@0 222 do_check_false(a5.userDisabled);
michael@0 223 do_check_false(a5.appDisabled);
michael@0 224 do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
michael@0 225
michael@0 226 do_check_neq(a6, null);
michael@0 227 do_check_true(a6.isActive);
michael@0 228 do_check_false(a6.userDisabled);
michael@0 229 do_check_false(a6.appDisabled);
michael@0 230 do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
michael@0 231
michael@0 232 do_check_neq(a7, null);
michael@0 233 do_check_false(a7.isActive);
michael@0 234 do_check_true(a7.userDisabled);
michael@0 235 do_check_false(a7.appDisabled);
michael@0 236 do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
michael@0 237
michael@0 238 do_check_neq(t1, null);
michael@0 239 do_check_false(t1.isActive);
michael@0 240 do_check_true(t1.userDisabled);
michael@0 241 do_check_false(t1.appDisabled);
michael@0 242 do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 243
michael@0 244 do_check_neq(t2, null);
michael@0 245 do_check_true(t2.isActive);
michael@0 246 do_check_false(t2.userDisabled);
michael@0 247 do_check_false(t2.appDisabled);
michael@0 248 do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 249
michael@0 250 // Shutdown and replace the database with a corrupt file (a directory
michael@0 251 // serves this purpose). On startup the add-ons manager won't rebuild
michael@0 252 // because there is a file there still.
michael@0 253 shutdownManager();
michael@0 254 gExtensionsJSON.remove(true);
michael@0 255 gExtensionsJSON.create(AM_Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
michael@0 256 startupManager(false);
michael@0 257
michael@0 258 // Accessing the add-ons should open and recover the database
michael@0 259 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
michael@0 260 "addon2@tests.mozilla.org",
michael@0 261 "addon3@tests.mozilla.org",
michael@0 262 "addon4@tests.mozilla.org",
michael@0 263 "addon5@tests.mozilla.org",
michael@0 264 "addon6@tests.mozilla.org",
michael@0 265 "addon7@tests.mozilla.org",
michael@0 266 "theme1@tests.mozilla.org",
michael@0 267 "theme2@tests.mozilla.org"],
michael@0 268 callback_soon(function([a1, a2, a3, a4, a5, a6, a7, t1, t2]) {
michael@0 269 // Should be correctly recovered
michael@0 270 do_check_neq(a1, null);
michael@0 271 do_check_true(a1.isActive);
michael@0 272 do_check_false(a1.userDisabled);
michael@0 273 do_check_false(a1.appDisabled);
michael@0 274 do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 275
michael@0 276 // Should be correctly recovered
michael@0 277 do_check_neq(a2, null);
michael@0 278 do_check_false(a2.isActive);
michael@0 279 do_check_true(a2.userDisabled);
michael@0 280 do_check_false(a2.appDisabled);
michael@0 281 do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 282
michael@0 283 // The compatibility update won't be recovered but it should still be
michael@0 284 // active for this session
michael@0 285 do_check_neq(a3, null);
michael@0 286 do_check_true(a3.isActive);
michael@0 287 do_check_false(a3.userDisabled);
michael@0 288 do_check_false(a3.appDisabled);
michael@0 289 do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
michael@0 290
michael@0 291 // The compatibility update won't be recovered and with strict
michael@0 292 // compatibility it would not have been able to tell that it was
michael@0 293 // previously userDisabled. However, without strict compat, it wasn't
michael@0 294 // appDisabled, so it knows it must have been userDisabled.
michael@0 295 do_check_neq(a4, null);
michael@0 296 do_check_false(a4.isActive);
michael@0 297 do_check_true(a4.userDisabled);
michael@0 298 do_check_false(a4.appDisabled);
michael@0 299 do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
michael@0 300
michael@0 301 do_check_neq(a5, null);
michael@0 302 do_check_true(a5.isActive);
michael@0 303 do_check_false(a5.userDisabled);
michael@0 304 do_check_false(a5.appDisabled);
michael@0 305 do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
michael@0 306
michael@0 307 do_check_neq(a6, null);
michael@0 308 do_check_true(a6.isActive);
michael@0 309 do_check_false(a6.userDisabled);
michael@0 310 do_check_false(a6.appDisabled);
michael@0 311 do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
michael@0 312
michael@0 313 do_check_neq(a7, null);
michael@0 314 do_check_false(a7.isActive);
michael@0 315 do_check_true(a7.userDisabled);
michael@0 316 do_check_false(a7.appDisabled);
michael@0 317 do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
michael@0 318
michael@0 319 // Should be correctly recovered
michael@0 320 do_check_neq(t1, null);
michael@0 321 do_check_false(t1.isActive);
michael@0 322 do_check_true(t1.userDisabled);
michael@0 323 do_check_false(t1.appDisabled);
michael@0 324 do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 325
michael@0 326 // Should be correctly recovered
michael@0 327 do_check_neq(t2, null);
michael@0 328 do_check_true(t2.isActive);
michael@0 329 do_check_false(t2.userDisabled);
michael@0 330 do_check_false(t2.appDisabled);
michael@0 331 do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 332
michael@0 333 restartManager();
michael@0 334
michael@0 335 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
michael@0 336 "addon2@tests.mozilla.org",
michael@0 337 "addon3@tests.mozilla.org",
michael@0 338 "addon4@tests.mozilla.org",
michael@0 339 "addon5@tests.mozilla.org",
michael@0 340 "addon6@tests.mozilla.org",
michael@0 341 "addon7@tests.mozilla.org",
michael@0 342 "theme1@tests.mozilla.org",
michael@0 343 "theme2@tests.mozilla.org"],
michael@0 344 callback_soon(function([a1, a2, a3, a4, a5, a6, a7, t1, t2]) {
michael@0 345 do_check_neq(a1, null);
michael@0 346 do_check_true(a1.isActive);
michael@0 347 do_check_false(a1.userDisabled);
michael@0 348 do_check_false(a1.appDisabled);
michael@0 349 do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 350
michael@0 351 do_check_neq(a2, null);
michael@0 352 do_check_false(a2.isActive);
michael@0 353 do_check_true(a2.userDisabled);
michael@0 354 do_check_false(a2.appDisabled);
michael@0 355 do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 356
michael@0 357 do_check_neq(a3, null);
michael@0 358 do_check_true(a3.isActive);
michael@0 359 do_check_false(a3.userDisabled);
michael@0 360 do_check_false(a3.appDisabled);
michael@0 361 do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
michael@0 362
michael@0 363 do_check_neq(a4, null);
michael@0 364 do_check_false(a4.isActive);
michael@0 365 do_check_true(a4.userDisabled);
michael@0 366 do_check_false(a4.appDisabled);
michael@0 367 do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
michael@0 368
michael@0 369 do_check_neq(a5, null);
michael@0 370 do_check_true(a5.isActive);
michael@0 371 do_check_false(a5.userDisabled);
michael@0 372 do_check_false(a5.appDisabled);
michael@0 373 do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
michael@0 374
michael@0 375 do_check_neq(a6, null);
michael@0 376 do_check_true(a6.isActive);
michael@0 377 do_check_false(a6.userDisabled);
michael@0 378 do_check_false(a6.appDisabled);
michael@0 379 do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
michael@0 380
michael@0 381 do_check_neq(a7, null);
michael@0 382 do_check_false(a7.isActive);
michael@0 383 do_check_true(a7.userDisabled);
michael@0 384 do_check_false(a7.appDisabled);
michael@0 385 do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
michael@0 386
michael@0 387 do_check_neq(t1, null);
michael@0 388 do_check_false(t1.isActive);
michael@0 389 do_check_true(t1.userDisabled);
michael@0 390 do_check_false(t1.appDisabled);
michael@0 391 do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 392
michael@0 393 do_check_neq(t2, null);
michael@0 394 do_check_true(t2.isActive);
michael@0 395 do_check_false(t2.userDisabled);
michael@0 396 do_check_false(t2.appDisabled);
michael@0 397 do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 398
michael@0 399 end_test();
michael@0 400 }));
michael@0 401 }));
michael@0 402 }));
michael@0 403 }

mercurial