Ensure to close connection to VM after collecting coverage (#50943)
diff --git a/packages/flutter_tools/lib/src/test/coverage_collector.dart b/packages/flutter_tools/lib/src/test/coverage_collector.dart index e89dc42..72171bc 100644 --- a/packages/flutter_tools/lib/src/test/coverage_collector.dart +++ b/packages/flutter_tools/lib/src/test/coverage_collector.dart
@@ -181,7 +181,10 @@ }) async { final VMService vmService = await connector(serviceUri); await vmService.getVM(); - return _getAllCoverage(vmService, libraryPredicate); + final Map<String, dynamic> result = await _getAllCoverage( + vmService, libraryPredicate); + await vmService.close(); + return result; } Future<Map<String, dynamic>> _getAllCoverage(VMService service, bool Function(String) libraryPredicate) async {
diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart index 7fc4664..f18f802 100644 --- a/packages/flutter_tools/lib/src/vmservice.dart +++ b/packages/flutter_tools/lib/src/vmservice.dart
@@ -452,6 +452,8 @@ Future<void> getVM() async => await vm.reload(); Future<void> refreshViews({ bool waitForViews = false }) => vm.refreshViews(waitForViews: waitForViews); + + Future<void> close() async => await _peer.close(); } /// An error that is thrown when constructing/updating a service object.
diff --git a/packages/flutter_tools/test/general.shard/vmservice_test.dart b/packages/flutter_tools/test/general.shard/vmservice_test.dart index a0830c0..646fdf1 100644 --- a/packages/flutter_tools/test/general.shard/vmservice_test.dart +++ b/packages/flutter_tools/test/general.shard/vmservice_test.dart
@@ -33,13 +33,11 @@ } @override - bool get isClosed { - throw 'unexpected call to isClosed'; - } + bool get isClosed => _isClosed; @override Future<dynamic> close() async { - throw 'unexpected call to close()'; + _isClosed = true; } @override @@ -70,6 +68,7 @@ List<String> registeredMethods = <String>[]; bool isolatesEnabled = false; + bool _isClosed = false; Future<void> _getVMLatch; Completer<void> _currentGetVMLatchCompleter; @@ -213,6 +212,14 @@ WebSocketConnector: () => (String url, {CompressionOptions compression}) async => throw const SocketException('test'), }); + testUsingContext('closing VMService closes Peer', () async { + final MockPeer mockPeer = MockPeer(); + final VMService vmService = VMService(mockPeer, null, null, null, null, null, MockDevice(), null); + expect(mockPeer.isClosed, equals(false)); + await vmService.close(); + expect(mockPeer.isClosed, equals(true)); + }); + testUsingContext('refreshViews', () { FakeAsync().run((FakeAsync time) { bool done = false;