services/healthreport/tests/xpcshell/test_provider_searches.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 {utils: Cu} = Components;
     8 Cu.import("resource://gre/modules/Metrics.jsm");
     9 Cu.import("resource://gre/modules/Services.jsm");
    10 let bsp = Cu.import("resource://gre/modules/services/healthreport/providers.jsm");
    12 const DEFAULT_ENGINES = [
    13   {name: "Amazon.com",    identifier: "amazondotcom"},
    14   {name: "Bing",          identifier: "bing"},
    15   {name: "Google",        identifier: "google"},
    16   {name: "Yahoo",         identifier: "yahoo"},
    17   {name: "Foobar Search", identifier: "foobar"},
    18 ];
    20 function MockSearchCountMeasurement() {
    21   bsp.SearchCountMeasurement3.call(this);
    22 }
    23 MockSearchCountMeasurement.prototype = {
    24   __proto__: bsp.SearchCountMeasurement3.prototype,
    25 };
    27 function MockSearchesProvider() {
    28   SearchesProvider.call(this);
    29 }
    30 MockSearchesProvider.prototype = {
    31   __proto__: SearchesProvider.prototype,
    32   measurementTypes: [MockSearchCountMeasurement],
    33 };
    35 function run_test() {
    36   run_next_test();
    37 }
    39 add_test(function test_constructor() {
    40   let provider = new SearchesProvider();
    42   run_next_test();
    43 });
    45 add_task(function* test_record() {
    46   let storage = yield Metrics.Storage("record");
    47   let provider = new MockSearchesProvider();
    49   yield provider.init(storage);
    51   let now = new Date();
    53   // Record searches for all but one of our defaults, and one engine that's
    54   // not a default.
    55   for (let engine of DEFAULT_ENGINES.concat([{name: "Not Default", identifier: "notdef"}])) {
    56     if (engine.identifier == "yahoo") {
    57       continue;
    58     }
    59     yield provider.recordSearch(engine, "abouthome");
    60     yield provider.recordSearch(engine, "contextmenu");
    61     yield provider.recordSearch(engine, "newtab");
    62     yield provider.recordSearch(engine, "searchbar");
    63     yield provider.recordSearch(engine, "urlbar");
    64   }
    66   // Invalid sources should throw.
    67   let errored = false;
    68   try {
    69     yield provider.recordSearch(DEFAULT_ENGINES[0], "bad source");
    70   } catch (ex) {
    71     errored = true;
    72   } finally {
    73     do_check_true(errored);
    74   }
    76   let m = provider.getMeasurement("counts", 3);
    77   let data = yield m.getValues();
    78   do_check_eq(data.days.size, 1);
    79   do_check_true(data.days.hasDay(now));
    81   let day = data.days.getDay(now);
    82   for (let engine of DEFAULT_ENGINES) {
    83     let identifier = engine.identifier;
    84     let expected = identifier != "yahoo";
    86     for (let source of ["abouthome", "contextmenu", "searchbar", "urlbar"]) {
    87       let field = identifier + "." + source;
    88       if (expected) {
    89         do_check_true(day.has(field));
    90         do_check_eq(day.get(field), 1);
    91       } else {
    92         do_check_false(day.has(field));
    93       }
    94     }
    95   }
    97   // Also, check that our non-default engine contributed, with a computed
    98   // identifier.
    99   let identifier = "notdef";
   100   for (let source of ["abouthome", "contextmenu", "searchbar", "urlbar"]) {
   101     let field = identifier + "." + source;
   102     do_check_true(day.has(field));
   103   }
   105   yield storage.close();
   106 });
   108 add_task(function* test_includes_other_fields() {
   109   let storage = yield Metrics.Storage("includes_other_fields");
   110   let provider = new MockSearchesProvider();
   112   yield provider.init(storage);
   113   let m = provider.getMeasurement("counts", 3);
   115   // Register a search against a provider that isn't live in this session.
   116   let id = yield m.storage.registerField(m.id, "test.searchbar",
   117                                          Metrics.Storage.FIELD_DAILY_COUNTER);
   119   let testField = "test.searchbar";
   120   let now = new Date();
   121   yield m.storage.incrementDailyCounterFromFieldID(id, now);
   123   // Make sure we don't know about it.
   124   do_check_false(testField in m.fields);
   126   // But we want to include it in payloads.
   127   do_check_true(m.shouldIncludeField(testField));
   129   // And we do so.
   130   let data = yield provider.storage.getMeasurementValues(m.id);
   131   let serializer = m.serializer(m.SERIALIZE_JSON);
   132   let formatted = serializer.daily(data.days.getDay(now));
   133   do_check_true(testField in formatted);
   134   do_check_eq(formatted[testField], 1);
   136   yield storage.close();
   137 });
   139 add_task(function* test_default_search_engine() {
   140   let storage = yield Metrics.Storage("default_search_engine");
   141   let provider = new SearchesProvider();
   142   yield provider.init(storage);
   144   let m = provider.getMeasurement("engines", 1);
   146   // Ensure no collection if Telemetry not enabled.
   147   Services.prefs.setBoolPref("toolkit.telemetry.enabled", false);
   149   let now = new Date();
   150   yield provider.collectDailyData();
   152   let data = yield m.getValues();
   153   Assert.equal(data.days.hasDay(now), false);
   155   // Now enable telemetry and ensure we populate.
   156   Services.prefs.setBoolPref("toolkit.telemetry.enabled", true);
   158   yield provider.collectDailyData();
   159   data = yield m.getValues();
   160   Assert.ok(data.days.hasDay(now));
   162   let day = data.days.getDay(now);
   163   Assert.equal(day.size, 1);
   164   Assert.ok(day.has("default"));
   166   // test environment doesn't have a default engine.
   167   Assert.equal(day.get("default"), "NONE");
   169   Services.search.addEngineWithDetails("testdefault",
   170                                        "http://localhost/icon.png",
   171                                        null,
   172                                        "test description",
   173                                        "GET",
   174                                        "http://localhost/search/%s");
   175   let engine1 = Services.search.getEngineByName("testdefault");
   176   Assert.ok(engine1);
   177   Services.search.defaultEngine = engine1;
   179   yield provider.collectDailyData();
   180   data = yield m.getValues();
   181   Assert.equal(data.days.getDay(now).get("default"), "other-testdefault");
   183   yield storage.close();
   184 });

mercurial