browser/experiments/test/xpcshell/test_previous_provider.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/ */
     4 "use strict";
     6 Cu.import("resource://gre/modules/Promise.jsm");
     7 Cu.import("resource:///modules/experiments/Experiments.jsm");
     8 Cu.import("resource://testing-common/httpd.js");
    10 let gDataRoot;
    11 let gHttpServer;
    12 let gManifestObject;
    14 function run_test() {
    15   run_next_test();
    16 }
    18 add_task(function test_setup() {
    19   loadAddonManager();
    20   do_get_profile();
    22   gHttpServer = new HttpServer();
    23   gHttpServer.start(-1);
    24   let httpRoot = "http://localhost:" + gHttpServer.identity.primaryPort + "/";
    25   gDataRoot = httpRoot + "data/";
    26   gHttpServer.registerDirectory("/data/", do_get_cwd());
    27   gHttpServer.registerPathHandler("/manifests/handler", (req, res) => {
    28     res.setStatusLine(null, 200, "OK");
    29     res.write(JSON.stringify(gManifestObject));
    30     res.processAsync();
    31     res.finish();
    32   });
    33   do_register_cleanup(() => gHttpServer.stop(() => {}));
    35   Services.prefs.setBoolPref("experiments.enabled", true);
    36   Services.prefs.setCharPref("experiments.manifest.uri",
    37                              httpRoot + "manifests/handler");
    38   Services.prefs.setBoolPref("experiments.logging.dump", true);
    39   Services.prefs.setCharPref("experiments.logging.level", "Trace");
    40   disableCertificateChecks();
    41 });
    43 add_task(function* test_provider_basic() {
    44   let e = Experiments.instance();
    46   let provider = new Experiments.PreviousExperimentProvider(e);
    47   e._setPreviousExperimentsProvider(provider);
    49   let deferred = Promise.defer();
    50   provider.getAddonsByTypes(["experiment"], (addons) => {
    51     deferred.resolve(addons);
    52   });
    53   let addons = yield deferred.promise;
    54   Assert.ok(Array.isArray(addons), "getAddonsByTypes returns an Array.");
    55   Assert.equal(addons.length, 0, "No previous add-ons returned.");
    57   gManifestObject = {
    58     version: 1,
    59     experiments: [
    60       {
    61         id: EXPERIMENT1_ID,
    62         xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME,
    63         xpiHash: EXPERIMENT1_XPI_SHA1,
    64         startTime: Date.now() / 1000 - 60,
    65         endTime: Date.now() / 1000 + 60,
    66         maxActiveSeconds: 60,
    67         appName: ["XPCShell"],
    68         channel: [e._policy.updatechannel()],
    69       },
    70     ],
    71   };
    73   yield e.updateManifest();
    75   deferred = Promise.defer();
    76   provider.getAddonsByTypes(["experiment"], (addons) => {
    77     deferred.resolve(addons);
    78   });
    79   addons = yield deferred.promise;
    80   Assert.equal(addons.length, 0, "Still no previous experiment.");
    82   let experiments = yield e.getExperiments();
    83   Assert.equal(experiments.length, 1, "1 experiment present.");
    84   Assert.ok(experiments[0].active, "It is active.");
    86   // Deactivate it.
    87   defineNow(e._policy, new Date(gManifestObject.experiments[0].endTime * 1000 + 1000));
    88   yield e.updateManifest();
    90   experiments = yield e.getExperiments();
    91   Assert.equal(experiments.length, 1, "1 experiment present.");
    92   Assert.equal(experiments[0].active, false, "It isn't active.");
    94   deferred = Promise.defer();
    95   provider.getAddonsByTypes(["experiment"], (addons) => {
    96     deferred.resolve(addons);
    97   });
    98   addons = yield deferred.promise;
    99   Assert.equal(addons.length, 1, "1 previous add-on known.");
   100   Assert.equal(addons[0].id, EXPERIMENT1_ID, "ID matches expected.");
   102   deferred = Promise.defer();
   103   provider.getAddonByID(EXPERIMENT1_ID, (addon) => {
   104     deferred.resolve(addon);
   105   });
   106   let addon = yield deferred.promise;
   107   Assert.ok(addon, "We got an add-on from its ID.");
   108   Assert.equal(addon.id, EXPERIMENT1_ID, "ID matches expected.");
   109   Assert.ok(addon.appDisabled, "Add-on is a previous experiment.");
   110   Assert.ok(addon.userDisabled, "Add-on is disabled.");
   111   Assert.equal(addon.type, "experiment", "Add-on is an experiment.");
   112   Assert.equal(addon.isActive, false, "Add-on is not active.");
   113   Assert.equal(addon.permissions, 0, "Add-on has no permissions.");
   115   deferred = Promise.defer();
   116   AddonManager.getAddonsByTypes(["experiment"], (addons) => {
   117     deferred.resolve(addons);
   118   });
   119   addons = yield deferred.promise;
   120   Assert.equal(addons.length, 1, "Got 1 experiment from add-on manager.");
   121   Assert.equal(addons[0].id, EXPERIMENT1_ID, "ID matches expected.");
   122   Assert.ok(addons[0].appDisabled, "It is a previous experiment add-on.");
   123 });
   125 add_task(function* test_active_and_previous() {
   126   // Building on the previous test, activate experiment 2.
   127   let e = Experiments.instance();
   128   let provider = new Experiments.PreviousExperimentProvider(e);
   129   e._setPreviousExperimentsProvider(provider);
   131   gManifestObject = {
   132     version: 1,
   133     experiments: [
   134       {
   135         id: EXPERIMENT2_ID,
   136         xpiURL: gDataRoot + EXPERIMENT2_XPI_NAME,
   137         xpiHash: EXPERIMENT2_XPI_SHA1,
   138         startTime: Date.now() / 1000 - 60,
   139         endTime: Date.now() / 1000 + 60,
   140         maxActiveSeconds: 60,
   141         appName: ["XPCShell"],
   142         channel: [e._policy.updatechannel()],
   143       },
   144     ],
   145   };
   147   defineNow(e._policy, new Date());
   148   yield e.updateManifest();
   150   let experiments = yield e.getExperiments();
   151   Assert.equal(experiments.length, 2, "2 experiments known.");
   153   let deferred = Promise.defer();
   154   provider.getAddonsByTypes(["experiment"], (addons) => {
   155     deferred.resolve(addons);
   156   });
   157   let addons = yield deferred.promise;
   158   Assert.equal(addons.length, 1, "1 previous experiment.");
   160   deferred = Promise.defer();
   161   AddonManager.getAddonsByTypes(["experiment"], (addons) => {
   162     deferred.resolve(addons);
   163   });
   164   addons = yield deferred.promise;
   165   Assert.equal(addons.length, 2, "2 experiment add-ons known.");
   167   for (let addon of addons) {
   168     if (addon.id == EXPERIMENT1_ID) {
   169       Assert.equal(addon.isActive, false, "Add-on is not active.");
   170       Assert.ok(addon.appDisabled, "Should be a previous experiment.");
   171     }
   172     else if (addon.id == EXPERIMENT2_ID) {
   173       Assert.ok(addon.isActive, "Add-on is active.");
   174       Assert.ok(!addon.appDisabled, "Should not be a previous experiment.");
   175     }
   176     else {
   177       throw new Error("Unexpected add-on ID: " + addon.id);
   178     }
   179   }
   180 });

mercurial