Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
4 Cu.import("resource://services-sync/service.js");
5 Cu.import("resource://services-sync/status.js");
6 Cu.import("resource://services-sync/util.js");
8 Cu.import("resource://testing-common/services/sync/fakeservices.js");
9 Cu.import("resource://testing-common/services/sync/utils.js");
11 function baseHandler(eolCode, request, response, statusCode, status, body) {
12 let alertBody = {
13 code: eolCode,
14 message: "Service is EOLed.",
15 url: "http://getfirefox.com",
16 };
17 response.setHeader("X-Weave-Timestamp", "" + new_timestamp(), false);
18 response.setHeader("X-Weave-Alert", "" + JSON.stringify(alertBody), false);
19 response.setStatusLine(request.httpVersion, statusCode, status);
20 response.bodyOutputStream.write(body, body.length);
21 }
23 function handler513(request, response) {
24 let statusCode = 513;
25 let status = "Upgrade Required";
26 let body = "{}";
27 baseHandler("hard-eol", request, response, statusCode, status, body);
28 }
30 function handler200(eolCode) {
31 return function (request, response) {
32 let statusCode = 200;
33 let status = "OK";
34 let body = "{\"meta\": 123456789010}";
35 baseHandler(eolCode, request, response, statusCode, status, body);
36 };
37 }
39 function sync_httpd_setup(infoHandler) {
40 let handlers = {
41 "/1.1/johndoe/info/collections": infoHandler,
42 };
43 return httpd_setup(handlers);
44 }
46 function setUp(server) {
47 yield configureIdentity({username: "johndoe"});
48 Service.serverURL = server.baseURI + "/";
49 Service.clusterURL = server.baseURI + "/";
50 new FakeCryptoService();
51 }
53 function run_test() {
54 run_next_test();
55 }
57 function do_check_soft_eol(eh, start) {
58 // We subtract 1000 because the stored value is in second precision.
59 do_check_true(eh.earliestNextAlert >= (start + eh.MINIMUM_ALERT_INTERVAL_MSEC - 1000));
60 do_check_eq("soft-eol", eh.currentAlertMode);
61 }
62 function do_check_hard_eol(eh, start) {
63 // We subtract 1000 because the stored value is in second precision.
64 do_check_true(eh.earliestNextAlert >= (start + eh.MINIMUM_ALERT_INTERVAL_MSEC - 1000));
65 do_check_eq("hard-eol", eh.currentAlertMode);
66 do_check_true(Status.eol);
67 }
69 add_identity_test(this, function test_200_hard() {
70 let eh = Service.errorHandler;
71 let start = Date.now();
72 let server = sync_httpd_setup(handler200("hard-eol"));
73 yield setUp(server);
75 let deferred = Promise.defer();
76 let obs = function (subject, topic, data) {
77 Svc.Obs.remove("weave:eol", obs);
78 do_check_eq("hard-eol", subject.code);
79 do_check_hard_eol(eh, start);
80 do_check_eq(Service.scheduler.eolInterval, Service.scheduler.syncInterval);
81 eh.clearServerAlerts();
82 server.stop(deferred.resolve);
83 };
85 Svc.Obs.add("weave:eol", obs);
86 Service._fetchInfo();
87 Service.scheduler.adjustSyncInterval(); // As if we failed or succeeded in syncing.
88 yield deferred.promise;
89 });
91 add_identity_test(this, function test_513_hard() {
92 let eh = Service.errorHandler;
93 let start = Date.now();
94 let server = sync_httpd_setup(handler513);
95 yield setUp(server);
97 let deferred = Promise.defer();
98 let obs = function (subject, topic, data) {
99 Svc.Obs.remove("weave:eol", obs);
100 do_check_eq("hard-eol", subject.code);
101 do_check_hard_eol(eh, start);
102 do_check_eq(Service.scheduler.eolInterval, Service.scheduler.syncInterval);
103 eh.clearServerAlerts();
104 server.stop(deferred.resolve);
105 };
107 Svc.Obs.add("weave:eol", obs);
108 try {
109 Service._fetchInfo();
110 Service.scheduler.adjustSyncInterval(); // As if we failed or succeeded in syncing.
111 } catch (ex) {
112 // Because fetchInfo will fail on a 513.
113 }
114 yield deferred.promise;
115 });
117 add_identity_test(this, function test_200_soft() {
118 let eh = Service.errorHandler;
119 let start = Date.now();
120 let server = sync_httpd_setup(handler200("soft-eol"));
121 yield setUp(server);
123 let deferred = Promise.defer();
124 let obs = function (subject, topic, data) {
125 Svc.Obs.remove("weave:eol", obs);
126 do_check_eq("soft-eol", subject.code);
127 do_check_soft_eol(eh, start);
128 do_check_eq(Service.scheduler.singleDeviceInterval, Service.scheduler.syncInterval);
129 eh.clearServerAlerts();
130 server.stop(deferred.resolve);
131 };
133 Svc.Obs.add("weave:eol", obs);
134 Service._fetchInfo();
135 Service.scheduler.adjustSyncInterval(); // As if we failed or succeeded in syncing.
136 yield deferred.promise;
137 });