browser/experiments/test/xpcshell/test_healthreport.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/Metrics.jsm");
     7 Cu.import("resource://gre/modules/Task.jsm");
     8 Cu.import("resource:///modules/experiments/Experiments.jsm");
     9 Cu.import("resource://testing-common/services/healthreport/utils.jsm");
    10 Cu.import("resource://testing-common/services-common/logging.js");
    12 const kMeasurementVersion = 2;
    14 function getStorageAndProvider(name) {
    15   return Task.spawn(function* get() {
    16     let storage = yield Metrics.Storage(name);
    17     let provider = new ExperimentsProvider();
    18     yield provider.init(storage);
    20     return [storage, provider];
    21   });
    22 }
    24 function run_test() {
    25   run_next_test();
    26 }
    28 add_test(function setup() {
    29   do_get_profile();
    30   initTestLogging();
    32   Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true);
    33   Services.prefs.setBoolPref(PREF_TELEMETRY_ENABLED, true);
    34   Services.prefs.setBoolPref(PREF_HEALTHREPORT_ENABLED, true);
    36   run_next_test();
    37 });
    39 add_task(function test_constructor() {
    40   Experiments.instance();
    41   yield Experiments._mainTask;
    42   let provider = new ExperimentsProvider();
    43 });
    45 add_task(function* test_init() {
    46   let storage = yield Metrics.Storage("init");
    47   let provider = new ExperimentsProvider();
    48   yield provider.init(storage);
    49   yield provider.shutdown();
    50   yield storage.close();
    51 });
    53 add_task(function* test_collect() {
    54   let [storage, provider] = yield getStorageAndProvider("no_active");
    56   // Initial state should not report anything.
    57   yield provider.collectDailyData();
    58   let m = provider.getMeasurement("info", kMeasurementVersion);
    59   let values = yield m.getValues();
    60   Assert.equal(values.days.size, 0, "Have no data if no experiments known.");
    62   // An old experiment that ended today should be reported.
    63   replaceExperiments(provider._experiments, FAKE_EXPERIMENTS_2);
    64   let now = new Date(FAKE_EXPERIMENTS_2[0].endDate);
    65   defineNow(provider._experiments._policy, now.getTime());
    67   yield provider.collectDailyData();
    68   values = yield m.getValues();
    69   Assert.equal(values.days.size, 1, "Have 1 day of data");
    70   Assert.ok(values.days.hasDay(now), "Has day the experiment ended.");
    71   let day = values.days.getDay(now);
    72   Assert.ok(day.has("lastActive"), "Has lastActive field.");
    73   Assert.equal(day.get("lastActive"), "id2", "Last active ID is sane.");
    74   Assert.strictEqual(day.get("lastActiveBranch"), undefined,
    75 		     "no branch should be set yet");
    77   // Making an experiment active replaces the lastActive value.
    78   replaceExperiments(provider._experiments, FAKE_EXPERIMENTS_1);
    79   yield provider.collectDailyData();
    80   values = yield m.getValues();
    81   day = values.days.getDay(now);
    82   Assert.equal(day.get("lastActive"), "id1", "Last active ID is the active experiment.");
    83   Assert.equal(day.get("lastActiveBranch"), "foo",
    84 	       "Experiment branch should be visible");
    86   // And make sure the observer works.
    87   replaceExperiments(provider._experiments, FAKE_EXPERIMENTS_2);
    88   Services.obs.notifyObservers(null, "experiments-changed", null);
    89   // This may not wait long enough. It relies on the SQL insert happening
    90   // in the same tick as the observer notification.
    91   yield storage.enqueueOperation(function () {
    92     return Promise.resolve();
    93   });
    95   values = yield m.getValues();
    96   day = values.days.getDay(now);
    97   Assert.equal(day.get("lastActive"), "id2", "Last active ID set by observer.");
    99   yield provider.shutdown();
   100   yield storage.close();
   101 });
   103 add_task(function* test_healthreporterJSON() {
   104   let reporter = yield getHealthReporter("healthreporterJSON");
   105   yield reporter.init();
   106   try {
   107     yield reporter._providerManager.registerProvider(new ExperimentsProvider());
   108     let experiments = Experiments.instance();
   109     defineNow(experiments._policy, Date.now());
   110     replaceExperiments(experiments, FAKE_EXPERIMENTS_1);
   111     yield reporter.collectMeasurements();
   113     let payload = yield reporter.getJSONPayload(true);
   114     let today = reporter._formatDate(reporter._policy.now());
   116     Assert.ok(today in payload.data.days, "Day in payload.");
   117     let day = payload.data.days[today];
   119     Assert.ok("org.mozilla.experiments.info" in day, "Measurement present.");
   120     let m = day["org.mozilla.experiments.info"];
   121     Assert.ok("lastActive" in m, "lastActive field present.");
   122     Assert.equal(m["lastActive"], "id1", "Last active ID proper.");
   123   } finally {
   124     reporter._shutdown();
   125   }
   126 });

mercurial