Chromium Code Reviews| Index: pkg/http_server/test/utils.dart |
| diff --git a/pkg/http_server/test/utils.dart b/pkg/http_server/test/utils.dart |
| index c0b3c5ca49e154a1d138b8f0178f230f31401838..723ba4bcbca4fccb40d08912bac125ee798e2211 100644 |
| --- a/pkg/http_server/test/utils.dart |
| +++ b/pkg/http_server/test/utils.dart |
| @@ -42,12 +42,14 @@ void _testVirtualDir(String name, bool useMocks, Future func(Directory dir)) { |
| } |
| Future<int> getStatusCodeForVirtDir(VirtualDirectory virtualDir, |
| - String path, |
| - {String host, |
| - bool secure: false, |
| - DateTime ifModifiedSince, |
| - bool rawPath: false, |
| - bool followRedirects: true}) { |
| + String path, |
| + {String host, |
| + bool secure: false, |
| + DateTime ifModifiedSince, |
| + bool rawPath: false, |
| + bool followRedirects: true, |
| + int from, |
| + int to}) { |
| // if this is a mock test, then run the mock code path |
| if(_isMockTestExpando[currentTestCase]) { |
| @@ -55,6 +57,7 @@ Future<int> getStatusCodeForVirtDir(VirtualDirectory virtualDir, |
| var request = new MockHttpRequest(uri, followRedirects: followRedirects, |
| ifModifiedSince: ifModifiedSince); |
| + _addRangeHeader(request, from, to); |
| return _withMockRequest(virtualDir, request) |
| .then((response) { |
| @@ -67,7 +70,7 @@ Future<int> getStatusCodeForVirtDir(VirtualDirectory virtualDir, |
| return _withServer(virtualDir, (port) { |
| return getStatusCode(port, path, host: host, secure: secure, |
| ifModifiedSince: ifModifiedSince, rawPath: rawPath, |
| - followRedirects: followRedirects); |
| + followRedirects: followRedirects, from: from, to: to); |
| }); |
| } |
| @@ -77,29 +80,36 @@ Future<int> getStatusCode(int port, |
| bool secure: false, |
| DateTime ifModifiedSince, |
| bool rawPath: false, |
| - bool followRedirects: true}) { |
| + bool followRedirects: true, |
| + int from, |
| + int to}) { |
| var uri = _getUri(port, path, secure: secure, rawPath: rawPath); |
| - return new HttpClient().getUrl(uri) |
| + car client = new HttpClient(); |
|
kustermann
2014/11/17 11:15:30
car -> var.
Does this even run?
Søren Gjesse
2014/11/17 13:13:23
It does on non-checked mode. Changed to var.
|
| + return client.getUrl(uri) |
| .then((request) { |
| if (!followRedirects) request.followRedirects = false; |
| if (host != null) request.headers.host = host; |
| if (ifModifiedSince != null) { |
| request.headers.ifModifiedSince = ifModifiedSince; |
| } |
| + _addRangeHeader(request, from, to); |
| return request.close(); |
| }) |
| - .then((response) => response.drain().then( |
| - (_) => response.statusCode)); |
| + .then((response) => response.drain() |
| + .then((_) => response.statusCode)) |
| + .whenComplete(() => client.close()); |
| } |
| -Future<HttpHeaders> getHeaders(VirtualDirectory virDir, String path) { |
| +Future<HttpHeaders> getHeaders( |
| + VirtualDirectory virDir, String path, {int from, int to}) { |
| // if this is a mock test, then run the mock code path |
| if(_isMockTestExpando[currentTestCase]) { |
| var uri = _getUri(0, path); |
| var request = new MockHttpRequest(uri); |
| + _addRangeHeader(request, from, to); |
| return _withMockRequest(virDir, request) |
| .then((response) { |
| @@ -110,7 +120,7 @@ Future<HttpHeaders> getHeaders(VirtualDirectory virDir, String path) { |
| assert(_isMockTestExpando[currentTestCase] == false); |
| return _withServer(virDir, (port) { |
| - return _getHeaders(port, path); |
| + return _getHeaders(port, path, from, to); |
| }); |
| } |
| @@ -135,6 +145,52 @@ Future<String> getAsString(VirtualDirectory virtualDir, String path) { |
| }); |
| } |
| +Future<List<int>> getAsBytes( |
| + VirtualDirectory virtualDir, String path, {int from, int to}) { |
| + |
| + // if this is a mock test, then run the mock code path |
| + if (_isMockTestExpando[currentTestCase]) { |
| + var uri = _getUri(0, path); |
| + |
| + var request = new MockHttpRequest(uri); |
| + _addRangeHeader(request, from, to); |
| + |
| + return _withMockRequest(virtualDir, request) |
| + .then((response) { |
| + return response.mockContentBinary; |
| + }); |
| + }; |
| + |
| + assert(_isMockTestExpando[currentTestCase] == false); |
| + |
| + return _withServer(virtualDir, (int port) { |
| + return _getAsBytes(port, path, from, to); |
| + }); |
| +} |
| + |
| +Future<List> getContentAndResponse( |
| + VirtualDirectory virtualDir, String path, {int from, int to}) { |
| + // if this is a mock test, then run the mock code path |
| + if (_isMockTestExpando[currentTestCase]) { |
| + var uri = _getUri(0, path); |
| + |
| + var request = new MockHttpRequest(uri); |
| + _addRangeHeader(request, from, to); |
| + |
| + return _withMockRequest(virtualDir, request) |
| + .then((response) { |
| + return [response.mockContentBinary, |
| + response]; |
| + }); |
| + }; |
| + |
| + assert(_isMockTestExpando[currentTestCase] == false); |
| + |
| + return _withServer(virtualDir, (int port) { |
| + return _getContentAndResponse(port, path, from, to); |
| + }); |
| +} |
| + |
| Future<MockHttpResponse> _withMockRequest(VirtualDirectory virDir, |
| MockHttpRequest request) { |
| return virDir.serveRequest(request).then((value) { |
| @@ -167,18 +223,48 @@ Future _withServer(VirtualDirectory virDir, Future func(int port)) { |
| .whenComplete(() => server.close()); |
| } |
| -Future<HttpHeaders> _getHeaders(int port, String path) => |
| - new HttpClient() |
| - .get('localhost', port, path) |
| - .then((request) => request.close()) |
| - .then((response) => response.drain().then( |
| - (_) => response.headers)); |
| +Future<HttpHeaders> _getHeaders(int port, String path, int from, int to) { |
| + var client = new HttpClient(); |
| + return client.get('localhost', port, path) |
| + .then((request) { |
| + _addRangeHeader(request, from, to); |
| + return request.close(); |
| + }) |
| + .then((response) => response.drain() |
| + .then((_) => response.headers)) |
| + .whenComplete(() => client.close()); |
| +} |
| -Future<String> _getAsString(int port, String path) => |
| - new HttpClient() |
| - .get('localhost', port, path) |
| +Future<String> _getAsString(int port, String path) { |
| + var client = new HttpClient(); |
| + return client.get('localhost', port, path) |
| .then((request) => request.close()) |
| - .then((response) => UTF8.decodeStream(response)); |
| + .then((response) => UTF8.decodeStream(response)) |
| + .whenComplete(() => client.close()); |
| +} |
| + |
| +Future<List<int>> _getAsBytes(int port, String path, int from, int to) { |
| + var client = new HttpClient(); |
| + return client.get('localhost', port, path) |
| + .then((request) { |
| + _addRangeHeader(request, from, to); |
| + return request.close(); |
| + }) |
| + .then((response) => response.fold([], (p, e) => p..addAll(e))) |
| + .whenComplete(() => client.close()); |
| +} |
| + |
| +Future<List> _getContentAndResponse(int port, String path, int from, int to) { |
| + var client = new HttpClient(); |
| + return client.get('localhost', port, path) |
| + .then((request) { |
| + _addRangeHeader(request, from, to); |
| + return request.close(); |
| + }) |
| + .then((response) => response.fold([], (p, e) => p..addAll(e)) |
| + .then((bytes) => [bytes, response])) |
| + .whenComplete(() => client.close()); |
| +} |
| Uri _getUri(int port, |
| String path, |
| @@ -196,6 +282,14 @@ Uri _getUri(int port, |
| } |
| } |
| +void _addRangeHeader(HttpRequest request, int from, int to) { |
| + var fromStr = from != null ? '$from' : ''; |
| + var toStr = to != null ? '$to' : ''; |
| + if (fromStr.isNotEmpty || toStr.isNotEmpty) { |
| + request.headers.set(HttpHeaders.RANGE, 'bytes=$fromStr-$toStr'); |
| + } |
| +} |
| + |
| const CERTIFICATE = "localhost_cert"; |