services/sync/tests/unit/test_syncstoragerequest.js

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:ffe777f8b31c
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
3
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");
10
11 function run_test() {
12 Log.repository.getLogger("Sync.RESTRequest").level = Log.Level.Trace;
13 initTestLogging();
14
15 ensureLegacyIdentityManager();
16
17 run_next_test();
18 }
19
20 add_test(function test_user_agent_desktop() {
21 let handler = httpd_handler(200, "OK");
22 let server = httpd_setup({"/resource": handler});
23
24 let expectedUA = Services.appinfo.name + "/" + Services.appinfo.version +
25 " FxSync/" + WEAVE_VERSION + "." +
26 Services.appinfo.appBuildID + ".desktop";
27
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 });
37
38 add_test(function test_user_agent_mobile() {
39 let handler = httpd_handler(200, "OK");
40 let server = httpd_setup({"/resource": handler});
41
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";
46
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 });
56
57 add_test(function test_auth() {
58 let handler = httpd_handler(200, "OK");
59 let server = httpd_setup({"/resource": handler});
60
61 setBasicCredentials("johndoe", "ilovejane", "XXXXXXXXX");
62
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"));
68
69 Svc.Prefs.reset("");
70
71 server.stop(run_next_test);
72 });
73 });
74
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});
85
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 });
96
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});
106
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 });
112
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 });
121
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});
131
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 });
137
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 });
146
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});
156
157 let quotaValue;
158 function onQuota(subject) {
159 quotaValue = subject;
160 }
161 Svc.Obs.add("weave:service:quota:remaining", onQuota);
162
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 });
172
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});
181
182 let request = new SyncStorageRequest(server.baseURI + "/resource");
183
184 // Aborting a request that hasn't been sent yet is pointless and will throw.
185 do_check_throws(function () {
186 request.abort();
187 });
188
189 function throwy() {
190 do_throw("Shouldn't have gotten here!");
191 }
192
193 Svc.Obs.add("weave:service:backoff:interval", throwy);
194 Svc.Obs.add("weave:service:quota:remaining", throwy);
195 request.onProgress = request.onComplete = throwy;
196
197 request.get();
198 request.abort();
199 do_check_eq(request.status, request.ABORTED);
200
201 // Aborting an already aborted request is pointless and will throw.
202 do_check_throws(function () {
203 request.abort();
204 });
205
206 Utils.nextTick(function () {
207 // Verify that we didn't try to process any of the values.
208 do_check_eq(SyncStorageRequest.serverTime, undefined);
209
210 Svc.Obs.remove("weave:service:backoff:interval", throwy);
211 Svc.Obs.remove("weave:service:quota:remaining", throwy);
212
213 server.stop(run_next_test);
214 });
215 });

mercurial