smoke test VM service connection before returning VMService object (#12914)
diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart index 7cfab01..3227cc4 100644 --- a/packages/flutter_tools/lib/src/vmservice.dart +++ b/packages/flutter_tools/lib/src/vmservice.dart
@@ -140,15 +140,19 @@ /// protocol itself. /// /// See: https://github.com/dart-lang/sdk/commit/df8bf384eb815cf38450cb50a0f4b62230fba217 - static VMService connect( + static Future<VMService> connect( Uri httpUri, { Duration requestTimeout: kDefaultRequestTimeout, ReloadSources reloadSources, - }) { + }) async { final Uri wsUri = httpUri.replace(scheme: 'ws', path: fs.path.join(httpUri.path, 'ws')); final StreamChannel<String> channel = _openChannel(wsUri); final rpc.Peer peer = new rpc.Peer.withoutJson(jsonDocument.bind(channel)); - return new VMService._(peer, httpUri, wsUri, requestTimeout, reloadSources); + final VMService service = new VMService._(peer, httpUri, wsUri, requestTimeout, reloadSources); + // This call is to ensure we are able to establish a connection instead of + // keeping on trucking and failing farther down the process. + await service._sendRequest('getVersion', const <String, dynamic>{}); + return service; } final Uri httpAddress;