services/healthreport/tests/xpcshell/test_provider_appinfo.js

Wed, 31 Dec 2014 07:53:36 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:53:36 +0100
branch
TOR_BUG_3246
changeset 5
4ab42b5ab56c
permissions
-rw-r--r--

Correct small whitespace inconsistency, lost while renaming variables.

     1 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/ */
     4 "use strict";
     6 const {interfaces: Ci, results: Cr, utils: Cu} = Components;
     8 Cu.import("resource://gre/modules/Metrics.jsm");
     9 Cu.import("resource://gre/modules/Services.jsm");
    10 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
    11 Cu.import("resource://gre/modules/services/healthreport/providers.jsm");
    12 Cu.import("resource://testing-common/services/healthreport/utils.jsm");
    15 function run_test() {
    16   run_next_test();
    17 }
    19 add_test(function test_constructor() {
    20   let provider = new AppInfoProvider();
    22   run_next_test();
    23 });
    25 add_task(function test_collect_smoketest() {
    26   let storage = yield Metrics.Storage("collect_smoketest");
    27   let provider = new AppInfoProvider();
    28   yield provider.init(storage);
    30   let now = new Date();
    31   yield provider.collectConstantData();
    33   let m = provider.getMeasurement("appinfo", 2);
    34   let data = yield storage.getMeasurementValues(m.id);
    35   let serializer = m.serializer(m.SERIALIZE_JSON);
    36   let d = serializer.singular(data.singular);
    38   do_check_eq(d._v, 2);
    39   do_check_eq(d.vendor, "Mozilla");
    40   do_check_eq(d.name, "xpcshell");
    41   do_check_eq(d.id, "xpcshell@tests.mozilla.org");
    42   do_check_eq(d.version, "1");
    43   do_check_eq(d.appBuildID, "20121107");
    44   do_check_eq(d.platformVersion, "p-ver");
    45   do_check_eq(d.platformBuildID, "20121106");
    46   do_check_eq(d.os, "XPCShell");
    47   do_check_eq(d.xpcomabi, "noarch-spidermonkey");
    49   do_check_eq(data.days.size, 1);
    50   do_check_true(data.days.hasDay(now));
    51   let day = data.days.getDay(now);
    52   do_check_eq(day.size, 3);
    53   do_check_true(day.has("isDefaultBrowser"));
    54   do_check_true(day.has("isTelemetryEnabled"));
    55   do_check_true(day.has("isBlocklistEnabled"));
    57   // TODO Bug 827189 Actually test this properly. On some local builds, this
    58   // is always -1 (the service throws). On buildbot, it seems to always be 0.
    59   do_check_neq(day.get("isDefaultBrowser"), 1);
    61   yield provider.shutdown();
    62   yield storage.close();
    63 });
    65 add_task(function test_record_version() {
    66   let storage = yield Metrics.Storage("record_version");
    68   let provider = new AppInfoProvider();
    69   let now = new Date();
    70   yield provider.init(storage);
    72   // The provider records information on startup.
    73   let m = provider.getMeasurement("versions", 2);
    74   let data = yield m.getValues();
    76   do_check_true(data.days.hasDay(now));
    77   let day = data.days.getDay(now);
    78   do_check_eq(day.size, 4);
    79   do_check_true(day.has("appVersion"));
    80   do_check_true(day.has("platformVersion"));
    81   do_check_true(day.has("appBuildID"));
    82   do_check_true(day.has("platformBuildID"));
    84   let value = day.get("appVersion");
    85   do_check_true(Array.isArray(value));
    86   do_check_eq(value.length, 1);
    87   let ai = getAppInfo();
    88   do_check_eq(value[0], ai.version);
    90   value = day.get("platformVersion");
    91   do_check_true(Array.isArray(value));
    92   do_check_eq(value.length, 1);
    93   do_check_eq(value[0], ai.platformVersion);
    95   value = day.get("appBuildID");
    96   do_check_true(Array.isArray(value));
    97   do_check_eq(value.length, 1);
    98   do_check_eq(value[0], ai.appBuildID);
   100   value = day.get("platformBuildID");
   101   do_check_true(Array.isArray(value));
   102   do_check_eq(value.length, 1);
   103   do_check_eq(value[0], ai.platformBuildID);
   105   yield provider.shutdown();
   106   yield storage.close();
   107 });
   109 add_task(function test_record_version_change() {
   110   let storage = yield Metrics.Storage("record_version_change");
   112   let provider = new AppInfoProvider();
   113   let now = new Date();
   114   yield provider.init(storage);
   115   yield provider.shutdown();
   117   let ai = getAppInfo();
   118   ai.version = "new app version";
   119   ai.platformVersion = "new platform version";
   120   ai.appBuildID = "new app id";
   121   ai.platformBuildID = "new platform id";
   122   updateAppInfo(ai);
   124   provider = new AppInfoProvider();
   125   yield provider.init(storage);
   127   // There should be 2 records in the versions history.
   128   let m = provider.getMeasurement("versions", 2);
   129   let data = yield m.getValues();
   130   do_check_true(data.days.hasDay(now));
   131   let day = data.days.getDay(now);
   133   let value = day.get("appVersion");
   134   do_check_true(Array.isArray(value));
   135   do_check_eq(value.length, 2);
   136   do_check_eq(value[1], "new app version");
   138   value = day.get("platformVersion");
   139   do_check_true(Array.isArray(value));
   140   do_check_eq(value.length, 2);
   141   do_check_eq(value[1], "new platform version");
   143   // There should be 2 records in the buildID history.
   144   value = day.get("appBuildID");
   145   do_check_true(Array.isArray(value));
   146   do_check_eq(value.length, 2);
   147   do_check_eq(value[1], "new app id");
   149   value = day.get("platformBuildID");
   150   do_check_true(Array.isArray(value));
   151   do_check_eq(value.length, 2);
   152   do_check_eq(value[1], "new platform id");
   154   yield provider.shutdown();
   155   yield storage.close();
   156 });
   158 add_task(function test_record_telemetry() {
   159   let storage = yield Metrics.Storage("record_telemetry");
   160   let provider;
   162   let now = new Date();
   164   Services.prefs.setBoolPref("toolkit.telemetry.enabled", true);
   165   provider = new AppInfoProvider();
   166   yield provider.init(storage);
   167   yield provider.collectConstantData();
   169   let m = provider.getMeasurement("appinfo", 2);
   170   let data = yield m.getValues();
   171   let d = yield m.serializer(m.SERIALIZE_JSON).daily(data.days.getDay(now));
   172   do_check_eq(1, d.isTelemetryEnabled);
   173   yield provider.shutdown();
   175   Services.prefs.setBoolPref("toolkit.telemetry.enabled", false);
   176   provider = new AppInfoProvider();
   177   yield provider.init(storage);
   178   yield provider.collectConstantData();
   180   m = provider.getMeasurement("appinfo", 2);
   181   data = yield m.getValues();
   182   d = yield m.serializer(m.SERIALIZE_JSON).daily(data.days.getDay(now));
   183   do_check_eq(0, d.isTelemetryEnabled);
   184   yield provider.shutdown();
   186   yield storage.close();
   187 });
   189 add_task(function test_record_blocklist() {
   190   let storage = yield Metrics.Storage("record_blocklist");
   192   let now = new Date();
   194   Services.prefs.setBoolPref("extensions.blocklist.enabled", true);
   195   let provider = new AppInfoProvider();
   196   yield provider.init(storage);
   197   yield provider.collectConstantData();
   199   let m = provider.getMeasurement("appinfo", 2);
   200   let data = yield m.getValues();
   201   let d = yield m.serializer(m.SERIALIZE_JSON).daily(data.days.getDay(now));
   202   do_check_eq(d.isBlocklistEnabled, 1);
   203   yield provider.shutdown();
   205   Services.prefs.setBoolPref("extensions.blocklist.enabled", false);
   206   provider = new AppInfoProvider();
   207   yield provider.init(storage);
   208   yield provider.collectConstantData();
   210   m = provider.getMeasurement("appinfo", 2);
   211   data = yield m.getValues();
   212   d = yield m.serializer(m.SERIALIZE_JSON).daily(data.days.getDay(now));
   213   do_check_eq(d.isBlocklistEnabled, 0);
   214   yield provider.shutdown();
   216   yield storage.close();
   217 });
   219 add_task(function test_record_app_update () {
   220   let storage = yield Metrics.Storage("record_update");
   222   Services.prefs.setBoolPref("app.update.enabled", true);
   223   Services.prefs.setBoolPref("app.update.auto", true);
   224   let provider = new AppInfoProvider();
   225   yield provider.init(storage);
   226   let now = new Date();
   227   yield provider.collectDailyData();
   229   let m = provider.getMeasurement("update", 1);
   230   let data = yield m.getValues();
   231   let d = yield m.serializer(m.SERIALIZE_JSON).daily(data.days.getDay(now));
   232   do_check_eq(d.enabled, 1);
   233   do_check_eq(d.autoDownload, 1);
   235   Services.prefs.setBoolPref("app.update.enabled", false);
   236   Services.prefs.setBoolPref("app.update.auto", false);
   238   yield provider.collectDailyData();
   239   data = yield m.getValues();
   240   d = yield m.serializer(m.SERIALIZE_JSON).daily(data.days.getDay(now));
   241   do_check_eq(d.enabled, 0);
   242   do_check_eq(d.autoDownload, 0);
   244   yield provider.shutdown();
   245   yield storage.close();
   246 });
   248 add_task(function test_healthreporter_integration () {
   249   let reporter = getHealthReporter("healthreporter_integration");
   250   yield reporter.init();
   252   try {
   253     yield reporter._providerManager.registerProviderFromType(AppInfoProvider);
   254     yield reporter.collectMeasurements();
   256     let payload = yield reporter.getJSONPayload(true);
   257     let days = payload['data']['days'];
   259     for (let [day, measurements] in Iterator(days)) {
   260       do_check_eq(Object.keys(measurements).length, 3);
   261       do_check_true("org.mozilla.appInfo.appinfo" in measurements);
   262       do_check_true("org.mozilla.appInfo.update" in measurements);
   263       do_check_true("org.mozilla.appInfo.versions" in measurements);
   264     }
   265   } finally {
   266     reporter._shutdown();
   267   }
   268 });

mercurial