From f7501ce1f36f397f5180410b2808f32f0ab2efb4 Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Mon, 6 Mar 2023 13:45:04 -0600 Subject: [PATCH] refactor(shorebird_code_push_api): stream engine bytes (#19) --- .../download_engine_handler.dart | 13 ++++++----- .../download_engine_handler_test.dart | 22 ++++++++++++++----- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/packages/shorebird_code_push_api/lib/src/routes/download_engine/download_engine_handler.dart b/packages/shorebird_code_push_api/lib/src/routes/download_engine/download_engine_handler.dart index 99e5579b..98498aeb 100644 --- a/packages/shorebird_code_push_api/lib/src/routes/download_engine/download_engine_handler.dart +++ b/packages/shorebird_code_push_api/lib/src/routes/download_engine/download_engine_handler.dart @@ -10,17 +10,18 @@ final _engineUrl = Uri.parse( Future downloadEngineHandler(Request request, String revision) async { final httpClient = await request.lookup>(); - final response = await httpClient.get( - _engineUrl, - headers: { + final req = http.Request('GET', _engineUrl); + req.headers.addAll( + { 'Content-Type': 'application/octet-stream', - 'Connection': 'close' + 'Connection': 'close', }, ); + final response = await httpClient.send(req); if (response.statusCode != HttpStatus.ok) { - return Response(response.statusCode, body: response.body); + return Response(response.statusCode, body: response.stream); } - return Response.ok(response.bodyBytes); + return Response.ok(response.stream); } diff --git a/packages/shorebird_code_push_api/test/src/routes/download_engine/download_engine_handler_test.dart b/packages/shorebird_code_push_api/test/src/routes/download_engine/download_engine_handler_test.dart index 35e6dd37..bee943be 100644 --- a/packages/shorebird_code_push_api/test/src/routes/download_engine/download_engine_handler_test.dart +++ b/packages/shorebird_code_push_api/test/src/routes/download_engine/download_engine_handler_test.dart @@ -9,13 +9,15 @@ import 'package:test/test.dart'; class _MockHttpClient extends Mock implements http.Client {} +class _FakeBaseRequest extends Fake implements http.BaseRequest {} + void main() { group('downloadEngineHandler', () { final uri = Uri.parse('http://localhost/'); late http.Client httpClient; setUpAll(() { - registerFallbackValue(Uri()); + registerFallbackValue(_FakeBaseRequest()); }); setUp(() { @@ -24,8 +26,13 @@ void main() { test('returns error on failure', () async { when( - () => httpClient.get(any(), headers: any(named: 'headers')), - ).thenAnswer((_) async => http.Response('oops', HttpStatus.unauthorized)); + () => httpClient.send(any()), + ).thenAnswer((_) async { + return http.StreamedResponse( + const Stream.empty(), + HttpStatus.unauthorized, + ); + }); final request = Request('GET', uri).provide(() async => httpClient); final response = await downloadEngineHandler(request, 'revision'); @@ -34,8 +41,13 @@ void main() { test('returns bytes on success', () async { when( - () => httpClient.get(any(), headers: any(named: 'headers')), - ).thenAnswer((_) async => http.Response('OK', HttpStatus.ok)); + () => httpClient.send(any()), + ).thenAnswer((_) async { + return http.StreamedResponse( + const Stream.empty(), + HttpStatus.ok, + ); + }); final request = Request('GET', uri).provide(() async => httpClient); final response = await downloadEngineHandler(request, 'revision');