Do exponential backoff for all exceptions in VMService::defaultOpenChannel. (#16785)
We were trying to only catch WebSocketException, but in fact
SocketException can be thrown as well.
diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart
index 3948cc8..bd2399b 100644
--- a/packages/flutter_tools/lib/src/vmservice.dart
+++ b/packages/flutter_tools/lib/src/vmservice.dart
@@ -53,7 +53,7 @@
attempts += 1;
try {
socket = await io.WebSocket.connect(uri.toString());
- } on io.WebSocketException catch(e) {
+ } catch (e) {
printTrace('Exception attempting to connect to observatory: $e');
printTrace('This was attempt #$attempts. Will retry in $delay.');
await new Future<Null>.delayed(delay);
diff --git a/packages/flutter_tools/test/vmservice_test.dart b/packages/flutter_tools/test/vmservice_test.dart
index 9b88230..cc76885 100644
--- a/packages/flutter_tools/test/vmservice_test.dart
+++ b/packages/flutter_tools/test/vmservice_test.dart
@@ -4,17 +4,19 @@
import 'package:test/test.dart';
-import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/base/port_scanner.dart';
import 'package:flutter_tools/src/vmservice.dart';
+import 'src/common.dart';
+import 'src/context.dart';
+
void main() {
group('VMService', () {
- test('fails connection eagerly in the connect() method', () async {
+ testUsingContext('fails connection eagerly in the connect() method', () async {
final int port = await const HostPortScanner().findAvailablePort();
expect(
VMService.connect(Uri.parse('http://localhost:$port')),
- throwsA(const isInstanceOf<SocketException>()),
+ throwsToolExit(),
);
});
});