toolkit/mozapps/extensions/test/xpcshell/test_migrate4.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.

     1 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/
     3  */
     5 // Checks that we migrate data from a previous version of the JSON database
     7 // The test extension uses an insecure update url.
     8 Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
    10 Components.utils.import("resource://testing-common/httpd.js");
    11 var testserver = new HttpServer();
    12 testserver.start(-1);
    13 gPort = testserver.identity.primaryPort;
    14 mapFile("/data/test_migrate4.rdf", testserver);
    15 testserver.registerDirectory("/addons/", do_get_file("addons"));
    17 var addon1 = {
    18   id: "addon1@tests.mozilla.org",
    19   version: "1.0",
    20   name: "Test 1",
    21   targetApplications: [{
    22     id: "xpcshell@tests.mozilla.org",
    23     minVersion: "1",
    24     maxVersion: "2"
    25   }]
    26 };
    28 var addon2 = {
    29   id: "addon2@tests.mozilla.org",
    30   version: "2.0",
    31   name: "Test 2",
    32   targetApplications: [{
    33     id: "xpcshell@tests.mozilla.org",
    34     minVersion: "1",
    35     maxVersion: "2"
    36   }]
    37 };
    39 var addon3 = {
    40   id: "addon3@tests.mozilla.org",
    41   version: "2.0",
    42   name: "Test 3",
    43   targetApplications: [{
    44     id: "xpcshell@tests.mozilla.org",
    45     minVersion: "1",
    46     maxVersion: "2"
    47   }]
    48 };
    50 var addon4 = {
    51   id: "addon4@tests.mozilla.org",
    52   version: "2.0",
    53   name: "Test 4",
    54   strictCompatibility: true,
    55   targetApplications: [{
    56     id: "xpcshell@tests.mozilla.org",
    57     minVersion: "1",
    58     maxVersion: "2"
    59   }]
    60 };
    62 var addon5 = {
    63   id: "addon5@tests.mozilla.org",
    64   version: "2.0",
    65   name: "Test 5",
    66   updateURL: "http://localhost:" + gPort + "/data/test_migrate4.rdf",
    67   targetApplications: [{
    68     id: "xpcshell@tests.mozilla.org",
    69     minVersion: "0",
    70     maxVersion: "1"
    71   }]
    72 };
    74 var addon6 = {
    75   id: "addon6@tests.mozilla.org",
    76   version: "1.0",
    77   name: "Test 6",
    78   updateURL: "http://localhost:" + gPort + "/data/test_migrate4.rdf",
    79   targetApplications: [{
    80     id: "xpcshell@tests.mozilla.org",
    81     minVersion: "0",
    82     maxVersion: "1"
    83   }]
    84 };
    86 var defaultTheme = {
    87   id: "default@tests.mozilla.org",
    88   version: "1.0",
    89   name: "Default",
    90   internalName: "classic/1.0",
    91   targetApplications: [{
    92     id: "xpcshell@tests.mozilla.org",
    93     minVersion: "1",
    94     maxVersion: "2"
    95   }]
    96 };
    98 const profileDir = gProfD.clone();
    99 profileDir.append("extensions");
   101 let oldSyncGUIDs = {};
   103 function prepare_profile() {
   104   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
   106   writeInstallRDFForExtension(addon1, profileDir);
   107   writeInstallRDFForExtension(addon2, profileDir);
   108   writeInstallRDFForExtension(addon3, profileDir);
   109   writeInstallRDFForExtension(addon4, profileDir);
   110   writeInstallRDFForExtension(addon5, profileDir);
   111   writeInstallRDFForExtension(addon6, profileDir);
   112   writeInstallRDFForExtension(defaultTheme, profileDir);
   114   startupManager();
   115   installAllFiles([do_get_addon("test_migrate8"), do_get_addon("test_migrate9")],
   116                   function() {
   117     restartManager();
   119     AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   120                                  "addon2@tests.mozilla.org",
   121                                  "addon3@tests.mozilla.org",
   122                                  "addon4@tests.mozilla.org",
   123                                  "addon5@tests.mozilla.org",
   124                                  "addon6@tests.mozilla.org",
   125                                  "addon9@tests.mozilla.org"],
   126                                  function([a1, a2, a3, a4, a5, a6, a9]) {
   127       a1.applyBackgroundUpdates = AddonManager.AUTOUPDATE_DEFAULT;
   128       a2.userDisabled = true;
   129       a2.applyBackgroundUpdates = AddonManager.AUTOUPDATE_DISABLE;
   130       a3.applyBackgroundUpdates = AddonManager.AUTOUPDATE_ENABLE;
   131       a4.userDisabled = true;
   132       a6.userDisabled = true;
   133       a9.userDisabled = false;
   135       for each (let addon in [a1, a2, a3, a4, a5, a6]) {
   136         oldSyncGUIDs[addon.id] = addon.syncGUID;
   137       }
   139       a6.findUpdates({
   140         onUpdateAvailable: function(aAddon, aInstall6) {
   141           AddonManager.getInstallForURL("http://localhost:" + gPort + "/addons/test_migrate4_7.xpi", function(aInstall7) {
   142             completeAllInstalls([aInstall6, aInstall7], function() {
   143               restartManager();
   145               AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   146                                            "addon2@tests.mozilla.org",
   147                                            "addon3@tests.mozilla.org",
   148                                            "addon4@tests.mozilla.org",
   149                                            "addon5@tests.mozilla.org",
   150                                            "addon6@tests.mozilla.org"],
   151                                            function([a1, a2, a3, a4, a5, a6]) {
   152                 a3.userDisabled = true;
   153                 a4.userDisabled = false;
   155                 a5.findUpdates({
   156                   onUpdateFinished: function() {
   157                     do_execute_soon(perform_migration);
   158                   }
   159                 }, AddonManager.UPDATE_WHEN_USER_REQUESTED);
   160               });
   161             });
   162           }, "application/x-xpinstall");
   163         }
   164       }, AddonManager.UPDATE_WHEN_USER_REQUESTED);
   165     });
   166   });
   167 }
   169 function perform_migration() {
   170   shutdownManager();
   172   // Turn on disabling for all scopes
   173   Services.prefs.setIntPref("extensions.autoDisableScopes", 15);
   175   changeXPIDBVersion(1);
   176   Services.prefs.setIntPref("extensions.databaseSchema", 1);
   178   gAppInfo.version = "2"
   179   startupManager(true);
   180   test_results();
   181 }
   183 function test_results() {
   184   check_startup_changes("installed", []);
   185   check_startup_changes("updated", []);
   186   check_startup_changes("uninstalled", []);
   187   check_startup_changes("disabled", []);
   188   check_startup_changes("enabled", []);
   190   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   191                                "addon2@tests.mozilla.org",
   192                                "addon3@tests.mozilla.org",
   193                                "addon4@tests.mozilla.org",
   194                                "addon5@tests.mozilla.org",
   195                                "addon6@tests.mozilla.org",
   196                                "addon7@tests.mozilla.org",
   197                                "addon8@tests.mozilla.org",
   198                                "addon9@tests.mozilla.org"],
   199                                function([a1, a2, a3, a4, a5, a6, a7, a8, a9]) {
   200     // addon1 was enabled
   201     do_check_neq(a1, null);
   202     do_check_eq(a1.syncGUID, oldSyncGUIDs[a1.id]);
   203     do_check_false(a1.userDisabled);
   204     do_check_false(a1.appDisabled);
   205     do_check_true(a1.isActive);
   206     do_check_eq(a1.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DEFAULT);
   207     do_check_true(a1.foreignInstall);
   208     do_check_false(a1.hasBinaryComponents);
   209     do_check_false(a1.strictCompatibility);
   211     // addon2 was disabled
   212     do_check_neq(a2, null);
   213     do_check_eq(a2.syncGUID, oldSyncGUIDs[a2.id]);
   214     do_check_true(a2.userDisabled);
   215     do_check_false(a2.appDisabled);
   216     do_check_false(a2.isActive);
   217     do_check_eq(a2.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DISABLE);
   218     do_check_true(a2.foreignInstall);
   219     do_check_false(a2.hasBinaryComponents);
   220     do_check_false(a2.strictCompatibility);
   222     // addon3 was pending-disable in the database
   223     do_check_neq(a3, null);
   224     do_check_eq(a3.syncGUID, oldSyncGUIDs[a3.id]);
   225     do_check_true(a3.userDisabled);
   226     do_check_false(a3.appDisabled);
   227     do_check_false(a3.isActive);
   228     do_check_eq(a3.applyBackgroundUpdates, AddonManager.AUTOUPDATE_ENABLE);
   229     do_check_true(a3.foreignInstall);
   230     do_check_false(a3.hasBinaryComponents);
   231     do_check_false(a3.strictCompatibility);
   233     // addon4 was pending-enable in the database
   234     do_check_neq(a4, null);
   235     do_check_eq(a4.syncGUID, oldSyncGUIDs[a4.id]);
   236     do_check_false(a4.userDisabled);
   237     do_check_false(a4.appDisabled);
   238     do_check_true(a4.isActive);
   239     do_check_eq(a4.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DEFAULT);
   240     do_check_true(a4.foreignInstall);
   241     do_check_false(a4.hasBinaryComponents);
   242     do_check_true(a4.strictCompatibility);
   244     // addon5 was enabled in the database but needed a compatibility update
   245     do_check_neq(a5, null);
   246     do_check_false(a5.userDisabled);
   247     do_check_false(a5.appDisabled);
   248     do_check_true(a5.isActive);
   249     do_check_eq(a4.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DEFAULT);
   250     do_check_true(a5.foreignInstall);
   251     do_check_false(a5.hasBinaryComponents);
   252     do_check_false(a5.strictCompatibility);
   254     // addon6 was disabled and compatible but a new version has been installed
   255     do_check_neq(a6, null);
   256     do_check_eq(a6.syncGUID, oldSyncGUIDs[a6.id]);
   257     do_check_eq(a6.version, "2.0");
   258     do_check_true(a6.userDisabled);
   259     do_check_false(a6.appDisabled);
   260     do_check_false(a6.isActive);
   261     do_check_eq(a6.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DEFAULT);
   262     do_check_true(a6.foreignInstall);
   263     do_check_eq(a6.sourceURI.spec, "http://localhost:" + gPort + "/addons/test_migrate4_6.xpi");
   264     do_check_eq(a6.releaseNotesURI.spec, "http://example.com/updateInfo.xhtml");
   265     do_check_false(a6.hasBinaryComponents);
   266     do_check_false(a6.strictCompatibility);
   268     // addon7 was installed manually
   269     do_check_neq(a7, null);
   270     do_check_eq(a7.version, "1.0");
   271     do_check_false(a7.userDisabled);
   272     do_check_false(a7.appDisabled);
   273     do_check_true(a7.isActive);
   274     do_check_eq(a7.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DEFAULT);
   275     do_check_false(a7.foreignInstall);
   276     do_check_eq(a7.sourceURI.spec, "http://localhost:" + gPort + "/addons/test_migrate4_7.xpi");
   277     do_check_eq(a7.releaseNotesURI, null);
   278     do_check_false(a7.hasBinaryComponents);
   279     do_check_false(a7.strictCompatibility);
   281     // addon8 was enabled and has binary components
   282     do_check_neq(a8, null);
   283     do_check_false(a8.userDisabled);
   284     do_check_false(a8.appDisabled);
   285     do_check_true(a8.isActive);
   286     do_check_false(a8.foreignInstall);
   287     do_check_true(a8.hasBinaryComponents);
   288     do_check_false(a8.strictCompatibility);
   290     // addon9 is the active theme
   291     do_check_neq(a9, null);
   292     do_check_false(a9.userDisabled);
   293     do_check_false(a9.appDisabled);
   294     do_check_true(a9.isActive);
   295     do_check_false(a9.foreignInstall);
   296     do_check_false(a9.hasBinaryComponents);
   297     do_check_true(a9.strictCompatibility);
   299     testserver.stop(do_test_finished);
   300   });
   301 }
   303 function run_test() {
   304   do_test_pending();
   306   prepare_profile();
   307 }

mercurial