services/sync/tests/unit/test_score_triggers.js

Wed, 31 Dec 2014 07:22:50 +0100

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

Correct previous dual key logic pending first delivery installment.

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 Cu.import("resource://services-sync/engines.js");
     5 Cu.import("resource://services-sync/engines/clients.js");
     6 Cu.import("resource://services-sync/constants.js");
     7 Cu.import("resource://services-sync/service.js");
     8 Cu.import("resource://services-sync/status.js");
     9 Cu.import("resource://services-sync/util.js");
    10 Cu.import("resource://testing-common/services/sync/rotaryengine.js");
    11 Cu.import("resource://testing-common/services/sync/utils.js");
    13 Service.engineManager.clear();
    14 Service.engineManager.register(RotaryEngine);
    15 let engine = Service.engineManager.get("rotary");
    16 let tracker = engine._tracker;
    17 engine.enabled = true;
    19 // Tracking info/collections.
    20 let collectionsHelper = track_collections_helper();
    21 let upd = collectionsHelper.with_updated_collection;
    23 function sync_httpd_setup() {
    24   let handlers = {};
    26   handlers["/1.1/johndoe/storage/meta/global"] =
    27     new ServerWBO("global", {}).handler();
    28   handlers["/1.1/johndoe/storage/steam"] =
    29     new ServerWBO("steam", {}).handler();
    31   handlers["/1.1/johndoe/info/collections"] = collectionsHelper.handler;
    32   delete collectionsHelper.collections.crypto;
    33   delete collectionsHelper.collections.meta;
    35   let cr = new ServerWBO("keys");
    36   handlers["/1.1/johndoe/storage/crypto/keys"] =
    37     upd("crypto", cr.handler());
    39   let cl = new ServerCollection();
    40   handlers["/1.1/johndoe/storage/clients"] =
    41     upd("clients", cl.handler());
    43   return httpd_setup(handlers);
    44 }
    46 function setUp(server) {
    47   new SyncTestingInfrastructure(server, "johndoe", "ilovejane", "sekrit");
    48 }
    50 function run_test() {
    51   initTestLogging("Trace");
    53   Log.repository.getLogger("Sync.Service").level = Log.Level.Trace;
    55   run_next_test();
    56 }
    58 add_test(function test_tracker_score_updated() {
    59   let scoreUpdated = 0;
    61   function onScoreUpdated() {
    62     scoreUpdated++;
    63   }
    65   Svc.Obs.add("weave:engine:score:updated", onScoreUpdated());
    67   try {
    68     do_check_eq(engine.score, 0);
    70     tracker.score += SCORE_INCREMENT_SMALL;
    71     do_check_eq(engine.score, SCORE_INCREMENT_SMALL);
    73     do_check_eq(scoreUpdated, 1);
    74   } finally {
    75     Svc.Obs.remove("weave:engine:score:updated", onScoreUpdated);
    76     tracker.resetScore();
    77     run_next_test();
    78   }
    79 });
    81 add_test(function test_sync_triggered() {
    82   let server = sync_httpd_setup();
    83   setUp(server);
    85   Service.login();
    87   Service.scheduler.syncThreshold = MULTI_DEVICE_THRESHOLD;
    88   Svc.Obs.add("weave:service:sync:finish", function onSyncFinish() {
    89     Svc.Obs.remove("weave:service:sync:finish", onSyncFinish);
    90     _("Sync completed!");
    91     server.stop(run_next_test);
    92   });
    94   do_check_eq(Status.login, LOGIN_SUCCEEDED);
    95   tracker.score += SCORE_INCREMENT_XLARGE;
    96 });
    98 add_test(function test_clients_engine_sync_triggered() {
    99   _("Ensure that client engine score changes trigger a sync.");
   101   // The clients engine is not registered like other engines. Therefore,
   102   // it needs special treatment throughout the code. Here, we verify the
   103   // global score tracker gives it that treatment. See bug 676042 for more.
   105   let server = sync_httpd_setup();
   106   setUp(server);
   107   Service.login();
   109   const TOPIC = "weave:service:sync:finish";
   110   Svc.Obs.add(TOPIC, function onSyncFinish() {
   111     Svc.Obs.remove(TOPIC, onSyncFinish);
   112     _("Sync due to clients engine change completed.");
   113     server.stop(run_next_test);
   114   });
   116   Service.scheduler.syncThreshold = MULTI_DEVICE_THRESHOLD;
   117   do_check_eq(Status.login, LOGIN_SUCCEEDED);
   118   Service.clientsEngine._tracker.score += SCORE_INCREMENT_XLARGE;
   119 });
   121 add_test(function test_incorrect_credentials_sync_not_triggered() {
   122   _("Ensure that score changes don't trigger a sync if Status.login != LOGIN_SUCCEEDED.");
   123   let server = sync_httpd_setup();
   124   setUp(server);
   126   // Ensure we don't actually try to sync.
   127   function onSyncStart() {
   128     do_throw("Should not get here!");
   129   }
   130   Svc.Obs.add("weave:service:sync:start", onSyncStart);
   132   // First wait >100ms (nsITimers can take up to that much time to fire, so
   133   // we can account for the timer in delayedAutoconnect) and then one event
   134   // loop tick (to account for a possible call to weave:service:sync:start).
   135   Utils.namedTimer(function() {
   136     Utils.nextTick(function() {
   137       Svc.Obs.remove("weave:service:sync:start", onSyncStart);
   139       do_check_eq(Status.login, LOGIN_FAILED_LOGIN_REJECTED);
   141       Service.startOver();
   142       server.stop(run_next_test);
   143     });
   144   }, 150, {}, "timer");
   146   // Faking incorrect credentials to prevent score update.
   147   Status.login = LOGIN_FAILED_LOGIN_REJECTED;
   148   tracker.score += SCORE_INCREMENT_XLARGE;
   149 });

mercurial