services/sync/tests/unit/test_errorhandler_eol.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

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 });

mercurial