1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/mozapps/extensions/test/xpcshell/test_badschema.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,404 @@ 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 +// Checks that we rebuild something sensible from a database with a bad schema 1.9 + 1.10 + 1.11 +Components.utils.import("resource://testing-common/httpd.js"); 1.12 +var testserver = new HttpServer(); 1.13 +testserver.start(-1); 1.14 +gPort = testserver.identity.primaryPort; 1.15 + 1.16 +// register static files with server and interpolate port numbers in them 1.17 +mapFile("/data/test_corrupt.rdf", testserver); 1.18 + 1.19 +// The test extension uses an insecure update url. 1.20 +Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false); 1.21 + 1.22 +// Will be enabled 1.23 +var addon1 = { 1.24 + id: "addon1@tests.mozilla.org", 1.25 + version: "1.0", 1.26 + name: "Test 1", 1.27 + targetApplications: [{ 1.28 + id: "xpcshell@tests.mozilla.org", 1.29 + minVersion: "2", 1.30 + maxVersion: "2" 1.31 + }] 1.32 +}; 1.33 + 1.34 +// Will be disabled 1.35 +var addon2 = { 1.36 + id: "addon2@tests.mozilla.org", 1.37 + version: "1.0", 1.38 + name: "Test 2", 1.39 + targetApplications: [{ 1.40 + id: "xpcshell@tests.mozilla.org", 1.41 + minVersion: "2", 1.42 + maxVersion: "2" 1.43 + }] 1.44 +}; 1.45 + 1.46 +// Will get a compatibility update and be enabled 1.47 +var addon3 = { 1.48 + id: "addon3@tests.mozilla.org", 1.49 + version: "1.0", 1.50 + name: "Test 3", 1.51 + updateURL: "http://localhost:" + gPort + "/data/test_corrupt.rdf", 1.52 + targetApplications: [{ 1.53 + id: "xpcshell@tests.mozilla.org", 1.54 + minVersion: "1", 1.55 + maxVersion: "1" 1.56 + }] 1.57 +}; 1.58 + 1.59 +// Will get a compatibility update and be disabled 1.60 +var addon4 = { 1.61 + id: "addon4@tests.mozilla.org", 1.62 + version: "1.0", 1.63 + name: "Test 4", 1.64 + updateURL: "http://localhost:" + gPort + "/data/test_corrupt.rdf", 1.65 + targetApplications: [{ 1.66 + id: "xpcshell@tests.mozilla.org", 1.67 + minVersion: "1", 1.68 + maxVersion: "1" 1.69 + }] 1.70 +}; 1.71 + 1.72 +// Stays incompatible 1.73 +var addon5 = { 1.74 + id: "addon5@tests.mozilla.org", 1.75 + version: "1.0", 1.76 + name: "Test 5", 1.77 + targetApplications: [{ 1.78 + id: "xpcshell@tests.mozilla.org", 1.79 + minVersion: "1", 1.80 + maxVersion: "1" 1.81 + }] 1.82 +}; 1.83 + 1.84 +// Enabled bootstrapped 1.85 +var addon6 = { 1.86 + id: "addon6@tests.mozilla.org", 1.87 + version: "1.0", 1.88 + name: "Test 6", 1.89 + bootstrap: "true", 1.90 + targetApplications: [{ 1.91 + id: "xpcshell@tests.mozilla.org", 1.92 + minVersion: "2", 1.93 + maxVersion: "2" 1.94 + }] 1.95 +}; 1.96 + 1.97 +// Disabled bootstrapped 1.98 +var addon7 = { 1.99 + id: "addon7@tests.mozilla.org", 1.100 + version: "1.0", 1.101 + name: "Test 7", 1.102 + bootstrap: "true", 1.103 + targetApplications: [{ 1.104 + id: "xpcshell@tests.mozilla.org", 1.105 + minVersion: "2", 1.106 + maxVersion: "2" 1.107 + }] 1.108 +}; 1.109 + 1.110 +// The default theme 1.111 +var theme1 = { 1.112 + id: "theme1@tests.mozilla.org", 1.113 + version: "1.0", 1.114 + name: "Theme 1", 1.115 + internalName: "classic/1.0", 1.116 + targetApplications: [{ 1.117 + id: "xpcshell@tests.mozilla.org", 1.118 + minVersion: "2", 1.119 + maxVersion: "2" 1.120 + }] 1.121 +}; 1.122 + 1.123 +// The selected theme 1.124 +var theme2 = { 1.125 + id: "theme2@tests.mozilla.org", 1.126 + version: "1.0", 1.127 + name: "Theme 2", 1.128 + internalName: "test/1.0", 1.129 + targetApplications: [{ 1.130 + id: "xpcshell@tests.mozilla.org", 1.131 + minVersion: "2", 1.132 + maxVersion: "2" 1.133 + }] 1.134 +}; 1.135 + 1.136 +const profileDir = gProfD.clone(); 1.137 +profileDir.append("extensions"); 1.138 + 1.139 +function run_test() { 1.140 + do_test_pending(); 1.141 + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2"); 1.142 + 1.143 + writeInstallRDFForExtension(addon1, profileDir); 1.144 + writeInstallRDFForExtension(addon2, profileDir); 1.145 + writeInstallRDFForExtension(addon3, profileDir); 1.146 + writeInstallRDFForExtension(addon4, profileDir); 1.147 + writeInstallRDFForExtension(addon5, profileDir); 1.148 + writeInstallRDFForExtension(addon6, profileDir); 1.149 + writeInstallRDFForExtension(addon7, profileDir); 1.150 + writeInstallRDFForExtension(theme1, profileDir); 1.151 + writeInstallRDFForExtension(theme2, profileDir); 1.152 + 1.153 + // Create and configure the HTTP server. 1.154 + testserver.registerDirectory("/addons/", do_get_file("addons")); 1.155 + 1.156 + // Startup the profile and setup the initial state 1.157 + startupManager(); 1.158 + 1.159 + AddonManager.getAddonsByIDs(["addon2@tests.mozilla.org", 1.160 + "addon3@tests.mozilla.org", 1.161 + "addon4@tests.mozilla.org", 1.162 + "addon7@tests.mozilla.org", 1.163 + "theme2@tests.mozilla.org"], function([a2, a3, a4, 1.164 + a7, t2]) { 1.165 + // Set up the initial state 1.166 + a2.userDisabled = true; 1.167 + a4.userDisabled = true; 1.168 + a7.userDisabled = true; 1.169 + t2.userDisabled = false; 1.170 + a3.findUpdates({ 1.171 + onUpdateFinished: function() { 1.172 + a4.findUpdates({ 1.173 + onUpdateFinished: function() { 1.174 + do_execute_soon(run_test_1); 1.175 + } 1.176 + }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE); 1.177 + } 1.178 + }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE); 1.179 + }); 1.180 +} 1.181 + 1.182 +function end_test() { 1.183 + testserver.stop(do_test_finished); 1.184 +} 1.185 + 1.186 +function run_test_1() { 1.187 + restartManager(); 1.188 + 1.189 + AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", 1.190 + "addon2@tests.mozilla.org", 1.191 + "addon3@tests.mozilla.org", 1.192 + "addon4@tests.mozilla.org", 1.193 + "addon5@tests.mozilla.org", 1.194 + "addon6@tests.mozilla.org", 1.195 + "addon7@tests.mozilla.org", 1.196 + "theme1@tests.mozilla.org", 1.197 + "theme2@tests.mozilla.org"], function([a1, a2, a3, 1.198 + a4, a5, a6, 1.199 + a7, t1, t2]) { 1.200 + do_check_neq(a1, null); 1.201 + do_check_true(a1.isActive); 1.202 + do_check_false(a1.userDisabled); 1.203 + do_check_false(a1.appDisabled); 1.204 + do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE); 1.205 + 1.206 + do_check_neq(a2, null); 1.207 + do_check_false(a2.isActive); 1.208 + do_check_true(a2.userDisabled); 1.209 + do_check_false(a2.appDisabled); 1.210 + do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE); 1.211 + 1.212 + do_check_neq(a3, null); 1.213 + do_check_true(a3.isActive); 1.214 + do_check_false(a3.userDisabled); 1.215 + do_check_false(a3.appDisabled); 1.216 + do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE); 1.217 + 1.218 + do_check_neq(a4, null); 1.219 + do_check_false(a4.isActive); 1.220 + do_check_true(a4.userDisabled); 1.221 + do_check_false(a4.appDisabled); 1.222 + do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE); 1.223 + 1.224 + do_check_neq(a5, null); 1.225 + do_check_false(a5.isActive); 1.226 + do_check_false(a5.userDisabled); 1.227 + do_check_true(a5.appDisabled); 1.228 + do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE); 1.229 + 1.230 + do_check_neq(a6, null); 1.231 + do_check_true(a6.isActive); 1.232 + do_check_false(a6.userDisabled); 1.233 + do_check_false(a6.appDisabled); 1.234 + do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE); 1.235 + 1.236 + do_check_neq(a7, null); 1.237 + do_check_false(a7.isActive); 1.238 + do_check_true(a7.userDisabled); 1.239 + do_check_false(a7.appDisabled); 1.240 + do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE); 1.241 + 1.242 + do_check_neq(t1, null); 1.243 + do_check_false(t1.isActive); 1.244 + do_check_true(t1.userDisabled); 1.245 + do_check_false(t1.appDisabled); 1.246 + do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE); 1.247 + 1.248 + do_check_neq(t2, null); 1.249 + do_check_true(t2.isActive); 1.250 + do_check_false(t2.userDisabled); 1.251 + do_check_false(t2.appDisabled); 1.252 + do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE); 1.253 + 1.254 + do_execute_soon(run_test_1_modified_db); 1.255 + }); 1.256 +} 1.257 + 1.258 + 1.259 +function run_test_1_modified_db() { 1.260 + // After restarting the database won't be open so we can alter 1.261 + // the schema 1.262 + shutdownManager(); 1.263 + changeXPIDBVersion(100); 1.264 + startupManager(); 1.265 + 1.266 + // Accessing the add-ons should open and recover the database. Since 1.267 + // migration occurs everything should be recovered correctly 1.268 + AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", 1.269 + "addon2@tests.mozilla.org", 1.270 + "addon3@tests.mozilla.org", 1.271 + "addon4@tests.mozilla.org", 1.272 + "addon5@tests.mozilla.org", 1.273 + "addon6@tests.mozilla.org", 1.274 + "addon7@tests.mozilla.org", 1.275 + "theme1@tests.mozilla.org", 1.276 + "theme2@tests.mozilla.org"], function([a1, a2, a3, 1.277 + a4, a5, a6, 1.278 + a7, t1, t2]) { 1.279 + do_check_neq(a1, null); 1.280 + do_check_true(a1.isActive); 1.281 + do_check_false(a1.userDisabled); 1.282 + do_check_false(a1.appDisabled); 1.283 + do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE); 1.284 + 1.285 + do_check_neq(a2, null); 1.286 + do_check_false(a2.isActive); 1.287 + do_check_true(a2.userDisabled); 1.288 + do_check_false(a2.appDisabled); 1.289 + do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE); 1.290 + 1.291 + do_check_neq(a3, null); 1.292 + do_check_true(a3.isActive); 1.293 + do_check_false(a3.userDisabled); 1.294 + do_check_false(a3.appDisabled); 1.295 + do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE); 1.296 + 1.297 + do_check_neq(a4, null); 1.298 + do_check_false(a4.isActive); 1.299 + do_check_true(a4.userDisabled); 1.300 + do_check_false(a4.appDisabled); 1.301 + do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE); 1.302 + 1.303 + do_check_neq(a5, null); 1.304 + do_check_false(a5.isActive); 1.305 + do_check_false(a5.userDisabled); 1.306 + do_check_true(a5.appDisabled); 1.307 + do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE); 1.308 + 1.309 + do_check_neq(a6, null); 1.310 + do_check_true(a6.isActive); 1.311 + do_check_false(a6.userDisabled); 1.312 + do_check_false(a6.appDisabled); 1.313 + do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE); 1.314 + 1.315 + do_check_neq(a7, null); 1.316 + do_check_false(a7.isActive); 1.317 + do_check_true(a7.userDisabled); 1.318 + do_check_false(a7.appDisabled); 1.319 + do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE); 1.320 + 1.321 + do_check_neq(t1, null); 1.322 + do_check_false(t1.isActive); 1.323 + do_check_true(t1.userDisabled); 1.324 + do_check_false(t1.appDisabled); 1.325 + do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE); 1.326 + 1.327 + do_check_neq(t2, null); 1.328 + do_check_true(t2.isActive); 1.329 + do_check_false(t2.userDisabled); 1.330 + do_check_false(t2.appDisabled); 1.331 + do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE); 1.332 + 1.333 + do_execute_soon(run_test_1_after_rebuild); 1.334 + }); 1.335 +} 1.336 + 1.337 +function run_test_1_after_rebuild() { 1.338 + restartManager(); 1.339 + 1.340 + AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", 1.341 + "addon2@tests.mozilla.org", 1.342 + "addon3@tests.mozilla.org", 1.343 + "addon4@tests.mozilla.org", 1.344 + "addon5@tests.mozilla.org", 1.345 + "addon6@tests.mozilla.org", 1.346 + "addon7@tests.mozilla.org", 1.347 + "theme1@tests.mozilla.org", 1.348 + "theme2@tests.mozilla.org"], function([a1, a2, a3, 1.349 + a4, a5, a6, 1.350 + a7, t1, t2]) { 1.351 + do_check_neq(a1, null); 1.352 + do_check_true(a1.isActive); 1.353 + do_check_false(a1.userDisabled); 1.354 + do_check_false(a1.appDisabled); 1.355 + do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE); 1.356 + 1.357 + do_check_neq(a2, null); 1.358 + do_check_false(a2.isActive); 1.359 + do_check_true(a2.userDisabled); 1.360 + do_check_false(a2.appDisabled); 1.361 + do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE); 1.362 + 1.363 + do_check_neq(a3, null); 1.364 + do_check_true(a3.isActive); 1.365 + do_check_false(a3.userDisabled); 1.366 + do_check_false(a3.appDisabled); 1.367 + do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE); 1.368 + 1.369 + do_check_neq(a4, null); 1.370 + do_check_false(a4.isActive); 1.371 + do_check_true(a4.userDisabled); 1.372 + do_check_false(a4.appDisabled); 1.373 + do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE); 1.374 + 1.375 + do_check_neq(a5, null); 1.376 + do_check_false(a5.isActive); 1.377 + do_check_false(a5.userDisabled); 1.378 + do_check_true(a5.appDisabled); 1.379 + do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE); 1.380 + 1.381 + do_check_neq(a6, null); 1.382 + do_check_true(a6.isActive); 1.383 + do_check_false(a6.userDisabled); 1.384 + do_check_false(a6.appDisabled); 1.385 + do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE); 1.386 + 1.387 + do_check_neq(a7, null); 1.388 + do_check_false(a7.isActive); 1.389 + do_check_true(a7.userDisabled); 1.390 + do_check_false(a7.appDisabled); 1.391 + do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE); 1.392 + 1.393 + do_check_neq(t1, null); 1.394 + do_check_false(t1.isActive); 1.395 + do_check_true(t1.userDisabled); 1.396 + do_check_false(t1.appDisabled); 1.397 + do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE); 1.398 + 1.399 + do_check_neq(t2, null); 1.400 + do_check_true(t2.isActive); 1.401 + do_check_false(t2.userDisabled); 1.402 + do_check_false(t2.appDisabled); 1.403 + do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE); 1.404 + 1.405 + end_test(); 1.406 + }); 1.407 +}