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

Side by Side Diff: pkg/http_server/test/virtual_directory_test.dart

Issue 31633003: Make setDirectoryHandler and setErrorPageHandler setters, and add a jailRoot property. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Remove debug print. Created 7 years, 2 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
« no previous file with comments | « pkg/http_server/lib/src/virtual_directory.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:io'; 6 import 'dart:io';
7 7
8 import "package:http_server/http_server.dart"; 8 import "package:http_server/http_server.dart";
9 import "package:path/path.dart"; 9 import "package:path/path.dart";
10 import "package:unittest/unittest.dart"; 10 import "package:unittest/unittest.dart";
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 }); 204 });
205 } 205 }
206 }); 206 });
207 207
208 group('custom', () { 208 group('custom', () {
209 test('simple', () { 209 test('simple', () {
210 expect(HttpServer.bind('localhost', 0).then((server) { 210 expect(HttpServer.bind('localhost', 0).then((server) {
211 var dir = Directory.systemTemp.createTempSync('http_server_virtual_'); 211 var dir = Directory.systemTemp.createTempSync('http_server_virtual_');
212 var virDir = new VirtualDirectory(dir.path); 212 var virDir = new VirtualDirectory(dir.path);
213 virDir.allowDirectoryListing = true; 213 virDir.allowDirectoryListing = true;
214 virDir.setDirectoryHandler((dir2, request) { 214 virDir.directoryHandler = (dir2, request) {
215 expect(dir2, isNotNull); 215 expect(dir2, isNotNull);
216 expect(FileSystemEntity.identicalSync(dir.path, dir2.path), isTrue); 216 expect(FileSystemEntity.identicalSync(dir.path, dir2.path), isTrue);
217 request.response.write('My handler ${request.uri.path}'); 217 request.response.write('My handler ${request.uri.path}');
218 request.response.close(); 218 request.response.close();
219 }); 219 };
220 220
221 virDir.serve(server); 221 virDir.serve(server);
222 222
223 return getAsString(server.port, '/') 223 return getAsString(server.port, '/')
224 .whenComplete(() { 224 .whenComplete(() {
225 server.close(); 225 server.close();
226 dir.deleteSync(); 226 dir.deleteSync();
227 }); 227 });
228 }), completion(contains('My handler /'))); 228 }), completion(contains('My handler /')));
229 }); 229 });
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 }); 271 });
272 }), completion(equals(HttpStatus.OK))); 272 }), completion(equals(HttpStatus.OK)));
273 }); 273 });
274 274
275 group('bad-links', () { 275 group('bad-links', () {
276 test('absolute-link', () { 276 test('absolute-link', () {
277 expect(HttpServer.bind('localhost', 0).then((server) { 277 expect(HttpServer.bind('localhost', 0).then((server) {
278 var dir = 278 var dir =
279 Directory.systemTemp.createTempSync('http_server_virtual_'); 279 Directory.systemTemp.createTempSync('http_server_virtual_');
280 var file = new File('${dir.path}/file')..createSync(); 280 var file = new File('${dir.path}/file')..createSync();
281 var link = new Link('${dir.path}/dir3') 281 var link = new Link('${dir.path}/file2')
282 ..createSync('${dir.path}/file'); 282 ..createSync('${dir.path}/file');
283 var virDir = new VirtualDirectory(dir.path); 283 var virDir = new VirtualDirectory(dir.path);
284 virDir.followLinks = true; 284 virDir.followLinks = true;
285 285
286 virDir.serve(server); 286 virDir.serve(server);
287 287
288 return new HttpClient().get('localhost', 288 return new HttpClient().get('localhost',
289 server.port, 289 server.port,
290 '/dir3/file') 290 '/file2')
291 .then((request) => request.close()) 291 .then((request) => request.close())
292 .then((response) => response.drain().then( 292 .then((response) => response.drain().then(
293 (_) => response.statusCode)) 293 (_) => response.statusCode))
294 .whenComplete(() { 294 .whenComplete(() {
295 server.close(); 295 server.close();
296 dir.deleteSync(recursive: true); 296 dir.deleteSync(recursive: true);
297 }); 297 });
298 }), completion(equals(HttpStatus.NOT_FOUND))); 298 }), completion(equals(HttpStatus.NOT_FOUND)));
299 }); 299 });
300 300
301 test('relative-parent-link', () { 301 test('relative-parent-link', () {
302 expect(HttpServer.bind('localhost', 0).then((server) { 302 expect(HttpServer.bind('localhost', 0).then((server) {
303 var dir = 303 var dir =
304 Directory.systemTemp.createTempSync('http_server_virtual_'); 304 Directory.systemTemp.createTempSync('http_server_virtual_');
305 var name = basename(dir.path); 305 var dir2 = new Directory('${dir.path}/dir')..createSync();
306 var file = new File('${dir.path}/file')..createSync(); 306 var file = new File('${dir.path}/file')..createSync();
307 var link = new Link('${dir.path}/dir3') 307 var link = new Link('${dir2.path}/file')
308 ..createSync('../$name/file'); 308 ..createSync('../file');
309 var virDir = new VirtualDirectory(dir.path); 309 var virDir = new VirtualDirectory(dir2.path);
310 virDir.followLinks = true; 310 virDir.followLinks = true;
311 311
312 virDir.serve(server); 312 virDir.serve(server);
313 313
314 return new HttpClient().get('localhost', 314 return new HttpClient().get('localhost',
315 server.port, 315 server.port,
316 '/dir3/file') 316 '/dir3/file')
317 .then((request) => request.close()) 317 .then((request) => request.close())
318 .then((response) => response.drain().then( 318 .then((response) => response.drain().then(
319 (_) => response.statusCode)) 319 (_) => response.statusCode))
(...skipping 20 matching lines...) Expand all
340 virDir.serve(server); 340 virDir.serve(server);
341 341
342 return getStatusCode(server.port, '/dir3/file') 342 return getStatusCode(server.port, '/dir3/file')
343 .whenComplete(() { 343 .whenComplete(() {
344 server.close(); 344 server.close();
345 dir.deleteSync(recursive: true); 345 dir.deleteSync(recursive: true);
346 }); 346 });
347 }), completion(equals(HttpStatus.NOT_FOUND))); 347 }), completion(equals(HttpStatus.NOT_FOUND)));
348 }); 348 });
349 }); 349 });
350
351 group('follow-links', () {
352 test('no-root-jail', () {
353 test('absolute-link', () {
354 expect(HttpServer.bind('localhost', 0).then((server) {
355 var dir =
356 Directory.systemTemp.createTempSync('http_server_virtual_');
357 var file = new File('${dir.path}/file')..createSync();
358 var link = new Link('${dir.path}/file2')
359 ..createSync('${dir.path}/file');
360 var virDir = new VirtualDirectory(dir.path);
361 virDir.followLinks = true;
362 virDir.jailRoot = false;
363
364 virDir.serve(server);
365
366 return new HttpClient().get('localhost',
367 server.port,
368 '/file2')
369 .then((request) => request.close())
370 .then((response) => response.drain().then(
371 (_) => response.statusCode))
372 .whenComplete(() {
373 server.close();
374 dir.deleteSync(recursive: true);
375 });
376 }), completion(equals(HttpStatus.OK)));
377 });
378
379 test('relative-parent-link', () {
380 expect(HttpServer.bind('localhost', 0).then((server) {
381 var dir =
382 Directory.systemTemp.createTempSync('http_server_virtual_');
383 var dir2 = new Directory('${dir.path}/dir')..createSync();
384 var file = new File('${dir.path}/file')..createSync();
385 var link = new Link('${dir2.path}/file')
386 ..createSync('../file');
387 var virDir = new VirtualDirectory(dir2.path);
388 virDir.followLinks = true;
389 virDir.jailRoot = false;
390
391 virDir.serve(server);
392
393 return new HttpClient().get('localhost',
394 server.port,
395 '/file')
396 .then((request) => request.close())
397 .then((response) => response.drain().then(
398 (_) => response.statusCode))
399 .whenComplete(() {
400 server.close();
401 dir.deleteSync(recursive: true);
402 });
403 }), completion(equals(HttpStatus.OK)));
404 });
405 });
406 });
350 } 407 }
351 }); 408 });
352 409
353 group('last-modified', () { 410 group('last-modified', () {
354 group('file', () { 411 group('file', () {
355 test('file-exists', () { 412 test('file-exists', () {
356 expect(HttpServer.bind('localhost', 0).then((server) { 413 expect(HttpServer.bind('localhost', 0).then((server) {
357 var dir = Directory.systemTemp.createTempSync('http_server_virtual_'); 414 var dir = Directory.systemTemp.createTempSync('http_server_virtual_');
358 var file = new File('${dir.path}/file')..createSync(); 415 var file = new File('${dir.path}/file')..createSync();
359 var virDir = new VirtualDirectory(dir.path); 416 var virDir = new VirtualDirectory(dir.path);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 }); 519 });
463 }), completion(matches(new RegExp('404.*Not Found')))); 520 }), completion(matches(new RegExp('404.*Not Found'))));
464 }); 521 });
465 522
466 test('custom', () { 523 test('custom', () {
467 expect(HttpServer.bind('localhost', 0).then((server) { 524 expect(HttpServer.bind('localhost', 0).then((server) {
468 var dir = Directory.systemTemp.createTempSync('http_server_virtual_'); 525 var dir = Directory.systemTemp.createTempSync('http_server_virtual_');
469 var virDir = new VirtualDirectory(dir.path); 526 var virDir = new VirtualDirectory(dir.path);
470 dir.deleteSync(); 527 dir.deleteSync();
471 528
472 virDir.setErrorPageHandler((request) { 529 virDir.errorPageHandler = (request) {
473 request.response.write('my-page '); 530 request.response.write('my-page ');
474 request.response.write(request.response.statusCode); 531 request.response.write(request.response.statusCode);
475 request.response.close(); 532 request.response.close();
476 }); 533 };
477 virDir.serve(server); 534 virDir.serve(server);
478 535
479 return getAsString(server.port, '/') 536 return getAsString(server.port, '/')
480 .whenComplete(() { 537 .whenComplete(() {
481 server.close(); 538 server.close();
482 }); 539 });
483 }), completion(equals('my-page 404'))); 540 }), completion(equals('my-page 404')));
484 }); 541 });
485 }); 542 });
486 543
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 } 664 }
608 testEncoding('..', HttpStatus.NOT_FOUND, false); 665 testEncoding('..', HttpStatus.NOT_FOUND, false);
609 testEncoding('%2e%2e', HttpStatus.OK); 666 testEncoding('%2e%2e', HttpStatus.OK);
610 testEncoding('%252e%252e', HttpStatus.OK); 667 testEncoding('%252e%252e', HttpStatus.OK);
611 testEncoding('/', HttpStatus.OK, false); 668 testEncoding('/', HttpStatus.OK, false);
612 testEncoding('%2f', HttpStatus.NOT_FOUND, false); 669 testEncoding('%2f', HttpStatus.NOT_FOUND, false);
613 testEncoding('%2f', HttpStatus.OK, true); 670 testEncoding('%2f', HttpStatus.OK, true);
614 }); 671 });
615 } 672 }
616 673
OLDNEW
« no previous file with comments | « pkg/http_server/lib/src/virtual_directory.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698