33// BSD-style license that can be found in the LICENSE file.
44
55import 'dart:async' ;
6+ import 'dart:io' ;
67
78import 'package:analysis_server/protocol/protocol_generated.dart' ;
89import 'package:analysis_server/src/status/diagnostics.dart' ;
@@ -15,10 +16,10 @@ import '../../test/integration/support/integration_tests.dart';
1516 */
1617class AnalysisServerMemoryUsageTest
1718 extends AbstractAnalysisServerIntegrationTest {
18- static const int vmServicePort = 12345 ;
19+ int _vmServicePort ;
1920
2021 Future <int > getMemoryUsage () async {
21- Uri uri = Uri .parse ('ws://127.0.0.1:$vmServicePort /ws' );
22+ Uri uri = Uri .parse ('ws://127.0.0.1:$_vmServicePort /ws' );
2223 final ServiceProtocol service = await ServiceProtocol .connect (uri);
2324 final Map vm = await service.call ('getVM' );
2425
@@ -50,7 +51,9 @@ class AnalysisServerMemoryUsageTest
5051 * The server is automatically started before every test.
5152 */
5253 @override
53- Future setUp () {
54+ Future setUp () async {
55+ _vmServicePort = await _findAvailableSocketPort ();
56+
5457 onAnalysisErrors.listen ((AnalysisErrorsParams params) {
5558 currentAnalysisErrors[params.file] = params.errors;
5659 });
@@ -63,7 +66,7 @@ class AnalysisServerMemoryUsageTest
6366 outOfTestExpect (serverConnected.isCompleted, isFalse);
6467 serverConnected.complete ();
6568 });
66- return startServer (servicesPort: vmServicePort ).then ((_) {
69+ return startServer (servicesPort: _vmServicePort ).then ((_) {
6770 server.listenToOutput (dispatchNotification);
6871 server.exitCode.then ((_) {
6972 skipShutdown = true ;
@@ -84,4 +87,13 @@ class AnalysisServerMemoryUsageTest
8487 Future subscribeToStatusNotifications () async {
8588 await sendServerSetSubscriptions ([ServerService .STATUS ]);
8689 }
90+
91+ static Future <int > _findAvailableSocketPort () async {
92+ var socket = await ServerSocket .bind (InternetAddress .loopbackIPv4, 0 );
93+ try {
94+ return socket.port;
95+ } finally {
96+ await socket.close ();
97+ }
98+ }
8799}
0 commit comments