| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |