services/sync/tests/unit/test_syncstoragerequest.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 Cu.import("resource://gre/modules/Log.jsm");
     5 Cu.import("resource://services-sync/constants.js");
     6 Cu.import("resource://services-sync/rest.js");
     7 Cu.import("resource://services-sync/service.js");
     8 Cu.import("resource://services-sync/util.js");
     9 Cu.import("resource://testing-common/services/sync/utils.js");
    11 function run_test() {
    12   Log.repository.getLogger("Sync.RESTRequest").level = Log.Level.Trace;
    13   initTestLogging();
    15   ensureLegacyIdentityManager();
    17   run_next_test();
    18 }
    20 add_test(function test_user_agent_desktop() {
    21   let handler = httpd_handler(200, "OK");
    22   let server = httpd_setup({"/resource": handler});
    24   let expectedUA = Services.appinfo.name + "/" + Services.appinfo.version +
    25                    " FxSync/" + WEAVE_VERSION + "." +
    26                    Services.appinfo.appBuildID + ".desktop";
    28   let request = new SyncStorageRequest(server.baseURI + "/resource");
    29   request.onComplete = function onComplete(error) {
    30     do_check_eq(error, null);
    31     do_check_eq(this.response.status, 200);
    32     do_check_eq(handler.request.getHeader("User-Agent"), expectedUA);
    33     server.stop(run_next_test);
    34   };
    35   do_check_eq(request.get(), request);
    36 });
    38 add_test(function test_user_agent_mobile() {
    39   let handler = httpd_handler(200, "OK");
    40   let server = httpd_setup({"/resource": handler});
    42   Svc.Prefs.set("client.type", "mobile");
    43   let expectedUA = Services.appinfo.name + "/" + Services.appinfo.version +
    44                    " FxSync/" + WEAVE_VERSION + "." +
    45                    Services.appinfo.appBuildID + ".mobile";
    47   let request = new SyncStorageRequest(server.baseURI + "/resource");
    48   request.get(function (error) {
    49     do_check_eq(error, null);
    50     do_check_eq(this.response.status, 200);
    51     do_check_eq(handler.request.getHeader("User-Agent"), expectedUA);
    52     Svc.Prefs.resetBranch("");
    53     server.stop(run_next_test);
    54   });
    55 });
    57 add_test(function test_auth() {
    58   let handler = httpd_handler(200, "OK");
    59   let server = httpd_setup({"/resource": handler});
    61   setBasicCredentials("johndoe", "ilovejane", "XXXXXXXXX");
    63   let request = Service.getStorageRequest(server.baseURI + "/resource");
    64   request.get(function (error) {
    65     do_check_eq(error, null);
    66     do_check_eq(this.response.status, 200);
    67     do_check_true(basic_auth_matches(handler.request, "johndoe", "ilovejane"));
    69     Svc.Prefs.reset("");
    71     server.stop(run_next_test);
    72   });
    73 });
    75 /**
    76  *  The X-Weave-Timestamp header updates SyncStorageRequest.serverTime.
    77  */
    78 add_test(function test_weave_timestamp() {
    79   const TIMESTAMP = 1274380461;
    80   function handler(request, response) {
    81     response.setHeader("X-Weave-Timestamp", "" + TIMESTAMP, false);
    82     response.setStatusLine(request.httpVersion, 200, "OK");
    83   }
    84   let server = httpd_setup({"/resource": handler});
    86   do_check_eq(SyncStorageRequest.serverTime, undefined);
    87   let request = new SyncStorageRequest(server.baseURI + "/resource");
    88   request.get(function (error) {
    89     do_check_eq(error, null);
    90     do_check_eq(this.response.status, 200);
    91     do_check_eq(SyncStorageRequest.serverTime, TIMESTAMP);
    92     delete SyncStorageRequest.serverTime;
    93     server.stop(run_next_test);
    94   });
    95 });
    97 /**
    98  * The X-Weave-Backoff header notifies an observer.
    99  */
   100 add_test(function test_weave_backoff() {
   101   function handler(request, response) {
   102     response.setHeader("X-Weave-Backoff", '600', false);
   103     response.setStatusLine(request.httpVersion, 200, "OK");
   104   }
   105   let server = httpd_setup({"/resource": handler});
   107   let backoffInterval;
   108   Svc.Obs.add("weave:service:backoff:interval", function onBackoff(subject) {
   109     Svc.Obs.remove("weave:service:backoff:interval", onBackoff);
   110     backoffInterval = subject;
   111   });
   113   let request = new SyncStorageRequest(server.baseURI + "/resource");
   114   request.get(function (error) {
   115     do_check_eq(error, null);
   116     do_check_eq(this.response.status, 200);
   117     do_check_eq(backoffInterval, 600);
   118     server.stop(run_next_test);
   119   });
   120 });
   122 /**
   123  * X-Weave-Quota-Remaining header notifies observer on successful requests.
   124  */
   125 add_test(function test_weave_quota_notice() {
   126   function handler(request, response) {
   127     response.setHeader("X-Weave-Quota-Remaining", '1048576', false);
   128     response.setStatusLine(request.httpVersion, 200, "OK");
   129   }
   130   let server = httpd_setup({"/resource": handler});
   132   let quotaValue;
   133   Svc.Obs.add("weave:service:quota:remaining", function onQuota(subject) {
   134     Svc.Obs.remove("weave:service:quota:remaining", onQuota);
   135     quotaValue = subject;
   136   });
   138   let request = new SyncStorageRequest(server.baseURI + "/resource");
   139   request.get(function (error) {
   140     do_check_eq(error, null);
   141     do_check_eq(this.response.status, 200);
   142     do_check_eq(quotaValue, 1048576);
   143     server.stop(run_next_test);
   144   });
   145 });
   147 /**
   148  * X-Weave-Quota-Remaining header doesn't notify observer on failed requests.
   149  */
   150 add_test(function test_weave_quota_error() {
   151   function handler(request, response) {
   152     response.setHeader("X-Weave-Quota-Remaining", '1048576', false);
   153     response.setStatusLine(request.httpVersion, 400, "Bad Request");
   154   }
   155   let server = httpd_setup({"/resource": handler});
   157   let quotaValue;
   158   function onQuota(subject) {
   159     quotaValue = subject;
   160   }
   161   Svc.Obs.add("weave:service:quota:remaining", onQuota);
   163   let request = new SyncStorageRequest(server.baseURI + "/resource");
   164   request.get(function (error) {
   165     do_check_eq(error, null);
   166     do_check_eq(this.response.status, 400);
   167     do_check_eq(quotaValue, undefined);
   168     Svc.Obs.remove("weave:service:quota:remaining", onQuota);
   169     server.stop(run_next_test);
   170   });
   171 });
   173 add_test(function test_abort() {
   174   function handler(request, response) {
   175     response.setHeader("X-Weave-Timestamp", "" + TIMESTAMP, false);
   176     response.setHeader("X-Weave-Quota-Remaining", '1048576', false);
   177     response.setHeader("X-Weave-Backoff", '600', false);
   178     response.setStatusLine(request.httpVersion, 200, "OK");
   179   }
   180   let server = httpd_setup({"/resource": handler});
   182   let request = new SyncStorageRequest(server.baseURI + "/resource");
   184   // Aborting a request that hasn't been sent yet is pointless and will throw.
   185   do_check_throws(function () {
   186     request.abort();
   187   });
   189   function throwy() {
   190     do_throw("Shouldn't have gotten here!");
   191   }
   193   Svc.Obs.add("weave:service:backoff:interval", throwy);
   194   Svc.Obs.add("weave:service:quota:remaining", throwy);
   195   request.onProgress = request.onComplete = throwy;
   197   request.get();
   198   request.abort();
   199   do_check_eq(request.status, request.ABORTED);
   201   // Aborting an already aborted request is pointless and will throw.
   202   do_check_throws(function () {
   203     request.abort();
   204   });
   206   Utils.nextTick(function () {
   207     // Verify that we didn't try to process any of the values.
   208     do_check_eq(SyncStorageRequest.serverTime, undefined);
   210     Svc.Obs.remove("weave:service:backoff:interval", throwy);
   211     Svc.Obs.remove("weave:service:quota:remaining", throwy);
   213     server.stop(run_next_test);
   214   });
   215 });

mercurial