Use an available socket port for memory benchmark.
R=devoncarew@google.com
Change-Id: I96472010b6bfa01e0ae2254f105d8e71bb7e86d5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105683
Reviewed-by: Devon Carew <devoncarew@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/benchmark/perf/memory_tests.dart b/pkg/analysis_server/benchmark/perf/memory_tests.dart
index 6af8813..84385b6 100644
--- a/pkg/analysis_server/benchmark/perf/memory_tests.dart
+++ b/pkg/analysis_server/benchmark/perf/memory_tests.dart
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
+import 'dart:io';
import 'package:analysis_server/protocol/protocol_generated.dart';
import 'package:analysis_server/src/status/diagnostics.dart';
@@ -15,10 +16,10 @@
*/
class AnalysisServerMemoryUsageTest
extends AbstractAnalysisServerIntegrationTest {
- static const int vmServicePort = 12345;
+ int _vmServicePort;
Future<int> getMemoryUsage() async {
- Uri uri = Uri.parse('ws://127.0.0.1:$vmServicePort/ws');
+ Uri uri = Uri.parse('ws://127.0.0.1:$_vmServicePort/ws');
final ServiceProtocol service = await ServiceProtocol.connect(uri);
final Map vm = await service.call('getVM');
@@ -50,7 +51,9 @@
* The server is automatically started before every test.
*/
@override
- Future setUp() {
+ Future setUp() async {
+ _vmServicePort = await _findAvailableSocketPort();
+
onAnalysisErrors.listen((AnalysisErrorsParams params) {
currentAnalysisErrors[params.file] = params.errors;
});
@@ -63,7 +66,7 @@
outOfTestExpect(serverConnected.isCompleted, isFalse);
serverConnected.complete();
});
- return startServer(servicesPort: vmServicePort).then((_) {
+ return startServer(servicesPort: _vmServicePort).then((_) {
server.listenToOutput(dispatchNotification);
server.exitCode.then((_) {
skipShutdown = true;
@@ -84,4 +87,13 @@
Future subscribeToStatusNotifications() async {
await sendServerSetSubscriptions([ServerService.STATUS]);
}
+
+ static Future<int> _findAvailableSocketPort() async {
+ var socket = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
+ try {
+ return socket.port;
+ } finally {
+ await socket.close();
+ }
+ }
}