Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: LayoutTests/http/tests/cachestorage/script-tests/cache-match.js

Issue 1295573002: Address test slowness with Cache Storage match()/matchAll() tests (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 if (self.importScripts) { 1 if (self.importScripts) {
2 importScripts('/resources/testharness.js'); 2 importScripts('/resources/testharness.js');
3 importScripts('/resources/testharness-helpers.js'); 3 importScripts('/resources/testharness-helpers.js');
4 importScripts('../resources/test-helpers.js'); 4 importScripts('../resources/test-helpers.js');
5 } 5 }
6 6
7 // A set of Request/Response pairs to be used with prepopulated_cache_test().
8 var simple_entries = [
9 {
10 name: 'a',
11 request: new Request('http://example.com/a'),
12 response: new Response('')
13 },
14
15 {
16 name: 'b',
17 request: new Request('http://example.com/b'),
18 response: new Response('')
19 },
20
21 {
22 name: 'a_with_query',
23 request: new Request('http://example.com/a?q=r'),
24 response: new Response('')
25 },
26
27 {
28 name: 'A',
29 request: new Request('http://example.com/A'),
30 response: new Response('')
31 },
32
33 {
34 name: 'a_https',
35 request: new Request('https://example.com/a'),
36 response: new Response('')
37 },
38
39 {
40 name: 'a_org',
41 request: new Request('http://example.org/a'),
42 response: new Response('')
43 },
44
45 {
46 name: 'cat',
47 request: new Request('http://example.com/cat'),
48 response: new Response('')
49 },
50
51 {
52 name: 'catmandu',
53 request: new Request('http://example.com/catmandu'),
54 response: new Response('')
55 },
56
57 {
58 name: 'cat_num_lives',
59 request: new Request('http://example.com/cat?lives=9'),
60 response: new Response('')
61 },
62
63 {
64 name: 'cat_in_the_hat',
65 request: new Request('http://example.com/cat/in/the/hat'),
66 response: new Response('')
67 },
68
69 {
70 name: 'secret_cat',
71 request: new Request('http://tom:jerry@example.com/cat'),
72 response: new Response('')
73 },
74
75 {
76 name: 'top_secret_cat',
77 request: new Request('http://tom:j3rry@example.com/cat'),
78 response: new Response('')
79 },
80 {
81 name: 'non_2xx_response',
82 request: new Request('http://example.com/non2xx'),
83 response: new Response('', {status: 404, statusText: 'nope'})
84 },
85
86 {
87 name: 'error_response',
88 request: new Request('http://example.com/error'),
89 response: Response.error()
90 },
91 ];
92
93 // A set of Request/Response pairs to be used with prepopulated_cache_test().
94 // These contain a mix of test cases that use Vary headers.
95 var vary_entries = [
96 {
97 name: 'vary_cookie_is_cookie',
98 request: new Request('http://example.com/c',
99 {headers: {'Cookies': 'is-for-cookie'}}),
100 response: new Response('',
101 {headers: {'Vary': 'Cookies'}})
102 },
103
104 {
105 name: 'vary_cookie_is_good',
106 request: new Request('http://example.com/c',
107 {headers: {'Cookies': 'is-good-enough-for-me'}}),
108 response: new Response('',
109 {headers: {'Vary': 'Cookies'}})
110 },
111
112 {
113 name: 'vary_cookie_absent',
114 request: new Request('http://example.com/c'),
115 response: new Response('',
116 {headers: {'Vary': 'Cookies'}})
117 },
118
119 {
120 name: 'vary_wildcard',
121 request: new Request('http://example.com/c',
122 {headers: {'Cookies': 'x', 'X-Key': '1'}}),
123 response: new Response('',
124 {headers: {'Vary': '*'}})
125 }
126 ];
127
128 prepopulated_cache_test(simple_entries, function(cache, entries) {
129 return cache.matchAll('not-present-in-the-cache')
130 .then(function(result) {
131 assert_array_equivalent(
132 result, [],
133 'Cache.matchAll should resolve with an empty array on failure.');
134 });
135 }, 'Cache.matchAll with no matching entries');
136
137 prepopulated_cache_test(simple_entries, function(cache, entries) { 7 prepopulated_cache_test(simple_entries, function(cache, entries) {
138 return cache.match('not-present-in-the-cache') 8 return cache.match('not-present-in-the-cache')
139 .then(function(result) { 9 .then(function(result) {
140 assert_equals(result, undefined, 10 assert_equals(result, undefined,
141 'Cache.match failures should resolve with undefined.'); 11 'Cache.match failures should resolve with undefined.');
142 }); 12 });
143 }, 'Cache.match with no matching entries'); 13 }, 'Cache.match with no matching entries');
144 14
145 prepopulated_cache_test(simple_entries, function(cache, entries) { 15 prepopulated_cache_test(simple_entries, function(cache, entries) {
146 return cache.matchAll(entries.a.request.url)
147 .then(function(result) {
148 assert_array_equivalent(result, [entries.a.response],
149 'Cache.matchAll should match by URL.');
150 });
151 }, 'Cache.matchAll with URL');
152
153 prepopulated_cache_test(simple_entries, function(cache, entries) {
154 return cache.match(entries.a.request.url) 16 return cache.match(entries.a.request.url)
155 .then(function(result) { 17 .then(function(result) {
156 assert_object_equals_fixed(result, entries.a.response, 18 assert_object_equals_fixed(result, entries.a.response,
157 'Cache.match should match by URL.'); 19 'Cache.match should match by URL.');
158 }); 20 });
159 }, 'Cache.match with URL'); 21 }, 'Cache.match with URL');
160 22
161 prepopulated_cache_test(simple_entries, function(cache, entries) { 23 prepopulated_cache_test(simple_entries, function(cache, entries) {
162 return cache.matchAll(entries.a.request)
163 .then(function(result) {
164 assert_array_equivalent(result, [entries.a.response],
165 'Cache.matchAll should match by Request.');
166 });
167 }, 'Cache.matchAll with Request');
168
169 prepopulated_cache_test(simple_entries, function(cache, entries) {
170 return cache.match(entries.a.request) 24 return cache.match(entries.a.request)
171 .then(function(result) { 25 .then(function(result) {
172 assert_object_equals_fixed(result, entries.a.response, 26 assert_object_equals_fixed(result, entries.a.response,
173 'Cache.match should match by Request.'); 27 'Cache.match should match by Request.');
174 }); 28 });
175 }, 'Cache.match with Request'); 29 }, 'Cache.match with Request');
176 30
177 prepopulated_cache_test(simple_entries, function(cache, entries) { 31 prepopulated_cache_test(simple_entries, function(cache, entries) {
178 return cache.matchAll(new Request(entries.a.request.url))
179 .then(function(result) {
180 assert_array_equivalent(result, [entries.a.response],
181 'Cache.matchAll should match by Request.');
182 });
183 }, 'Cache.matchAll with new Request');
184
185 prepopulated_cache_test(simple_entries, function(cache, entries) {
186 return cache.match(new Request(entries.a.request.url)) 32 return cache.match(new Request(entries.a.request.url))
187 .then(function(result) { 33 .then(function(result) {
188 assert_object_equals_fixed(result, entries.a.response, 34 assert_object_equals_fixed(result, entries.a.response,
189 'Cache.match should match by Request.'); 35 'Cache.match should match by Request.');
190 }); 36 });
191 }, 'Cache.match with new Request'); 37 }, 'Cache.match with new Request');
192 38
193 prepopulated_cache_test(simple_entries, function(cache, entries) { 39 prepopulated_cache_test(simple_entries, function(cache, entries) {
194 return cache.matchAll(entries.a.request,
195 {ignoreSearch: true})
196 .then(function(result) {
197 assert_array_equivalent(
198 result,
199 [
200 entries.a.response,
201 entries.a_with_query.response
202 ],
203 'Cache.matchAll with ignoreSearch should ignore the ' +
204 'search parameters of cached request.');
205 });
206 },
207 'Cache.matchAll with ignoreSearch option (request with no search ' +
208 'parameters)');
209
210 prepopulated_cache_test(simple_entries, function(cache, entries) {
211 return cache.match(entries.a.request, 40 return cache.match(entries.a.request,
212 {ignoreSearch: true}) 41 {ignoreSearch: true})
213 .then(function(result) { 42 .then(function(result) {
214 assert_object_in_array( 43 assert_object_in_array(
215 result, 44 result,
216 [ 45 [
217 entries.a.response, 46 entries.a.response,
218 entries.a_with_query.response 47 entries.a_with_query.response
219 ], 48 ],
220 'Cache.match with ignoreSearch should ignore the ' + 49 'Cache.match with ignoreSearch should ignore the ' +
221 'search parameters of cached request.'); 50 'search parameters of cached request.');
222 }); 51 });
223 }, 52 },
224 'Cache.match with ignoreSearch option (request with no search ' + 53 'Cache.match with ignoreSearch option (request with no search ' +
225 'parameters)'); 54 'parameters)');
226 55
227 prepopulated_cache_test(simple_entries, function(cache, entries) { 56 prepopulated_cache_test(simple_entries, function(cache, entries) {
228 return cache.matchAll(entries.a_with_query.request,
229 {ignoreSearch: true})
230 .then(function(result) {
231 assert_array_equivalent(
232 result,
233 [
234 entries.a.response,
235 entries.a_with_query.response
236 ],
237 'Cache.matchAll with ignoreSearch should ignore the ' +
238 'search parameters of request.');
239 });
240 },
241 'Cache.matchAll with ignoreSearch option (request with search parameter)');
242
243 prepopulated_cache_test(simple_entries, function(cache, entries) {
244 return cache.match(entries.a_with_query.request, 57 return cache.match(entries.a_with_query.request,
245 {ignoreSearch: true}) 58 {ignoreSearch: true})
246 .then(function(result) { 59 .then(function(result) {
247 assert_object_in_array( 60 assert_object_in_array(
248 result, 61 result,
249 [ 62 [
250 entries.a.response, 63 entries.a.response,
251 entries.a_with_query.response 64 entries.a_with_query.response
252 ], 65 ],
253 'Cache.match with ignoreSearch should ignore the ' + 66 'Cache.match with ignoreSearch should ignore the ' +
254 'search parameters of request.'); 67 'search parameters of request.');
255 }); 68 });
256 }, 69 },
257 'Cache.match with ignoreSearch option (request with search parameter)'); 70 'Cache.match with ignoreSearch option (request with search parameter)');
258 71
259 prepopulated_cache_test(simple_entries, function(cache, entries) { 72 prepopulated_cache_test(simple_entries, function(cache, entries) {
260 return cache.matchAll(entries.cat.request.url + '#mouse')
261 .then(function(result) {
262 assert_array_equivalent(
263 result,
264 [
265 entries.cat.response,
266 ],
267 'Cache.matchAll should ignore URL fragment.');
268 });
269 }, 'Cache.matchAll with URL containing fragment');
270
271 prepopulated_cache_test(simple_entries, function(cache, entries) {
272 return cache.match(entries.cat.request.url + '#mouse') 73 return cache.match(entries.cat.request.url + '#mouse')
273 .then(function(result) { 74 .then(function(result) {
274 assert_object_equals_fixed(result, entries.cat.response, 75 assert_object_equals_fixed(result, entries.cat.response,
275 'Cache.match should ignore URL fragment.'); 76 'Cache.match should ignore URL fragment.');
276 }); 77 });
277 }, 'Cache.match with URL containing fragment'); 78 }, 'Cache.match with URL containing fragment');
278 79
279 prepopulated_cache_test(simple_entries, function(cache, entries) { 80 prepopulated_cache_test(simple_entries, function(cache, entries) {
280 return cache.matchAll('http')
281 .then(function(result) {
282 assert_array_equivalent(
283 result, [],
284 'Cache.matchAll should treat query as a URL and not ' +
285 'just a string fragment.');
286 });
287 }, 'Cache.matchAll with string fragment "http" as query');
288
289 prepopulated_cache_test(simple_entries, function(cache, entries) {
290 return cache.match('http') 81 return cache.match('http')
291 .then(function(result) { 82 .then(function(result) {
292 assert_equals( 83 assert_equals(
293 result, undefined, 84 result, undefined,
294 'Cache.match should treat query as a URL and not ' + 85 'Cache.match should treat query as a URL and not ' +
295 'just a string fragment.'); 86 'just a string fragment.');
296 }); 87 });
297 }, 'Cache.match with string fragment "http" as query'); 88 }, 'Cache.match with string fragment "http" as query');
298 89
299 prepopulated_cache_test(simple_entries, function(cache, entries) { 90 prepopulated_cache_test(simple_entries, function(cache, entries) {
300 return cache.matchAll(entries.secret_cat.request.url)
301 .then(function(result) {
302 assert_array_equivalent(
303 result, [entries.secret_cat.response],
304 'Cache.matchAll should not ignore embedded credentials');
305 });
306 }, 'Cache.matchAll with URL containing credentials');
307
308 prepopulated_cache_test(simple_entries, function(cache, entries) {
309 return cache.match(entries.secret_cat.request.url) 91 return cache.match(entries.secret_cat.request.url)
310 .then(function(result) { 92 .then(function(result) {
311 assert_object_equals_fixed( 93 assert_object_equals_fixed(
312 result, entries.secret_cat.response, 94 result, entries.secret_cat.response,
313 'Cache.match should not ignore embedded credentials'); 95 'Cache.match should not ignore embedded credentials');
314 }); 96 });
315 }, 'Cache.match with URL containing credentials'); 97 }, 'Cache.match with URL containing credentials');
316 98
317 prepopulated_cache_test(vary_entries, function(cache, entries) { 99 prepopulated_cache_test(vary_entries, function(cache, entries) {
318 return cache.matchAll('http://example.com/c')
319 .then(function(result) {
320 assert_array_equivalent(
321 result,
322 [
323 entries.vary_wildcard.response,
324 entries.vary_cookie_absent.response
325 ],
326 'Cache.matchAll should exclude matches if a vary header is ' +
327 'missing in the query request, but is present in the cached ' +
328 'request.');
329 })
330
331 .then(function() {
332 return cache.matchAll(
333 new Request('http://example.com/c',
334 {headers: {'Cookies': 'none-of-the-above'}}));
335 })
336 .then(function(result) {
337 assert_array_equivalent(
338 result,
339 [
340 entries.vary_wildcard.response
341 ],
342 'Cache.matchAll should exclude matches if a vary header is ' +
343 'missing in the cached request, but is present in the query ' +
344 'request.');
345 })
346
347 .then(function() {
348 return cache.matchAll(
349 new Request('http://example.com/c',
350 {headers: {'Cookies': 'is-for-cookie'}}));
351 })
352 .then(function(result) {
353 assert_array_equivalent(
354 result,
355 [entries.vary_cookie_is_cookie.response],
356 'Cache.matchAll should match the entire header if a vary header ' +
357 'is present in both the query and cached requests.');
358 });
359 }, 'Cache.matchAll with responses containing "Vary" header');
360
361 prepopulated_cache_test(vary_entries, function(cache, entries) {
362 return cache.match('http://example.com/c') 100 return cache.match('http://example.com/c')
363 .then(function(result) { 101 .then(function(result) {
364 assert_object_in_array( 102 assert_object_in_array(
365 result, 103 result,
366 [ 104 [
367 entries.vary_wildcard.response, 105 entries.vary_wildcard.response,
368 entries.vary_cookie_absent.response 106 entries.vary_cookie_absent.response
369 ], 107 ],
370 'Cache.match should honor "Vary" header.'); 108 'Cache.match should honor "Vary" header.');
371 }); 109 });
372 }, 'Cache.match with responses containing "Vary" header'); 110 }, 'Cache.match with responses containing "Vary" header');
373 111
374 prepopulated_cache_test(vary_entries, function(cache, entries) {
375 return cache.matchAll('http://example.com/c',
376 {ignoreVary: true})
377 .then(function(result) {
378 assert_array_equivalent(
379 result,
380 [
381 entries.vary_cookie_is_cookie.response,
382 entries.vary_cookie_is_good.response,
383 entries.vary_cookie_absent.response,
384 entries.vary_wildcard.response
385 ],
386 'Cache.matchAll should honor "ignoreVary" parameter.');
387 });
388 }, 'Cache.matchAll with "ignoreVary" parameter');
389
390 cache_test(function(cache) { 112 cache_test(function(cache) {
391 var request = new Request('http://example.com'); 113 var request = new Request('http://example.com');
392 var response; 114 var response;
393 var request_url = new URL('../resources/simple.txt', location.href).href; 115 var request_url = new URL('../resources/simple.txt', location.href).href;
394 return fetch(request_url) 116 return fetch(request_url)
395 .then(function(fetch_result) { 117 .then(function(fetch_result) {
396 response = fetch_result; 118 response = fetch_result;
397 assert_equals( 119 assert_equals(
398 response.url, request_url, 120 response.url, request_url,
399 '[https://fetch.spec.whatwg.org/#dom-response-url] ' + 121 '[https://fetch.spec.whatwg.org/#dom-response-url] ' +
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 var response = entries.error_response.response; 193 var response = entries.error_response.response;
472 return cache.match(entries.error_response.request.url) 194 return cache.match(entries.error_response.request.url)
473 .then(function(result) { 195 .then(function(result) {
474 assert_object_equals_fixed( 196 assert_object_equals_fixed(
475 result, entries.error_response.response, 197 result, entries.error_response.response,
476 'Cache.match should return a Response object that has the ' + 198 'Cache.match should return a Response object that has the ' +
477 'same properties as a stored network error response.'); 199 'same properties as a stored network error response.');
478 }); 200 });
479 }, 'Cache.match with a network error Response'); 201 }, 'Cache.match with a network error Response');
480 202
481 // Helpers ---
482
483 // Run |test_function| with a Cache object as its only parameter. Prior to the
484 // call, the Cache is populated by cache entries from |entries|. The latter is
485 // expected to be an Object mapping arbitrary keys to objects of the form
486 // {request: <Request object>, response: <Response object>}. There's no
487 // guarantee on the order in which entries will be added to the cache.
488 //
489 // |test_function| should return a Promise that can be used with promise_test.
490 function prepopulated_cache_test(entries, test_function, description) {
491 cache_test(function(cache) {
492 var p = Promise.resolve();
493 var hash = {};
494 entries.forEach(function(entry) {
495 p = p.then(function() {
496 return cache.put(entry.request.clone(),
497 entry.response.clone())
498 .catch(function(e) {
499 assert_unreached('Test setup failed for entry ' +
500 entry.name + ': ' + e);
501 });
502 });
503 hash[entry.name] = entry;
504 });
505 p = p.then(function() {
506 assert_equals(Object.keys(hash).length, entries.length);
507 });
508
509 return p.then(function() {
510 return test_function(cache, hash);
511 });
512 }, description);
513 }
514
515 done(); 203 done();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698