| Index: pkg/http_server/test/virtual_directory_test.dart
|
| diff --git a/pkg/http_server/test/virtual_directory_test.dart b/pkg/http_server/test/virtual_directory_test.dart
|
| index d15113b105e4affcab5605a7b8cca1e19a7f19ca..37c208058a00af154aac8a12df0ec217cfa63c90 100644
|
| --- a/pkg/http_server/test/virtual_directory_test.dart
|
| +++ b/pkg/http_server/test/virtual_directory_test.dart
|
| @@ -8,6 +8,21 @@ import "package:unittest/unittest.dart";
|
| import "package:http_server/http_server.dart";
|
|
|
|
|
| +Future<int> getStatusCode(int port, String path) {
|
| + return new HttpClient().get('localhost', port, path)
|
| + .then((request) => request.close())
|
| + .then((response) => response.drain().then(
|
| + (_) => response.statusCode));
|
| +}
|
| +
|
| +Future<HttpHeaders> getHeaders(int port, String path) {
|
| + return new HttpClient().get('localhost', port, path)
|
| + .then((request) => request.close())
|
| + .then((response) => response.drain().then(
|
| + (_) => response.headers));
|
| +}
|
| +
|
| +
|
| void main() {
|
| group('serve-root', () {
|
| test('dir-exists', () {
|
| @@ -17,10 +32,7 @@ void main() {
|
|
|
| virDir.serve(server);
|
|
|
| - return new HttpClient().get('localhost', server.port, '/')
|
| - .then((request) => request.close())
|
| - .then((response) => response.drain().then(
|
| - (_) => response.statusCode))
|
| + return getStatusCode(server.port, '/')
|
| .whenComplete(() {
|
| server.close();
|
| dir.deleteSync();
|
| @@ -36,10 +48,7 @@ void main() {
|
|
|
| virDir.serve(server);
|
|
|
| - return new HttpClient().get('localhost', server.port, '/')
|
| - .then((request) => request.close())
|
| - .then((response) => response.drain().then(
|
| - (_) => response.statusCode))
|
| + return getStatusCode(server.port, '/')
|
| .whenComplete(() {
|
| server.close();
|
| });
|
| @@ -57,10 +66,7 @@ void main() {
|
|
|
| virDir.serve(server);
|
|
|
| - return new HttpClient().get('localhost', server.port, '/file')
|
| - .then((request) => request.close())
|
| - .then((response) => response.drain().then(
|
| - (_) => response.statusCode))
|
| + return getStatusCode(server.port, '/file')
|
| .whenComplete(() {
|
| server.close();
|
| file.deleteSync();
|
| @@ -76,10 +82,7 @@ void main() {
|
|
|
| virDir.serve(server);
|
|
|
| - return new HttpClient().get('localhost', server.port, '/file')
|
| - .then((request) => request.close())
|
| - .then((response) => response.drain().then(
|
| - (_) => response.statusCode))
|
| + return getStatusCode(server.port, '/file')
|
| .whenComplete(() {
|
| server.close();
|
| dir.deleteSync();
|
| @@ -98,10 +101,7 @@ void main() {
|
|
|
| virDir.serve(server);
|
|
|
| - return new HttpClient().get('localhost', server.port, '/dir/file')
|
| - .then((request) => request.close())
|
| - .then((response) => response.drain().then(
|
| - (_) => response.statusCode))
|
| + return getStatusCode(server.port, '/dir/file')
|
| .whenComplete(() {
|
| server.close();
|
| file.deleteSync();
|
| @@ -120,10 +120,7 @@ void main() {
|
|
|
| virDir.serve(server);
|
|
|
| - return new HttpClient().get('localhost', server.port, '/dir/file')
|
| - .then((request) => request.close())
|
| - .then((response) => response.drain().then(
|
| - (_) => response.statusCode))
|
| + return getStatusCode(server.port, '/dir/file')
|
| .whenComplete(() {
|
| server.close();
|
| file.deleteSync();
|
| @@ -134,5 +131,72 @@ void main() {
|
| });
|
| });
|
| });
|
| +
|
| + group('last-mofidied', () {
|
| + group('file', () {
|
| + test('file-exists', () {
|
| + expect(HttpServer.bind('localhost', 0).then((server) {
|
| + var dir = new Directory('').createTempSync();
|
| + var file = new File('${dir.path}/file')..createSync();
|
| + var virDir = new VirtualDirectory(dir.path);
|
| +
|
| + virDir.serve(server);
|
| +
|
| + return getHeaders(server.port, '/file')
|
| + .then((headers) {
|
| + expect(headers.value(HttpHeaders.LAST_MODIFIED), isNotNull);
|
| + return HttpDate.parse(
|
| + headers.value(HttpHeaders.LAST_MODIFIED));
|
| + })
|
| + .then((lastModified) {
|
| + return new HttpClient().get('localhost', server.port, '/file')
|
| + .then((request) {
|
| + request.headers.ifModifiedSince = lastModified;
|
| + return request.close();
|
| + })
|
| + .then((response) => response.drain().then(
|
| + (_) => response.statusCode));
|
| + })
|
| + .whenComplete(() {
|
| + server.close();
|
| + dir.deleteSync(recursive: true);
|
| + });
|
| + }), completion(equals(HttpStatus.NOT_MODIFIED)));
|
| + });
|
| +
|
| + test('file-changes', () {
|
| + expect(HttpServer.bind('localhost', 0).then((server) {
|
| + var dir = new Directory('').createTempSync();
|
| + var file = new File('${dir.path}/file')..createSync();
|
| + var virDir = new VirtualDirectory(dir.path);
|
| +
|
| + virDir.serve(server);
|
| +
|
| + return getHeaders(server.port, '/file')
|
| + .then((headers) {
|
| + expect(headers.value(HttpHeaders.LAST_MODIFIED), isNotNull);
|
| + return HttpDate.parse(
|
| + headers.value(HttpHeaders.LAST_MODIFIED));
|
| + })
|
| + .then((lastModified) {
|
| + // Fake file changed by moving date back in time.
|
| + lastModified = lastModified.subtract(
|
| + const Duration(seconds: 10));
|
| + return new HttpClient().get('localhost', server.port, '/file')
|
| + .then((request) {
|
| + request.headers.ifModifiedSince = lastModified;
|
| + return request.close();
|
| + })
|
| + .then((response) => response.drain().then(
|
| + (_) => response.statusCode));
|
| + })
|
| + .whenComplete(() {
|
| + server.close();
|
| + dir.deleteSync(recursive: true);
|
| + });
|
| + }), completion(equals(HttpStatus.OK)));
|
| + });
|
| + });
|
| + });
|
| }
|
|
|
|
|