@@ -35,6 +35,12 @@ Stream<List<int>> infiniteStream() async* {
3535 }
3636}
3737
38+ void validateSecurityHeaders (HttpClientResponse response) {
39+ for (final header in securityHeaders.entries) {
40+ expect (response.headers[header.key], [header.value]);
41+ }
42+ }
43+
3844Future <int > startImageServer () async {
3945 var i = 0 ;
4046 final server = await shelf_io.serve (
@@ -175,10 +181,10 @@ Future<void> main() async {
175181 imageProxyPort: imageProxyPort,
176182 imageServerPort: imageServerPort,
177183 );
184+ validateSecurityHeaders (response);
178185 expect (response.statusCode, 200 );
179186 expect (response.headers['content-type' ]! .single, 'image/jpeg' );
180187 expect (response.headers['cache-control' ]! .single, 'max-age=180, public' );
181-
182188 final hash = await sha256.bind (response).single;
183189 final expected = sha256.convert (File (jpgImagePath).readAsBytesSync ());
184190 expect (hash, expected);
@@ -191,6 +197,7 @@ Future<void> main() async {
191197 imageServerPort: imageServerPort,
192198 pathToImage: 'path/to/image.png' ,
193199 );
200+ validateSecurityHeaders (response);
194201 expect (response.statusCode, 200 );
195202 expect (response.headers['content-type' ]! .single, 'image/png' );
196203 final hash = await sha256.bind (response).single;
@@ -205,6 +212,7 @@ Future<void> main() async {
205212 imageServerPort: imageServerPort,
206213 pathToImage: 'path/to/image.svg' ,
207214 );
215+ validateSecurityHeaders (response);
208216 expect (response.statusCode, 200 );
209217 expect (response.headers['content-type' ]! .single, 'image/svg+xml' );
210218 final hash = await sha256.bind (response).single;
@@ -220,6 +228,7 @@ Future<void> main() async {
220228 // Gives no content-length
221229 pathToImage: 'okstreaming' ,
222230 );
231+ validateSecurityHeaders (response);
223232 expect (response.statusCode, 200 );
224233 expect (response.headers['content-type' ]! .single, 'image/jpeg' );
225234 final jpgFile = File (jpgImagePath).readAsBytesSync ();
@@ -239,6 +248,7 @@ Future<void> main() async {
239248 imageServerPort: imageServerPort,
240249 day: tomorrow.add (Duration (days: 1 )),
241250 );
251+ validateSecurityHeaders (response);
242252 expect (response.statusCode, 400 );
243253
244254 expect (
@@ -258,6 +268,7 @@ Future<void> main() async {
258268 day: today,
259269 disturbSignature: true ,
260270 );
271+ validateSecurityHeaders (response);
261272 expect (response.statusCode, 401 );
262273
263274 expect (await Utf8Codec ().decodeStream (response), 'Bad hmac' );
@@ -275,6 +286,7 @@ Future<void> main() async {
275286 disturbSignature: true ,
276287 pathToImage: 'next/' * 1000 + 'image.jpg' ,
277288 );
289+ validateSecurityHeaders (response);
278290 expect (response.statusCode, 400 );
279291
280292 expect (await Utf8Codec ().decodeStream (response), 'proxied url too long' );
@@ -291,6 +303,7 @@ Future<void> main() async {
291303 day: today,
292304 pathToImage: 'redirect' ,
293305 );
306+ validateSecurityHeaders (response);
294307
295308 expect (response.statusCode, 200 );
296309 final hash = await sha256.bind (response).single;
@@ -309,6 +322,7 @@ Future<void> main() async {
309322 day: today,
310323 pathToImage: 'redirectForever' ,
311324 );
325+ validateSecurityHeaders (response);
312326
313327 expect (await Utf8Codec ().decodeStream (response), 'Too many redirects.' );
314328 expect (response.statusCode, 400 );
@@ -325,6 +339,7 @@ Future<void> main() async {
325339 day: today,
326340 pathToImage: 'serverError' ,
327341 );
342+ validateSecurityHeaders (response);
328343
329344 expect (
330345 await Utf8Codec ().decodeStream (response),
@@ -344,6 +359,7 @@ Future<void> main() async {
344359 day: today,
345360 pathToImage: 'doesntexist' ,
346361 );
362+ validateSecurityHeaders (response);
347363
348364 expect (await Utf8Codec ().decodeStream (response), 'Not found' );
349365 expect (response.statusCode, 404 );
@@ -360,6 +376,7 @@ Future<void> main() async {
360376 day: today,
361377 pathToImage: 'worksSecondTime' ,
362378 );
379+ validateSecurityHeaders (response);
363380
364381 expect (response.statusCode, 200 );
365382 final hash = await sha256.bind (response).single;
@@ -378,6 +395,7 @@ Future<void> main() async {
378395 day: today,
379396 pathToImage: 'canBeCachedLong' ,
380397 );
398+ validateSecurityHeaders (response);
381399
382400 expect (response.statusCode, 200 );
383401 // The proxy doesn't cache as long time as the original.
@@ -398,6 +416,7 @@ Future<void> main() async {
398416 day: today,
399417 pathToImage: 'timeout' ,
400418 );
419+ validateSecurityHeaders (response);
401420
402421 expect (response.statusCode, 400 );
403422 // The proxy doesn't cache as long time as the original.
@@ -410,6 +429,7 @@ Future<void> main() async {
410429 day: today,
411430 pathToImage: 'timeoutstreaming' ,
412431 );
432+ validateSecurityHeaders (response);
413433
414434 expect (response.statusCode, 400 );
415435 // The proxy doesn't cache as long time as the original.
@@ -427,6 +447,7 @@ Future<void> main() async {
427447 day: today,
428448 pathToImage: 'toobig' ,
429449 );
450+ validateSecurityHeaders (response);
430451
431452 expect (response.statusCode, 400 );
432453 // The proxy doesn't cache as long time as the original.
@@ -439,6 +460,7 @@ Future<void> main() async {
439460 day: today,
440461 pathToImage: 'toobigstreaming' ,
441462 );
463+ validateSecurityHeaders (response);
442464
443465 expect (response.statusCode, 400 );
444466 // The proxy doesn't cache as long time as the original.
0 commit comments