Wed, 31 Dec 2014 07:22:50 +0100
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 });