Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(94)

Side by Side Diff: runtime/observatory/tests/service/test_helper.dart

Issue 2343183002: Fix service test websocket error edge case (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/observatory/lib/src/service/object.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library test_helper; 5 library test_helper;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:io'; 9 import 'dart:io';
10 import 'package:observatory/service_io.dart'; 10 import 'package:observatory/service_io.dart';
11 import 'package:stack_trace/stack_trace.dart'; 11 import 'package:stack_trace/stack_trace.dart';
12 import 'service_test_common.dart'; 12 import 'service_test_common.dart';
13 13
14 /// Will be set to the http address of the VM's service protocol before 14 /// Will be set to the http address of the VM's service protocol before
15 /// any tests are invoked. 15 /// any tests are invoked.
16 String serviceHttpAddress; 16 String serviceHttpAddress;
17 String serviceWebsocketAddress; 17 String serviceWebsocketAddress;
18 18
19 bool _isWebSocketDisconnect(e) {
20 return e is NetworkRpcException;
21 }
22
23
24 const String _TESTEE_ENV_KEY = 'SERVICE_TEST_TESTEE'; 19 const String _TESTEE_ENV_KEY = 'SERVICE_TEST_TESTEE';
25 const Map<String, String> _TESTEE_SPAWN_ENV = const { 20 const Map<String, String> _TESTEE_SPAWN_ENV = const {
26 _TESTEE_ENV_KEY: 'true' 21 _TESTEE_ENV_KEY: 'true'
27 }; 22 };
28 bool _isTestee() { 23 bool _isTestee() {
29 return Platform.environment.containsKey(_TESTEE_ENV_KEY); 24 return Platform.environment.containsKey(_TESTEE_ENV_KEY);
30 } 25 }
31 26
32 const String _SKY_SHELL_ENV_KEY = 'SERVICE_TEST_SKY_SHELL'; 27 const String _SKY_SHELL_ENV_KEY = 'SERVICE_TEST_SKY_SHELL';
33 bool _shouldLaunchSkyShell() { 28 bool _shouldLaunchSkyShell() {
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 var isolate = await vm.isolates.first.load(); 291 var isolate = await vm.isolates.first.load();
297 var testIndex = 1; 292 var testIndex = 1;
298 var totalTests = isolateTests.length; 293 var totalTests = isolateTests.length;
299 for (var test in isolateTests) { 294 for (var test in isolateTests) {
300 vm.verbose = verbose_vm; 295 vm.verbose = verbose_vm;
301 print('Running $name [$testIndex/$totalTests]'); 296 print('Running $name [$testIndex/$totalTests]');
302 testIndex++; 297 testIndex++;
303 await test(isolate); 298 await test(isolate);
304 } 299 }
305 } 300 }
306 }, onError: (e, st) { 301 }, onError: (error, stackTrace) {
307 if (!_isWebSocketDisconnect(e)) { 302 print('Unexpected exception in service tests: $error\n$stackTrace');
308 print('Unexpected exception in service tests: $e $st');
309 throw e;
310 }
311 }); 303 });
312 } 304 }
313 } 305 }
314 306
315 void suppressWarning() { 307 void suppressWarning() {
316 new _FlutterDeviceServiceTesterRunner(); 308 new _FlutterDeviceServiceTesterRunner();
317 } 309 }
318 310
319 class _ServiceTesterRunner { 311 class _ServiceTesterRunner {
320 void run({List<String> mainArgs, 312 void run({List<String> mainArgs,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 var totalTests = isolateTests.length; 357 var totalTests = isolateTests.length;
366 for (var test in isolateTests) { 358 for (var test in isolateTests) {
367 vm.verbose = verbose_vm; 359 vm.verbose = verbose_vm;
368 print('Running $name [$testIndex/$totalTests]'); 360 print('Running $name [$testIndex/$totalTests]');
369 testIndex++; 361 testIndex++;
370 await test(isolate); 362 await test(isolate);
371 } 363 }
372 } 364 }
373 365
374 await process.requestExit(); 366 await process.requestExit();
375 }, onError: (e, st) { 367 }, onError: (error, stackTrace) {
376 process.requestExit(); 368 process.requestExit();
377 // TODO: remove this workaround. 369 print('Unexpected exception in service tests: $error\n$stackTrace');
378 // This is necessary due to non awaited operations. 370 throw error;
379 // E.G. object.dart (398~402)
380 // When an exception is thrown inside a test (directly or via await) the
381 // stacktrace is non-null and shows where the exception has been thrown.
382 // If vice versa the exception is due to an error in a non-awaited
383 // Future the stacktrace is null.
384 if (st != null || !_isWebSocketDisconnect(e)) {
385 print('Unexpected exception in service tests: $e $st');
386 throw e;
387 }
388 }); 371 });
389 }); 372 });
390 } 373 }
391 } 374 }
392 375
393 /// Runs [tests] in sequence, each of which should take an [Isolate] and 376 /// Runs [tests] in sequence, each of which should take an [Isolate] and
394 /// return a [Future]. Code for setting up state can run before and/or 377 /// return a [Future]. Code for setting up state can run before and/or
395 /// concurrently with the tests. Uses [mainArgs] to determine whether 378 /// concurrently with the tests. Uses [mainArgs] to determine whether
396 /// to run tests or testee in this invokation of the script. 379 /// to run tests or testee in this invokation of the script.
397 Future runIsolateTests(List<String> mainArgs, 380 Future runIsolateTests(List<String> mainArgs,
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 mainArgs: mainArgs, 469 mainArgs: mainArgs,
487 vmTests: tests, 470 vmTests: tests,
488 pause_on_start: pause_on_start, 471 pause_on_start: pause_on_start,
489 pause_on_exit: pause_on_exit, 472 pause_on_exit: pause_on_exit,
490 trace_service: trace_service, 473 trace_service: trace_service,
491 trace_compiler: trace_compiler, 474 trace_compiler: trace_compiler,
492 verbose_vm: verbose_vm, 475 verbose_vm: verbose_vm,
493 pause_on_unhandled_exceptions: pause_on_unhandled_exceptions); 476 pause_on_unhandled_exceptions: pause_on_unhandled_exceptions);
494 } 477 }
495 } 478 }
OLDNEW
« no previous file with comments | « runtime/observatory/lib/src/service/object.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698