services/sync/tests/unit/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", this);
     7 Cu.import("resource://gre/modules/Preferences.jsm", this);
     8 Cu.import("resource://gre/modules/Promise.jsm", this);
     9 Cu.import("resource://services-sync/main.js", this);
    10 Cu.import("resource://services-sync/healthreport.jsm", this);
    11 Cu.import("resource://testing-common/services-common/logging.js", this);
    12 Cu.import("resource://testing-common/services/healthreport/utils.jsm", this);
    14 function run_test() {
    15   initTestLogging();
    17   run_next_test();
    18 }
    20 add_task(function test_constructor() {
    21   let provider = new SyncProvider();
    22 });
    24 // Provider can initialize and de-initialize properly.
    25 add_task(function* test_init() {
    26   let storage = yield Metrics.Storage("init");
    27   let provider = new SyncProvider();
    28   yield provider.init(storage);
    29   yield provider.shutdown();
    30   yield storage.close();
    31 });
    33 add_task(function* test_collect() {
    34   let storage = yield Metrics.Storage("collect");
    35   let provider = new SyncProvider();
    36   yield provider.init(storage);
    38   // Initially nothing should be configured.
    39   let now = new Date();
    40   yield provider.collectDailyData();
    42   let m = provider.getMeasurement("sync", 1);
    43   let values = yield m.getValues();
    44   Assert.equal(values.days.size, 1);
    45   Assert.ok(values.days.hasDay(now));
    46   let day = values.days.getDay(now);
    47   Assert.ok(day.has("enabled"));
    48   Assert.ok(day.has("activeProtocol"));
    49   Assert.ok(day.has("preferredProtocol"));
    50   Assert.equal(day.get("enabled"), 0);
    51   Assert.equal(day.get("preferredProtocol"), "1.5");
    52   Assert.equal(day.get("activeProtocol"), "1.5",
    53                "Protocol without setup should be FX Accounts version.");
    55   // Now check for old Sync setup.
    56   let branch = new Preferences("services.sync.");
    57   branch.set("username", "foo");
    58   branch.reset("fxaccounts.enabled");
    59   yield provider.collectDailyData();
    60   values = yield m.getValues();
    61   Assert.equal(values.days.getDay(now).get("activeProtocol"), "1.1",
    62                "Protocol with old Sync setup is correct.");
    64   Assert.equal(Weave.Status.__authManager, undefined, "Detect code changes");
    66   // Let's enable Sync so we can get more useful data.
    67   // We need to do this because the FHR probe only records more info if Sync
    68   // is configured properly.
    69   Weave.Service.identity.account = "johndoe";
    70   Weave.Service.identity.basicPassword = "ilovejane";
    71   Weave.Service.identity.syncKey = Weave.Utils.generatePassphrase();
    72   Weave.Service.clusterURL = "http://localhost/";
    73   Assert.equal(Weave.Status.checkSetup(), Weave.STATUS_OK);
    75   yield provider.collectDailyData();
    76   values = yield m.getValues();
    77   day = values.days.getDay(now);
    78   Assert.equal(day.get("enabled"), 1);
    80   // An empty account should have 1 device: us.
    81   let dm = provider.getMeasurement("devices", 1);
    82   values = yield dm.getValues();
    83   Assert.ok(values.days.hasDay(now));
    84   day = values.days.getDay(now);
    85   Assert.equal(day.size, 1);
    86   let engine = Weave.Service.clientsEngine;
    87   Assert.ok(engine);
    88   Assert.ok(day.has(engine.localType));
    89   Assert.equal(day.get(engine.localType), 1);
    91   // Add some devices and ensure they show up.
    92   engine._store._remoteClients["id1"] = {type: "mobile"};
    93   engine._store._remoteClients["id2"] = {type: "tablet"};
    94   engine._store._remoteClients["id3"] = {type: "mobile"};
    96   yield provider.collectDailyData();
    97   values = yield dm.getValues();
    98   day = values.days.getDay(now);
   100   let expected = {
   101     "foobar": 0,
   102     "tablet": 1,
   103     "mobile": 2,
   104     "desktop": 0,
   105   };
   107   for (let type in expected) {
   108     let count = expected[type];
   110     if (engine.localType == type) {
   111       count++;
   112     }
   114     if (!count) {
   115       Assert.ok(!day.has(type));
   116     } else {
   117       Assert.ok(day.has(type));
   118       Assert.equal(day.get(type), count);
   119     }
   120   }
   122   engine._store._remoteClients = {};
   124   yield provider.shutdown();
   125   yield storage.close();
   126 });
   128 add_task(function* test_sync_events() {
   129   let storage = yield Metrics.Storage("sync_events");
   130   let provider = new SyncProvider();
   131   yield provider.init(storage);
   133   let m = provider.getMeasurement("sync", 1);
   135   for (let i = 0; i < 5; i++) {
   136     Services.obs.notifyObservers(null, "weave:service:sync:start", null);
   137   }
   139   for (let i = 0; i < 3; i++) {
   140     Services.obs.notifyObservers(null, "weave:service:sync:finish", null);
   141   }
   143   for (let i = 0; i < 2; i++) {
   144     Services.obs.notifyObservers(null, "weave:service:sync:error", null);
   145   }
   147   // Wait for storage to complete.
   148   yield m.storage.enqueueOperation(() => {
   149     return Promise.resolve();
   150   });
   152   let values = yield m.getValues();
   153   let now = new Date();
   154   Assert.ok(values.days.hasDay(now));
   155   let day = values.days.getDay(now);
   157   Assert.ok(day.has("syncStart"));
   158   Assert.ok(day.has("syncSuccess"));
   159   Assert.ok(day.has("syncError"));
   160   Assert.equal(day.get("syncStart"), 5);
   161   Assert.equal(day.get("syncSuccess"), 3);
   162   Assert.equal(day.get("syncError"), 2);
   164   yield provider.shutdown();
   165   yield storage.close();
   166 });
   168 add_task(function* test_healthreporter_json() {
   169   let reporter = yield getHealthReporter("healthreporter_json");
   170   yield reporter.init();
   171   try {
   172     yield reporter._providerManager.registerProvider(new SyncProvider());
   173     yield reporter.collectMeasurements();
   174     let payload = yield reporter.getJSONPayload(true);
   175     let now = new Date();
   176     let today = reporter._formatDate(now);
   178     Assert.ok(today in payload.data.days);
   179     let day = payload.data.days[today];
   181     Assert.ok("org.mozilla.sync.sync" in day);
   182     Assert.ok("org.mozilla.sync.devices" in day);
   184     let devices = day["org.mozilla.sync.devices"];
   185     let engine = Weave.Service.clientsEngine;
   186     Assert.ok(engine);
   187     let type = engine.localType;
   188     Assert.ok(type);
   189     Assert.ok(type in devices);
   190     Assert.equal(devices[type], 1);
   191   } finally {
   192     reporter._shutdown();
   193   }
   194 });

mercurial