mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-10-26 13:27:27 +00:00
138 lines
4.3 KiB
JavaScript
138 lines
4.3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
Cu.import("resource://services-sync/service.js");
|
|
Cu.import("resource://services-sync/status.js");
|
|
Cu.import("resource://services-sync/util.js");
|
|
|
|
Cu.import("resource://testing-common/services/sync/fakeservices.js");
|
|
Cu.import("resource://testing-common/services/sync/utils.js");
|
|
|
|
function baseHandler(eolCode, request, response, statusCode, status, body) {
|
|
let alertBody = {
|
|
code: eolCode,
|
|
message: "Service is EOLed.",
|
|
url: "http://getfirefox.com",
|
|
};
|
|
response.setHeader("X-Weave-Timestamp", "" + new_timestamp(), false);
|
|
response.setHeader("X-Weave-Alert", "" + JSON.stringify(alertBody), false);
|
|
response.setStatusLine(request.httpVersion, statusCode, status);
|
|
response.bodyOutputStream.write(body, body.length);
|
|
}
|
|
|
|
function handler513(request, response) {
|
|
let statusCode = 513;
|
|
let status = "Upgrade Required";
|
|
let body = "{}";
|
|
baseHandler("hard-eol", request, response, statusCode, status, body);
|
|
}
|
|
|
|
function handler200(eolCode) {
|
|
return function (request, response) {
|
|
let statusCode = 200;
|
|
let status = "OK";
|
|
let body = "{\"meta\": 123456789010}";
|
|
baseHandler(eolCode, request, response, statusCode, status, body);
|
|
};
|
|
}
|
|
|
|
function sync_httpd_setup(infoHandler) {
|
|
let handlers = {
|
|
"/1.1/johndoe/info/collections": infoHandler,
|
|
};
|
|
return httpd_setup(handlers);
|
|
}
|
|
|
|
function setUp(server) {
|
|
yield configureIdentity({username: "johndoe"});
|
|
Service.serverURL = server.baseURI + "/";
|
|
Service.clusterURL = server.baseURI + "/";
|
|
new FakeCryptoService();
|
|
}
|
|
|
|
function run_test() {
|
|
run_next_test();
|
|
}
|
|
|
|
function do_check_soft_eol(eh, start) {
|
|
// We subtract 1000 because the stored value is in second precision.
|
|
do_check_true(eh.earliestNextAlert >= (start + eh.MINIMUM_ALERT_INTERVAL_MSEC - 1000));
|
|
do_check_eq("soft-eol", eh.currentAlertMode);
|
|
}
|
|
function do_check_hard_eol(eh, start) {
|
|
// We subtract 1000 because the stored value is in second precision.
|
|
do_check_true(eh.earliestNextAlert >= (start + eh.MINIMUM_ALERT_INTERVAL_MSEC - 1000));
|
|
do_check_eq("hard-eol", eh.currentAlertMode);
|
|
do_check_true(Status.eol);
|
|
}
|
|
|
|
add_identity_test(this, function test_200_hard() {
|
|
let eh = Service.errorHandler;
|
|
let start = Date.now();
|
|
let server = sync_httpd_setup(handler200("hard-eol"));
|
|
yield setUp(server);
|
|
|
|
let deferred = Promise.defer();
|
|
let obs = function (subject, topic, data) {
|
|
Svc.Obs.remove("weave:eol", obs);
|
|
do_check_eq("hard-eol", subject.code);
|
|
do_check_hard_eol(eh, start);
|
|
do_check_eq(Service.scheduler.eolInterval, Service.scheduler.syncInterval);
|
|
eh.clearServerAlerts();
|
|
server.stop(deferred.resolve);
|
|
};
|
|
|
|
Svc.Obs.add("weave:eol", obs);
|
|
Service._fetchInfo();
|
|
Service.scheduler.adjustSyncInterval(); // As if we failed or succeeded in syncing.
|
|
yield deferred.promise;
|
|
});
|
|
|
|
add_identity_test(this, function test_513_hard() {
|
|
let eh = Service.errorHandler;
|
|
let start = Date.now();
|
|
let server = sync_httpd_setup(handler513);
|
|
yield setUp(server);
|
|
|
|
let deferred = Promise.defer();
|
|
let obs = function (subject, topic, data) {
|
|
Svc.Obs.remove("weave:eol", obs);
|
|
do_check_eq("hard-eol", subject.code);
|
|
do_check_hard_eol(eh, start);
|
|
do_check_eq(Service.scheduler.eolInterval, Service.scheduler.syncInterval);
|
|
eh.clearServerAlerts();
|
|
server.stop(deferred.resolve);
|
|
};
|
|
|
|
Svc.Obs.add("weave:eol", obs);
|
|
try {
|
|
Service._fetchInfo();
|
|
Service.scheduler.adjustSyncInterval(); // As if we failed or succeeded in syncing.
|
|
} catch (ex) {
|
|
// Because fetchInfo will fail on a 513.
|
|
}
|
|
yield deferred.promise;
|
|
});
|
|
|
|
add_identity_test(this, function test_200_soft() {
|
|
let eh = Service.errorHandler;
|
|
let start = Date.now();
|
|
let server = sync_httpd_setup(handler200("soft-eol"));
|
|
yield setUp(server);
|
|
|
|
let deferred = Promise.defer();
|
|
let obs = function (subject, topic, data) {
|
|
Svc.Obs.remove("weave:eol", obs);
|
|
do_check_eq("soft-eol", subject.code);
|
|
do_check_soft_eol(eh, start);
|
|
do_check_eq(Service.scheduler.singleDeviceInterval, Service.scheduler.syncInterval);
|
|
eh.clearServerAlerts();
|
|
server.stop(deferred.resolve);
|
|
};
|
|
|
|
Svc.Obs.add("weave:eol", obs);
|
|
Service._fetchInfo();
|
|
Service.scheduler.adjustSyncInterval(); // As if we failed or succeeded in syncing.
|
|
yield deferred.promise;
|
|
});
|