browser/experiments/test/xpcshell/test_activate.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://testing-common/httpd.js");
     7 Cu.import("resource:///modules/experiments/Experiments.jsm");
     9 const FILE_MANIFEST            = "experiments.manifest";
    10 const SEC_IN_ONE_DAY  = 24 * 60 * 60;
    11 const MS_IN_ONE_DAY   = SEC_IN_ONE_DAY * 1000;
    13 let gProfileDir = null;
    14 let gHttpServer = null;
    15 let gHttpRoot   = null;
    16 let gReporter   = null;
    17 let gPolicy     = null;
    19 function ManifestEntry(data) {
    20   this.id        = data.id        || EXPERIMENT1_ID;
    21   this.xpiURL    = data.xpiURL    || gHttpRoot + EXPERIMENT1_XPI_NAME;
    22   this.xpiHash   = data.xpiHash   || EXPERIMENT1_XPI_SHA1;
    23   this.appName   = data.appName   || ["XPCShell"];
    24   this.channel   = data.appName   || ["nightly"];
    25   this.startTime = data.startTime || new Date(2010, 0, 1, 12).getTime() / 1000;
    26   this.endTime   = data.endTime   || new Date(9001, 0, 1, 12).getTime() / 1000;
    27   this.maxActiveSeconds = data.maxActiveSeconds || 5 * SEC_IN_ONE_DAY;
    28 }
    30 function run_test() {
    31   run_next_test();
    32 }
    34 add_task(function* test_setup() {
    35   loadAddonManager();
    36   gProfileDir = do_get_profile();
    37   gPolicy = new Experiments.Policy();
    39   gHttpServer = new HttpServer();
    40   gHttpServer.start(-1);
    41   let port = gHttpServer.identity.primaryPort;
    42   gHttpRoot = "http://localhost:" + port + "/";
    43   gHttpServer.registerDirectory("/", do_get_cwd());
    44   do_register_cleanup(() => gHttpServer.stop(() => {}));
    46   gReporter = yield getReporter("json_payload_simple");
    47   yield gReporter.collectMeasurements();
    48   let payload = yield gReporter.getJSONPayload(true);
    49   do_register_cleanup(() => gReporter._shutdown());
    51   patchPolicy(gPolicy, {
    52     updatechannel: () => "nightly",
    53     healthReportPayload: () => Promise.resolve(payload),
    54   });
    56   Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true);
    57   Services.prefs.setIntPref(PREF_LOGGING_LEVEL, 0);
    58   Services.prefs.setBoolPref(PREF_LOGGING_DUMP, true);
    60   let experiments = new Experiments.Experiments();
    61 });
    63 function isApplicable(experiment) {
    64   let deferred = Promise.defer();
    65   experiment.isApplicable().then(
    66     result => deferred.resolve({ applicable: true,  reason: null }),
    67     reason => deferred.resolve({ applicable: false, reason: reason })
    68   );
    70   return deferred.promise;
    71 }
    73 add_task(function* test_startStop() {
    74   let baseDate  = new Date(2014, 5, 1, 12);
    75   let startDate = futureDate(baseDate, 30 * MS_IN_ONE_DAY);
    76   let endDate   = futureDate(baseDate, 60 * MS_IN_ONE_DAY);
    77   let manifestData = new ManifestEntry({
    78     startTime:        dateToSeconds(startDate),
    79     endTime:          dateToSeconds(endDate),
    80     maxActiveSeconds: 10 * SEC_IN_ONE_DAY,
    81   });
    82   let experiment = new Experiments.ExperimentEntry(gPolicy);
    83   experiment.initFromManifestData(manifestData);
    85   // We need to associate it with the singleton so the onInstallStarted
    86   // Addon Manager listener will know about it.
    87   Experiments.instance()._experiments = new Map();
    88   Experiments.instance()._experiments.set(experiment.id, experiment);
    90   let result;
    92   defineNow(gPolicy, baseDate);
    93   result = yield isApplicable(experiment);
    94   Assert.equal(result.applicable, false, "Experiment should not be applicable.");
    95   Assert.equal(experiment.enabled, false, "Experiment should not be enabled.");
    97   let addons = yield getExperimentAddons();
    98   Assert.equal(addons.length, 0, "No experiment add-ons are installed.");
   100   defineNow(gPolicy, futureDate(startDate, 5 * MS_IN_ONE_DAY));
   101   result = yield isApplicable(experiment);
   102   Assert.equal(result.applicable, true, "Experiment should now be applicable.");
   103   Assert.equal(experiment.enabled, false, "Experiment should not be enabled.");
   105   let changes = yield experiment.start();
   106   Assert.equal(changes, experiment.ADDON_CHANGE_INSTALL, "Add-on was installed.");
   107   addons = yield getExperimentAddons();
   108   Assert.equal(experiment.enabled, true, "Experiment should now be enabled.");
   109   Assert.equal(addons.length, 1, "1 experiment add-on is installed.");
   110   Assert.equal(addons[0].id, experiment._addonId, "The add-on is the one we expect.");
   111   Assert.equal(addons[0].userDisabled, false, "The add-on is not userDisabled.");
   112   Assert.ok(addons[0].isActive, "The add-on is active.");
   114   changes = yield experiment.stop();
   115   Assert.equal(changes, experiment.ADDON_CHANGE_UNINSTALL, "Add-on was uninstalled.");
   116   addons = yield getExperimentAddons();
   117   Assert.equal(experiment.enabled, false, "Experiment should not be enabled.");
   118   Assert.equal(addons.length, 0, "Experiment should be uninstalled from the Addon Manager.");
   120   changes = yield experiment.start();
   121   Assert.equal(changes, experiment.ADDON_CHANGE_INSTALL, "Add-on was installed.");
   122   addons = yield getExperimentAddons();
   123   Assert.equal(experiment.enabled, true, "Experiment should now be enabled.");
   124   Assert.equal(addons.length, 1, "1 experiment add-on is installed.");
   125   Assert.equal(addons[0].id, experiment._addonId, "The add-on is the one we expect.");
   126   Assert.equal(addons[0].userDisabled, false, "The add-on is not userDisabled.");
   127   Assert.ok(addons[0].isActive, "The add-on is active.");
   129   let result = yield experiment.shouldStop();
   130   Assert.equal(result.shouldStop, false, "shouldStop should be false.");
   131   Assert.equal(experiment.enabled, true, "Experiment should be enabled.");
   132   addons = yield getExperimentAddons();
   133   Assert.equal(addons.length, 1, "Experiment still in add-ons manager.");
   134   Assert.ok(addons[0].isActive, "The add-on is still active.");
   136   defineNow(gPolicy, futureDate(endDate, MS_IN_ONE_DAY));
   137   result = yield experiment.shouldStop();
   138   Assert.equal(result.shouldStop, true, "shouldStop should now be true.");
   139   changes = yield experiment.stop();
   140   Assert.equal(changes, experiment.ADDON_CHANGE_UNINSTALL, "Add-on should be uninstalled.");
   141   Assert.equal(experiment.enabled, false, "Experiment should be disabled.");
   142   addons = yield getExperimentAddons();
   143   Assert.equal(addons.length, 0, "Experiment add-on is uninstalled.");
   145   // Ensure hash validation works.
   146   // We set an incorrect hash and expect the install to fail.
   147   experiment._manifestData.xpiHash = "sha1:41014dcc66b4dcedcd973491a1530a32f0517d8a";
   148   let errored = false;
   149   try {
   150     yield experiment.start();
   151   } catch (ex) {
   152     errored = true;
   153   }
   154   Assert.ok(experiment._failedStart, "Experiment failed to start.");
   155   Assert.ok(errored, "start() threw an exception.");
   157   // Make sure "ignore hashes" mode works.
   158   gPolicy.ignoreHashes = true;
   159   let changes = yield experiment.start();
   160   Assert.equal(changes, experiment.ADDON_CHANGE_INSTALL);
   161   yield experiment.stop();
   162   gPolicy.ignoreHashes = false;
   163 });

mercurial