| Index: runtime/observatory/tests/service/test_helper.dart
|
| diff --git a/runtime/observatory/tests/service/test_helper.dart b/runtime/observatory/tests/service/test_helper.dart
|
| index 63b8fc2bb97231c11cc4683971353398e2bed074..b498f4a0b8bc0c42a8e62a1391408f0910154bcd 100644
|
| --- a/runtime/observatory/tests/service/test_helper.dart
|
| +++ b/runtime/observatory/tests/service/test_helper.dart
|
| @@ -91,25 +91,29 @@ class _ServiceTesteeLauncher {
|
| bool pause_on_exit,
|
| bool pause_on_unhandled_exceptions,
|
| bool trace_service,
|
| - bool trace_compiler) {
|
| + bool trace_compiler,
|
| + bool testeeControlsServer) {
|
| assert(pause_on_start != null);
|
| assert(pause_on_exit != null);
|
| assert(pause_on_unhandled_exceptions != null);
|
| assert(trace_service != null);
|
| assert(trace_compiler != null);
|
| + assert(testeeControlsServer != null);
|
|
|
| if (_shouldLaunchSkyShell()) {
|
| return _spawnSkyProcess(pause_on_start,
|
| pause_on_exit,
|
| pause_on_unhandled_exceptions,
|
| trace_service,
|
| - trace_compiler);
|
| + trace_compiler,
|
| + testeeControlsServer);
|
| } else {
|
| return _spawnDartProcess(pause_on_start,
|
| pause_on_exit,
|
| pause_on_unhandled_exceptions,
|
| trace_service,
|
| - trace_compiler);
|
| + trace_compiler,
|
| + testeeControlsServer);
|
| }
|
| }
|
|
|
| @@ -117,7 +121,8 @@ class _ServiceTesteeLauncher {
|
| bool pause_on_exit,
|
| bool pause_on_unhandled_exceptions,
|
| bool trace_service,
|
| - bool trace_compiler) {
|
| + bool trace_compiler,
|
| + bool testeeControlsServer) {
|
| assert(!_shouldLaunchSkyShell());
|
|
|
| String dartExecutable = Platform.executable;
|
| @@ -141,7 +146,9 @@ class _ServiceTesteeLauncher {
|
| }
|
|
|
| fullArgs.addAll(Platform.executableArguments);
|
| - fullArgs.add('--enable-vm-service:0');
|
| + if (!testeeControlsServer) {
|
| + fullArgs.add('--enable-vm-service:0');
|
| + }
|
| fullArgs.addAll(args);
|
|
|
| return _spawnCommon(dartExecutable, fullArgs);
|
| @@ -179,7 +186,9 @@ class _ServiceTesteeLauncher {
|
| dartFlags.add('--enable_mirrors=true');
|
|
|
| fullArgs.addAll(Platform.executableArguments);
|
| - fullArgs.add('--observatory-port=0');
|
| + if (!testeeControlsServer) {
|
| + fullArgs.add('--observatory-port=0');
|
| + }
|
| fullArgs.add('--dart-flags=${dartFlags.join(' ')}');
|
| fullArgs.addAll(args);
|
|
|
| @@ -194,37 +203,38 @@ class _ServiceTesteeLauncher {
|
| return Process.start(executable, arguments, environment: environment);
|
| }
|
|
|
| - Future<int> launch(bool pause_on_start,
|
| + Future<Uri> launch(bool pause_on_start,
|
| bool pause_on_exit,
|
| bool pause_on_unhandled_exceptions,
|
| bool trace_service,
|
| - bool trace_compiler) {
|
| + bool trace_compiler,
|
| + bool testeeControlsServer) {
|
| return _spawnProcess(pause_on_start,
|
| pause_on_exit,
|
| pause_on_unhandled_exceptions,
|
| trace_service,
|
| - trace_compiler).then((p) {
|
| - Completer completer = new Completer();
|
| + trace_compiler,
|
| + testeeControlsServer).then((p) {
|
| + Completer<Uri> completer = new Completer<Uri>();
|
| process = p;
|
| - var portNumber;
|
| + Uri uri;
|
| var blank;
|
| var first = true;
|
| process.stdout.transform(UTF8.decoder)
|
| .transform(new LineSplitter()).listen((line) {
|
| - if (line.startsWith('Observatory listening on http://')) {
|
| - RegExp portExp = new RegExp(r"\d+.\d+.\d+.\d+:(\d+)");
|
| - var port = portExp.firstMatch(line).group(1);
|
| - portNumber = int.parse(port);
|
| + const kObservatoryListening = 'Observatory listening on ';
|
| + if (line.startsWith(kObservatoryListening)) {
|
| + uri = Uri.parse(line.substring(kObservatoryListening.length));
|
| }
|
| if (pause_on_start || line == '') {
|
| // Received blank line.
|
| blank = true;
|
| }
|
| - if (portNumber != null && blank == true && first == true) {
|
| - completer.complete(portNumber);
|
| + if ((uri != null) && (blank == true) && (first == true)) {
|
| + completer.complete(uri);
|
| // Stop repeat completions.
|
| first = false;
|
| - print('** Signaled to run test queries on $portNumber');
|
| + print('** Signaled to run test queries on $uri');
|
| }
|
| print('>testee>out> $line');
|
| });
|
| @@ -250,62 +260,11 @@ class _ServiceTesteeLauncher {
|
| }
|
| }
|
|
|
| -// A tester runner that doesn't spawn a process but instead connects to
|
| -// an already running flutter application running on a device. Assumes
|
| -// port 8100. This is only useful for debugging.
|
| -class _FlutterDeviceServiceTesterRunner {
|
| - void run({List<String> mainArgs,
|
| - List<VMTest> vmTests,
|
| - List<IsolateTest> isolateTests,
|
| - bool pause_on_start: false,
|
| - bool pause_on_exit: false,
|
| - bool trace_service: false,
|
| - bool trace_compiler: false,
|
| - bool verbose_vm: false,
|
| - bool pause_on_unhandled_exceptions: false}) {
|
| - var port = 8100;
|
| - serviceWebsocketAddress = 'ws://localhost:$port/ws';
|
| - serviceHttpAddress = 'http://localhost:$port';
|
| - var name = Platform.script.pathSegments.last;
|
| - Chain.capture(() async {
|
| - var vm =
|
| - new WebSocketVM(new WebSocketVMTarget(serviceWebsocketAddress));
|
| - print('Loading VM...');
|
| - await vm.load();
|
| - print('Done loading VM');
|
| -
|
| - // Run vm tests.
|
| - if (vmTests != null) {
|
| - var testIndex = 1;
|
| - var totalTests = vmTests.length;
|
| - for (var test in vmTests) {
|
| - vm.verbose = verbose_vm;
|
| - print('Running $name [$testIndex/$totalTests]');
|
| - testIndex++;
|
| - await test(vm);
|
| - }
|
| - }
|
| -
|
| - // Run isolate tests.
|
| - if (isolateTests != null) {
|
| - var isolate = await vm.isolates.first.load();
|
| - var testIndex = 1;
|
| - var totalTests = isolateTests.length;
|
| - for (var test in isolateTests) {
|
| - vm.verbose = verbose_vm;
|
| - print('Running $name [$testIndex/$totalTests]');
|
| - testIndex++;
|
| - await test(isolate);
|
| - }
|
| - }
|
| - }, onError: (error, stackTrace) {
|
| - print('Unexpected exception in service tests: $error\n$stackTrace');
|
| - });
|
| - }
|
| -}
|
| -
|
| -void suppressWarning() {
|
| - new _FlutterDeviceServiceTesterRunner();
|
| +void setupAddresses(Uri serverAddress) {
|
| + serviceWebsocketAddress =
|
| + 'ws://${serverAddress.authority}${serverAddress.path}ws';
|
| + serviceHttpAddress =
|
| + 'http://${serverAddress.authority}${serverAddress.path}';
|
| }
|
|
|
| class _ServiceTesterRunner {
|
| @@ -317,19 +276,20 @@ class _ServiceTesterRunner {
|
| bool trace_service: false,
|
| bool trace_compiler: false,
|
| bool verbose_vm: false,
|
| - bool pause_on_unhandled_exceptions: false}) {
|
| + bool pause_on_unhandled_exceptions: false,
|
| + bool testeeControlsServer: false}) {
|
| var process = new _ServiceTesteeLauncher();
|
| process.launch(pause_on_start, pause_on_exit,
|
| pause_on_unhandled_exceptions,
|
| - trace_service, trace_compiler).then((port) async {
|
| + trace_service, trace_compiler,
|
| + testeeControlsServer).then((Uri serverAddress) async {
|
| if (mainArgs.contains("--gdb")) {
|
| var pid = process.process.pid;
|
| var wait = new Duration(seconds: 10);
|
| print("Testee has pid $pid, waiting $wait before continuing");
|
| sleep(wait);
|
| }
|
| - serviceWebsocketAddress = 'ws://localhost:$port/ws';
|
| - serviceHttpAddress = 'http://localhost:$port';
|
| + setupAddresses(serverAddress);
|
| var name = Platform.script.pathSegments.last;
|
| Chain.capture(() async {
|
| var vm =
|
| @@ -386,7 +346,8 @@ Future runIsolateTests(List<String> mainArgs,
|
| bool trace_service: false,
|
| bool trace_compiler: false,
|
| bool verbose_vm: false,
|
| - bool pause_on_unhandled_exceptions: false}) async {
|
| + bool pause_on_unhandled_exceptions: false,
|
| + bool testeeControlsServer: false}) async {
|
| assert(!pause_on_start || testeeBefore == null);
|
| if (_isTestee()) {
|
| new _ServiceTesteeRunner().run(testeeBefore: testeeBefore,
|
| @@ -402,7 +363,8 @@ Future runIsolateTests(List<String> mainArgs,
|
| trace_service: trace_service,
|
| trace_compiler: trace_compiler,
|
| verbose_vm: verbose_vm,
|
| - pause_on_unhandled_exceptions: pause_on_unhandled_exceptions);
|
| + pause_on_unhandled_exceptions: pause_on_unhandled_exceptions,
|
| + testeeControlsServer: testeeControlsServer);
|
| }
|
| }
|
|
|
|
|