From 2d55032939dbdf91e0c79646dacc507b00df8dea Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Tue, 17 Aug 2021 21:12:03 -0700 Subject: [PATCH] Migrate dds.dart to null safety (#88382) --- packages/flutter_tools/lib/src/base/dds.dart | 37 ++++++++--------- .../lib/src/drive/drive_service.dart | 6 +-- .../lib/src/fuchsia/fuchsia_device.dart | 6 +-- .../lib/src/resident_runner.dart | 6 +-- .../commands.shard/hermetic/attach_test.dart | 6 +-- .../drive/drive_service_test.dart | 6 +-- .../fuchsia/fuchsia_device_test.dart | 8 +++- .../general.shard/resident_runner_test.dart | 41 +++++++++++++++++++ 8 files changed, 79 insertions(+), 37 deletions(-) diff --git a/packages/flutter_tools/lib/src/base/dds.dart b/packages/flutter_tools/lib/src/base/dds.dart index e7c188b776b..673b60aaa19 100644 --- a/packages/flutter_tools/lib/src/base/dds.dart +++ b/packages/flutter_tools/lib/src/base/dds.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// @dart = 2.8 - import 'dart:async'; import 'package:dds/dds.dart' as dds; @@ -15,36 +13,33 @@ import 'logger.dart'; @visibleForTesting Future Function( - Uri, - {bool enableAuthCodes, + Uri remoteVmServiceUri, { + bool enableAuthCodes, bool ipv6, - Uri serviceUri, + Uri? serviceUri, }) ddsLauncherCallback = dds.DartDevelopmentService.startDartDevelopmentService; /// Helper class to launch a [dds.DartDevelopmentService]. Allows for us to /// mock out this functionality for testing purposes. class DartDevelopmentService { - dds.DartDevelopmentService _ddsInstance; + dds.DartDevelopmentService? _ddsInstance; - Uri get uri => _ddsInstance?.uri ?? _existingDdsUri; - Uri _existingDdsUri; + Uri? get uri => _ddsInstance?.uri ?? _existingDdsUri; + Uri? _existingDdsUri; Future get done => _completer.future; final Completer _completer = Completer(); Future startDartDevelopmentService( - Uri observatoryUri, - int hostPort, - bool ipv6, - bool disableServiceAuthCodes, { - @required Logger logger, + Uri observatoryUri, { + required Logger logger, + int? hostPort, + bool? ipv6, + bool? disableServiceAuthCodes, }) async { final Uri ddsUri = Uri( scheme: 'http', - host: (ipv6 ? - io.InternetAddress.loopbackIPv6 : - io.InternetAddress.loopbackIPv4 - ).host, + host: (ipv6 == true ? io.InternetAddress.loopbackIPv6 : io.InternetAddress.loopbackIPv4).host, port: hostPort ?? 0, ); logger.printTrace( @@ -55,15 +50,15 @@ class DartDevelopmentService { _ddsInstance = await ddsLauncherCallback( observatoryUri, serviceUri: ddsUri, - enableAuthCodes: !disableServiceAuthCodes, - ipv6: ipv6, + enableAuthCodes: disableServiceAuthCodes != true, + ipv6: ipv6 == true, ); - unawaited(_ddsInstance.done.whenComplete(() { + unawaited(_ddsInstance?.done.whenComplete(() { if (!_completer.isCompleted) { _completer.complete(); } })); - logger.printTrace('DDS is listening at ${_ddsInstance.uri}.'); + logger.printTrace('DDS is listening at ${_ddsInstance?.uri}.'); } on dds.DartDevelopmentServiceException catch (e) { logger.printTrace('Warning: Failed to start DDS: ${e.message}'); if (e.errorCode == dds.DartDevelopmentServiceException.existingDdsInstanceError) { diff --git a/packages/flutter_tools/lib/src/drive/drive_service.dart b/packages/flutter_tools/lib/src/drive/drive_service.dart index 8ed1c652141..d1aa1b4b9f5 100644 --- a/packages/flutter_tools/lib/src/drive/drive_service.dart +++ b/packages/flutter_tools/lib/src/drive/drive_service.dart @@ -225,9 +225,9 @@ class FlutterDriverService extends DriverService { try { await device.dds.startDartDevelopmentService( uri, - debuggingOptions.ddsPort, - ipv6, - debuggingOptions.disableServiceAuthCodes, + hostPort: debuggingOptions.ddsPort, + ipv6: ipv6, + disableServiceAuthCodes: debuggingOptions.disableServiceAuthCodes, logger: _logger, ); _vmServiceUri = device.dds.uri.toString(); diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart index 95602da6102..b0eac8a8eb5 100644 --- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart +++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart @@ -65,9 +65,9 @@ Future _kDefaultDartDevelopmentServiceStarter( ) async { await device.dds.startDartDevelopmentService( observatoryUri, - 0, - true, - disableServiceAuthCodes, + hostPort: 0, + ipv6: true, + disableServiceAuthCodes: disableServiceAuthCodes, logger: globals.logger, ); } diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index 0672e7a783a..fc3dd7404b8 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart @@ -263,9 +263,9 @@ class FlutterDevice { try { await device.dds.startDartDevelopmentService( observatoryUri, - ddsPort, - ipv6, - disableServiceAuthCodes, + hostPort: ddsPort, + ipv6: ipv6, + disableServiceAuthCodes: disableServiceAuthCodes, logger: globals.logger, ); } on dds.DartDevelopmentServiceException catch (e, st) { diff --git a/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart index 6f988d1cd69..22947604def 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart @@ -767,11 +767,11 @@ class FakeDartDevelopmentService extends Fake implements DartDevelopmentService @override Future startDartDevelopmentService( - Uri observatoryUri, + Uri observatoryUri, { + @required Logger logger, int hostPort, bool ipv6, - bool disableServiceAuthCodes, { - @required Logger logger, + bool disableServiceAuthCodes, }) async {} @override diff --git a/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart b/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart index bf38ae09a5b..55a475727de 100644 --- a/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart +++ b/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart @@ -605,11 +605,11 @@ class FakeDartDevelopmentService extends Fake implements DartDevelopmentService @override Future startDartDevelopmentService( - Uri observatoryUri, + Uri observatoryUri, { + @required Logger logger, int hostPort, bool ipv6, - bool disableServiceAuthCodes, { - @required Logger logger, + bool disableServiceAuthCodes, }) async { started = true; } diff --git a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart index 2c55a59a4df..d486e90f33f 100644 --- a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart +++ b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart @@ -1008,7 +1008,13 @@ class FakeFuchsiaSdk extends Fake implements FuchsiaSdk { class FakeDartDevelopmentService extends Fake implements DartDevelopmentService { @override - Future startDartDevelopmentService(Uri observatoryUri, int hostPort, bool ipv6, bool disableServiceAuthCodes, {Logger logger}) async { } + Future startDartDevelopmentService( + Uri observatoryUri, { + @required Logger logger, + int hostPort, + bool ipv6, + bool disableServiceAuthCodes, + }) async {} @override Uri get uri => Uri.parse('example'); diff --git a/packages/flutter_tools/test/general.shard/resident_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_runner_test.dart index 832c3bac9a4..c40ab56afdd 100644 --- a/packages/flutter_tools/test/general.shard/resident_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_runner_test.dart @@ -5,6 +5,7 @@ // @dart = 2.8 import 'dart:async'; +import 'dart:io'; import 'package:dds/dds.dart' as dds; import 'package:file/memory.dart'; @@ -1806,6 +1807,10 @@ void main() { final FakeDevice device = FakeDevice() ..dds = DartDevelopmentService(); ddsLauncherCallback = (Uri uri, {bool enableAuthCodes, bool ipv6, Uri serviceUri}) { + expect(uri, Uri(scheme: 'foo', host: 'bar')); + expect(enableAuthCodes, isTrue); + expect(ipv6, isFalse); + expect(serviceUri, Uri(scheme: 'http', host: '127.0.0.1', port: 0)); throw FakeDartDevelopmentServiceException(message: 'Existing VM service clients prevent DDS from taking control.', ); @@ -1843,11 +1848,47 @@ void main() { }) async => FakeVmServiceHost(requests: []).vmService, })); + testUsingContext('Host VM service ipv6 defaults', () => testbed.run(() async { + fakeVmServiceHost = FakeVmServiceHost(requests: []); + final FakeDevice device = FakeDevice() + ..dds = DartDevelopmentService(); + final Completerdone = Completer(); + ddsLauncherCallback = (Uri uri, {bool enableAuthCodes, bool ipv6, Uri serviceUri}) async { + expect(uri, Uri(scheme: 'foo', host: 'bar')); + expect(enableAuthCodes, isFalse); + expect(ipv6, isTrue); + expect(serviceUri, Uri(scheme: 'http', host: '::1', port: 0)); + done.complete(); + return null; + }; + final TestFlutterDevice flutterDevice = TestFlutterDevice( + device, + observatoryUris: Stream.value(testUri), + ); + await flutterDevice.connect(allowExistingDdsInstance: true, ipv6: true, disableServiceAuthCodes: true); + await done.future; + }, overrides: { + VMServiceConnector: () => (Uri httpUri, { + ReloadSources reloadSources, + Restart restart, + CompileExpression compileExpression, + GetSkSLMethod getSkSLMethod, + PrintStructuredErrorLogMethod printStructuredErrorLogMethod, + io.CompressionOptions compression, + Device device, + Logger logger, + }) async => FakeVmServiceHost(requests: []).vmService, + })); + testUsingContext('Failed DDS start outputs error message', () => testbed.run(() async { // See https://github.com/flutter/flutter/issues/72385 for context. final FakeDevice device = FakeDevice() ..dds = DartDevelopmentService(); ddsLauncherCallback = (Uri uri, {bool enableAuthCodes, bool ipv6, Uri serviceUri}) { + expect(uri, Uri(scheme: 'foo', host: 'bar')); + expect(enableAuthCodes, isTrue); + expect(ipv6, isFalse); + expect(serviceUri, Uri(scheme: 'http', host: '127.0.0.1', port: 0)); throw FakeDartDevelopmentServiceException(message: 'No URI'); }; final TestFlutterDevice flutterDevice = TestFlutterDevice(