| 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..80c16ca20020cf591444c110df9416cf9288e09b 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)
|
| + var client = new HttpClient();
|
| + 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(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";
|
|
|
|
|
|
|