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

Side by Side Diff: tools/testing/dart/browser_controller.dart

Issue 2919573003: Revert "Revert "Replace the configuration map with a typed object."" (Closed)
Patch Set: Another test fix. Created 3 years, 6 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 | « tests/standalone/status_expression_test.dart ('k') | tools/testing/dart/co19_test.dart » ('j') | 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 library browser;
5 4
6 import "dart:async"; 5 import 'dart:async';
7 import "dart:convert" show UTF8, JSON; 6 import 'dart:convert';
8 import "dart:core"; 7 import 'dart:core';
9 import "dart:io"; 8 import 'dart:io';
10 import "dart:math" show min; 9 import 'dart:math';
11 10
12 import 'android.dart'; 11 import 'android.dart';
13 import 'http_server.dart'; 12 import 'configuration.dart';
14 import 'path.dart'; 13 import 'path.dart';
14 import 'reset_safari.dart';
15 import 'utils.dart'; 15 import 'utils.dart';
16 16
17 import 'reset_safari.dart' show killAndResetSafari;
18
19 typedef void BrowserDoneCallback(BrowserTestOutput output); 17 typedef void BrowserDoneCallback(BrowserTestOutput output);
20 typedef void TestChangedCallback(String browserId, String output, int testId); 18 typedef void TestChangedCallback(String browserId, String output, int testId);
21 typedef BrowserTest NextTestCallback(String browserId); 19 typedef BrowserTest NextTestCallback(String browserId);
22 20
23 class BrowserOutput { 21 class BrowserOutput {
24 final StringBuffer stdout = new StringBuffer(); 22 final StringBuffer stdout = new StringBuffer();
25 final StringBuffer stderr = new StringBuffer(); 23 final StringBuffer stderr = new StringBuffer();
26 final StringBuffer eventLog = new StringBuffer(); 24 final StringBuffer eventLog = new StringBuffer();
27 } 25 }
28 26
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 64
67 /** Print everything (stdout, stderr, usageLog) whenever we add to it */ 65 /** Print everything (stdout, stderr, usageLog) whenever we add to it */
68 bool debugPrint = false; 66 bool debugPrint = false;
69 67
70 // This future returns when the process exits. It is also the return value 68 // This future returns when the process exits. It is also the return value
71 // of close() 69 // of close()
72 Future done; 70 Future done;
73 71
74 Browser(); 72 Browser();
75 73
76 factory Browser.byName(String name, String executablePath, 74 factory Browser.byRuntime(Runtime runtime, String executablePath,
77 [bool checkedMode = false]) { 75 [bool checkedMode = false]) {
78 Browser browser; 76 Browser browser;
79 if (name == 'firefox') { 77 switch (runtime) {
80 browser = new Firefox(); 78 case Runtime.firefox:
81 } else if (name == 'chrome') { 79 browser = new Firefox();
82 browser = new Chrome(); 80 break;
83 } else if (name == 'dartium') { 81 case Runtime.chrome:
84 browser = new Dartium(checkedMode); 82 browser = new Chrome();
85 } else if (name == 'safari') { 83 break;
86 browser = new Safari(); 84 case Runtime.dartium:
87 } else if (name == 'safarimobilesim') { 85 browser = new Dartium(checkedMode);
88 browser = new SafariMobileSimulator(); 86 break;
89 } else if (name.startsWith('ie')) { 87 case Runtime.safari:
90 browser = new IE(); 88 browser = new Safari();
91 } else { 89 break;
92 throw "Non supported browser"; 90 case Runtime.safariMobileSim:
91 browser = new SafariMobileSimulator();
92 break;
93 case Runtime.ie9:
94 case Runtime.ie10:
95 case Runtime.ie11:
96 browser = new IE();
97 break;
98 default:
99 throw "unreachable";
93 } 100 }
101
94 browser._binary = executablePath; 102 browser._binary = executablePath;
95 return browser; 103 return browser;
96 } 104 }
97 105
98 static const List<String> SUPPORTED_BROWSERS = const [ 106 static const List<String> SUPPORTED_BROWSERS = const [
99 'safari', 107 'safari',
100 'ff', 108 'ff',
101 'firefox', 109 'firefox',
102 'chrome', 110 'chrome',
103 'ie9', 111 'ie9',
104 'ie10', 112 'ie10',
105 'ie11', 113 'ie11',
106 'dartium' 114 'dartium'
107 ]; 115 ];
108 116
109 static const List<String> BROWSERS_WITH_WINDOW_SUPPORT = const [
110 'ie11',
111 'ie10'
112 ];
113
114 /// If [browserName] doesn't support Window.open, we use iframes instead.
115 static bool requiresIframe(String browserName) {
116 return !BROWSERS_WITH_WINDOW_SUPPORT.contains(browserName);
117 }
118
119 static bool requiresFocus(String browserName) { 117 static bool requiresFocus(String browserName) {
120 return browserName == "safari"; 118 return browserName == "safari";
121 } 119 }
122 120
123 // TODO(kustermann): add standard support for chrome on android 121 // TODO(kustermann): add standard support for chrome on android
124 static bool supportedBrowser(String name) { 122 static bool supportedBrowser(String name) {
125 return SUPPORTED_BROWSERS.contains(name); 123 return SUPPORTED_BROWSERS.contains(name);
126 } 124 }
127 125
128 void _logEvent(String event) { 126 void _logEvent(String event) {
(...skipping 809 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 /// driver page to the browsers, serves tests, and receives results and 936 /// driver page to the browsers, serves tests, and receives results and
939 /// requests back from the browsers. 937 /// requests back from the browsers.
940 class BrowserTestRunner { 938 class BrowserTestRunner {
941 static const int MAX_NEXT_TEST_TIMEOUTS = 10; 939 static const int MAX_NEXT_TEST_TIMEOUTS = 10;
942 static const Duration NEXT_TEST_TIMEOUT = const Duration(seconds: 120); 940 static const Duration NEXT_TEST_TIMEOUT = const Duration(seconds: 120);
943 static const Duration RESTART_BROWSER_INTERVAL = const Duration(seconds: 60); 941 static const Duration RESTART_BROWSER_INTERVAL = const Duration(seconds: 60);
944 942
945 /// If the queue was recently empty, don't start another browser. 943 /// If the queue was recently empty, don't start another browser.
946 static const Duration MIN_NONEMPTY_QUEUE_TIME = const Duration(seconds: 1); 944 static const Duration MIN_NONEMPTY_QUEUE_TIME = const Duration(seconds: 1);
947 945
948 final Map<String, dynamic> configuration; 946 final Configuration configuration;
949 final BrowserTestingServer testingServer; 947 final BrowserTestingServer testingServer;
950 948
951 final String localIp; 949 final String localIp;
952 final String browserName;
953 int maxNumBrowsers; 950 int maxNumBrowsers;
954 final bool checkedMode;
955 int numBrowsers = 0; 951 int numBrowsers = 0;
956 // Used to send back logs from the browser (start, stop etc) 952 // Used to send back logs from the browser (start, stop etc)
957 Function logger; 953 Function logger;
958 954
959 int browserIdCounter = 1; 955 int browserIdCounter = 1;
960 956
961 bool testingServerStarted = false; 957 bool testingServerStarted = false;
962 bool underTermination = false; 958 bool underTermination = false;
963 int numBrowserGetTestTimeouts = 0; 959 int numBrowserGetTestTimeouts = 0;
964 DateTime lastEmptyTestQueueTime = new DateTime.now(); 960 DateTime lastEmptyTestQueueTime = new DateTime.now();
965 String _currentStartingBrowserId; 961 String _currentStartingBrowserId;
966 List<BrowserTest> testQueue = new List<BrowserTest>(); 962 List<BrowserTest> testQueue = [];
967 Map<String, BrowserStatus> browserStatus = new Map<String, BrowserStatus>(); 963 Map<String, BrowserStatus> browserStatus = {};
968 964
969 var adbDeviceMapping = new Map<String, AdbDevice>(); 965 Map<String, AdbDevice> adbDeviceMapping = {};
970 List<AdbDevice> idleAdbDevices; 966 List<AdbDevice> idleAdbDevices;
971 967
972 // This cache is used to guarantee that we never see double reporting. 968 // This cache is used to guarantee that we never see double reporting.
973 // If we do we need to provide developers with this information. 969 // If we do we need to provide developers with this information.
974 // We don't add urls to the cache until we have run it. 970 // We don't add urls to the cache until we have run it.
975 Map<int, String> testCache = new Map<int, String>(); 971 Map<int, String> testCache = {};
976 972
977 Map<int, String> doubleReportingOutputs = new Map<int, String>(); 973 Map<int, String> doubleReportingOutputs = {};
978 List<String> timedOut = []; 974 List<String> timedOut = [];
979 975
980 // We will start a new browser when the test queue hasn't been empty 976 // We will start a new browser when the test queue hasn't been empty
981 // recently, we have fewer than maxNumBrowsers browsers, and there is 977 // recently, we have fewer than maxNumBrowsers browsers, and there is
982 // no other browser instance currently starting up. 978 // no other browser instance currently starting up.
983 bool get queueWasEmptyRecently { 979 bool get queueWasEmptyRecently {
984 return testQueue.isEmpty || 980 return testQueue.isEmpty ||
985 new DateTime.now().difference(lastEmptyTestQueueTime) < 981 new DateTime.now().difference(lastEmptyTestQueueTime) <
986 MIN_NONEMPTY_QUEUE_TIME; 982 MIN_NONEMPTY_QUEUE_TIME;
987 } 983 }
988 984
989 // While a browser is starting, but has not requested its first test, its 985 // While a browser is starting, but has not requested its first test, its
990 // browserId is stored in _currentStartingBrowserId. 986 // browserId is stored in _currentStartingBrowserId.
991 // When no browser is currently starting, _currentStartingBrowserId is null. 987 // When no browser is currently starting, _currentStartingBrowserId is null.
992 bool get aBrowserIsCurrentlyStarting => _currentStartingBrowserId != null; 988 bool get aBrowserIsCurrentlyStarting => _currentStartingBrowserId != null;
993 void markCurrentlyStarting(String id) { 989 void markCurrentlyStarting(String id) {
994 _currentStartingBrowserId = id; 990 _currentStartingBrowserId = id;
995 } 991 }
996 992
997 void markNotCurrentlyStarting(String id) { 993 void markNotCurrentlyStarting(String id) {
998 if (_currentStartingBrowserId == id) _currentStartingBrowserId = null; 994 if (_currentStartingBrowserId == id) _currentStartingBrowserId = null;
999 } 995 }
1000 996
1001 BrowserTestRunner(Map<String, dynamic> configuration, String localIp, 997 BrowserTestRunner(
1002 String browserName, this.maxNumBrowsers) 998 Configuration configuration, String localIp, this.maxNumBrowsers)
1003 : configuration = configuration, 999 : configuration = configuration,
1004 localIp = localIp, 1000 localIp = localIp,
1005 browserName = (browserName == 'ff') ? 'firefox' : browserName, 1001 testingServer = new BrowserTestingServer(configuration, localIp,
1006 checkedMode = configuration['checked'] as bool, 1002 Browser.requiresFocus(configuration.runtime.name)) {
1007 testingServer = new BrowserTestingServer(
1008 configuration,
1009 localIp,
1010 Browser.requiresIframe(browserName),
1011 Browser.requiresFocus(browserName)) {
1012 testingServer.testRunner = this; 1003 testingServer.testRunner = this;
1013 } 1004 }
1014 1005
1015 Future start() async { 1006 Future start() async {
1016 await testingServer.start(); 1007 await testingServer.start();
1017 testingServer 1008 testingServer
1018 ..testDoneCallBack = handleResults 1009 ..testDoneCallBack = handleResults
1019 ..testStatusUpdateCallBack = handleStatusUpdate 1010 ..testStatusUpdateCallBack = handleStatusUpdate
1020 ..testStartedCallBack = handleStarted 1011 ..testStartedCallBack = handleStarted
1021 ..nextTestCallBack = getNextTest; 1012 ..nextTestCallBack = getNextTest;
1022 if (browserName == 'chromeOnAndroid') { 1013 if (configuration.runtime == Runtime.chromeOnAndroid) {
1023 var idbNames = await AdbHelper.listDevices(); 1014 var idbNames = await AdbHelper.listDevices();
1024 idleAdbDevices = new List.from(idbNames.map((id) => new AdbDevice(id))); 1015 idleAdbDevices = new List.from(idbNames.map((id) => new AdbDevice(id)));
1025 maxNumBrowsers = min(maxNumBrowsers, idleAdbDevices.length); 1016 maxNumBrowsers = min(maxNumBrowsers, idleAdbDevices.length);
1026 } 1017 }
1027 testingServerStarted = true; 1018 testingServerStarted = true;
1028 requestBrowser(); 1019 requestBrowser();
1029 } 1020 }
1030 1021
1031 /// requestBrowser() is called whenever we might want to start an additional 1022 /// requestBrowser() is called whenever we might want to start an additional
1032 /// browser instance. 1023 /// browser instance.
1033 /// It is called when starting the BrowserTestRunner, and whenever a browser 1024 /// It is called when starting the BrowserTestRunner, and whenever a browser
1034 /// is killed, whenever a new test is enqueued, or whenever a browser 1025 /// is killed, whenever a new test is enqueued, or whenever a browser
1035 /// finishes a test. 1026 /// finishes a test.
1036 /// So we are guaranteed that this will always eventually be called, as long 1027 /// So we are guaranteed that this will always eventually be called, as long
1037 /// as the test queue isn't empty. 1028 /// as the test queue isn't empty.
1038 void requestBrowser() { 1029 void requestBrowser() {
1039 if (!testingServerStarted) return; 1030 if (!testingServerStarted) return;
1040 if (underTermination) return; 1031 if (underTermination) return;
1041 if (numBrowsers == maxNumBrowsers) return; 1032 if (numBrowsers == maxNumBrowsers) return;
1042 if (aBrowserIsCurrentlyStarting) return; 1033 if (aBrowserIsCurrentlyStarting) return;
1043 if (numBrowsers > 0 && queueWasEmptyRecently) return; 1034 if (numBrowsers > 0 && queueWasEmptyRecently) return;
1044 createBrowser(); 1035 createBrowser();
1045 } 1036 }
1046 1037
1047 String getNextBrowserId() => "BROWSER${browserIdCounter++}"; 1038 String getNextBrowserId() => "BROWSER${browserIdCounter++}";
1048 1039
1049 void createBrowser() { 1040 void createBrowser() {
1050 final String id = getNextBrowserId(); 1041 var id = getNextBrowserId();
1051 final String url = testingServer.getDriverUrl(id); 1042 var url = testingServer.getDriverUrl(id);
1043
1052 Browser browser; 1044 Browser browser;
1053 if (browserName == 'chromeOnAndroid') { 1045 if (configuration.runtime == Runtime.chromeOnAndroid) {
1054 AdbDevice device = idleAdbDevices.removeLast(); 1046 AdbDevice device = idleAdbDevices.removeLast();
1055 adbDeviceMapping[id] = device; 1047 adbDeviceMapping[id] = device;
1056 browser = new AndroidChrome(device); 1048 browser = new AndroidChrome(device);
1057 } else { 1049 } else {
1058 String path = Locations.getBrowserLocation(browserName, configuration); 1050 var path = configuration.browserLocation;
1059 browser = new Browser.byName(browserName, path, checkedMode); 1051 browser = new Browser.byRuntime(
1052 configuration.runtime, path, configuration.isChecked);
1060 browser.logger = logger; 1053 browser.logger = logger;
1061 } 1054 }
1055
1062 browser.id = id; 1056 browser.id = id;
1063 markCurrentlyStarting(id); 1057 markCurrentlyStarting(id);
1064 final status = new BrowserStatus(browser); 1058 var status = new BrowserStatus(browser);
1065 browserStatus[id] = status; 1059 browserStatus[id] = status;
1066 numBrowsers++; 1060 numBrowsers++;
1067 status.nextTestTimeout = createNextTestTimer(status); 1061 status.nextTestTimeout = createNextTestTimer(status);
1068 browser.start(url); 1062 browser.start(url);
1069 } 1063 }
1070 1064
1071 void handleResults(String browserId, String output, int testId) { 1065 void handleResults(String browserId, String output, int testId) {
1072 var status = browserStatus[browserId]; 1066 var status = browserStatus[browserId];
1073 if (testCache.containsKey(testId)) { 1067 if (testCache.containsKey(testId)) {
1074 doubleReportingOutputs[testId] = output; 1068 doubleReportingOutputs[testId] = output;
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 1175
1182 // We don't want to start a new browser if we are terminating. 1176 // We don't want to start a new browser if we are terminating.
1183 if (underTermination) return; 1177 if (underTermination) return;
1184 removeBrowser(id); 1178 removeBrowser(id);
1185 requestBrowser(); 1179 requestBrowser();
1186 } 1180 }
1187 1181
1188 /// Remove a browser that has closed from our data structures that track 1182 /// Remove a browser that has closed from our data structures that track
1189 /// open browsers. Check if we want to replace it with a new browser. 1183 /// open browsers. Check if we want to replace it with a new browser.
1190 void removeBrowser(String id) { 1184 void removeBrowser(String id) {
1191 if (browserName == 'chromeOnAndroid') { 1185 if (configuration.runtime == Runtime.chromeOnAndroid) {
1192 idleAdbDevices.add(adbDeviceMapping.remove(id)); 1186 idleAdbDevices.add(adbDeviceMapping.remove(id));
1193 } 1187 }
1194 markNotCurrentlyStarting(id); 1188 markNotCurrentlyStarting(id);
1195 browserStatus.remove(id); 1189 browserStatus.remove(id);
1196 --numBrowsers; 1190 --numBrowsers;
1197 } 1191 }
1198 1192
1199 BrowserTest getNextTest(String browserId) { 1193 BrowserTest getNextTest(String browserId) {
1200 markNotCurrentlyStarting(browserId); 1194 markNotCurrentlyStarting(browserId);
1201 var status = browserStatus[browserId]; 1195 var status = browserStatus[browserId];
1202 if (status == null) return null; 1196 if (status == null) return null;
1203 if (status.nextTestTimeout != null) { 1197 if (status.nextTestTimeout != null) {
1204 status.nextTestTimeout.cancel(); 1198 status.nextTestTimeout.cancel();
1205 status.nextTestTimeout = null; 1199 status.nextTestTimeout = null;
1206 } 1200 }
1207 if (testQueue.isEmpty) return null; 1201 if (testQueue.isEmpty) return null;
1208 1202
1209 // We are currently terminating this browser, don't start a new test. 1203 // We are currently terminating this browser, don't start a new test.
1210 if (status.timeout) return null; 1204 if (status.timeout) return null;
1211 1205
1212 // Restart Internet Explorer if it has been 1206 // Restart Internet Explorer if it has been
1213 // running for longer than RESTART_BROWSER_INTERVAL. The tests have 1207 // running for longer than RESTART_BROWSER_INTERVAL. The tests have
1214 // had flaky timeouts, and this may help. 1208 // had flaky timeouts, and this may help.
1215 if ((browserName == 'ie10' || browserName == 'ie11') && 1209 if ((configuration.runtime == Runtime.ie10 ||
1210 configuration.runtime == Runtime.ie11) &&
1216 status.timeSinceRestart.elapsed > RESTART_BROWSER_INTERVAL) { 1211 status.timeSinceRestart.elapsed > RESTART_BROWSER_INTERVAL) {
1217 var id = status.browser.id; 1212 var id = status.browser.id;
1218 // Reset stopwatch so we don't trigger again before restarting. 1213 // Reset stopwatch so we don't trigger again before restarting.
1219 status.timeout = true; 1214 status.timeout = true;
1220 status.browser.close().then((_) { 1215 status.browser.close().then((_) {
1221 // We don't want to start a new browser if we are terminating. 1216 // We don't want to start a new browser if we are terminating.
1222 if (underTermination) return; 1217 if (underTermination) return;
1223 removeBrowser(id); 1218 removeBrowser(id);
1224 requestBrowser(); 1219 requestBrowser();
1225 }); 1220 });
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1335 for (var browser in browsers) { 1330 for (var browser in browsers) {
1336 await browser.close(); 1331 await browser.close();
1337 } 1332 }
1338 1333
1339 testingServer.errorReportingServer.close(); 1334 testingServer.errorReportingServer.close();
1340 printDoubleReportingTests(); 1335 printDoubleReportingTests();
1341 } 1336 }
1342 } 1337 }
1343 1338
1344 class BrowserTestingServer { 1339 class BrowserTestingServer {
1345 final Map configuration; 1340 final Configuration configuration;
1346 1341
1347 /// Interface of the testing server: 1342 /// Interface of the testing server:
1348 /// 1343 ///
1349 /// GET /driver/BROWSER_ID -- This will get the driver page to fetch 1344 /// GET /driver/BROWSER_ID -- This will get the driver page to fetch
1350 /// and run tests ... 1345 /// and run tests ...
1351 /// GET /next_test/BROWSER_ID -- returns "WAIT" "TERMINATE" or "url#id" 1346 /// GET /next_test/BROWSER_ID -- returns "WAIT" "TERMINATE" or "url#id"
1352 /// where url is the test to run, and id is the id of the test. 1347 /// where url is the test to run, and id is the id of the test.
1353 /// If there are currently no available tests the waitSignal is send 1348 /// If there are currently no available tests the waitSignal is send
1354 /// back. If we are in the process of terminating the terminateSignal 1349 /// back. If we are in the process of terminating the terminateSignal
1355 /// is send back and the browser will stop requesting new tasks. 1350 /// is send back and the browser will stop requesting new tasks.
1356 /// POST /report/BROWSER_ID?id=NUM -- sends back the dom of the executed 1351 /// POST /report/BROWSER_ID?id=NUM -- sends back the dom of the executed
1357 /// test 1352 /// test
1358 1353
1359 final String localIp; 1354 final String localIp;
1360 final bool useIframe;
1361 final bool requiresFocus; 1355 final bool requiresFocus;
1362 BrowserTestRunner testRunner; 1356 BrowserTestRunner testRunner;
1363 1357
1364 static const String driverPath = "/driver"; 1358 static const String driverPath = "/driver";
1365 static const String nextTestPath = "/next_test"; 1359 static const String nextTestPath = "/next_test";
1366 static const String reportPath = "/report"; 1360 static const String reportPath = "/report";
1367 static const String statusUpdatePath = "/status_update"; 1361 static const String statusUpdatePath = "/status_update";
1368 static const String startedPath = "/started"; 1362 static const String startedPath = "/started";
1369 static const String waitSignal = "WAIT"; 1363 static const String waitSignal = "WAIT";
1370 static const String terminateSignal = "TERMINATE"; 1364 static const String terminateSignal = "TERMINATE";
1371 1365
1372 var testCount = 0; 1366 var testCount = 0;
1373 HttpServer errorReportingServer; 1367 HttpServer errorReportingServer;
1374 bool underTermination = false; 1368 bool underTermination = false;
1375 1369
1376 TestChangedCallback testDoneCallBack; 1370 TestChangedCallback testDoneCallBack;
1377 TestChangedCallback testStatusUpdateCallBack; 1371 TestChangedCallback testStatusUpdateCallBack;
1378 TestChangedCallback testStartedCallBack; 1372 TestChangedCallback testStartedCallBack;
1379 NextTestCallback nextTestCallBack; 1373 NextTestCallback nextTestCallBack;
1380 1374
1381 BrowserTestingServer( 1375 BrowserTestingServer(this.configuration, this.localIp, this.requiresFocus);
1382 this.configuration, this.localIp, this.useIframe, this.requiresFocus);
1383 1376
1384 Future start() { 1377 Future start() {
1385 var testDriverErrorPort = configuration['test_driver_error_port'] as int;
1386 return HttpServer 1378 return HttpServer
1387 .bind(localIp, testDriverErrorPort) 1379 .bind(localIp, configuration.testDriverErrorPort)
1388 .then(setupErrorServer) 1380 .then(setupErrorServer)
1389 .then(setupDispatchingServer); 1381 .then(setupDispatchingServer);
1390 } 1382 }
1391 1383
1392 void setupErrorServer(HttpServer server) { 1384 void setupErrorServer(HttpServer server) {
1393 errorReportingServer = server; 1385 errorReportingServer = server;
1394 void errorReportingHandler(HttpRequest request) { 1386 void errorReportingHandler(HttpRequest request) {
1395 StringBuffer buffer = new StringBuffer(); 1387 StringBuffer buffer = new StringBuffer();
1396 request.transform(UTF8.decoder).listen((data) { 1388 request.transform(UTF8.decoder).listen((data) {
1397 buffer.write(data); 1389 buffer.write(data);
(...skipping 13 matching lines...) Expand all
1411 } 1403 }
1412 1404
1413 void errorHandler(e) { 1405 void errorHandler(e) {
1414 if (!underTermination) print("Error occured in httpserver: $e"); 1406 if (!underTermination) print("Error occured in httpserver: $e");
1415 } 1407 }
1416 1408
1417 errorReportingServer.listen(errorReportingHandler, onError: errorHandler); 1409 errorReportingServer.listen(errorReportingHandler, onError: errorHandler);
1418 } 1410 }
1419 1411
1420 void setupDispatchingServer(_) { 1412 void setupDispatchingServer(_) {
1421 var server = (configuration['_servers_'] as TestingServers).server; 1413 var server = configuration.servers.server;
1422 void noCache(HttpRequest request) { 1414 void noCache(HttpRequest request) {
1423 request.response.headers 1415 request.response.headers
1424 .set("Cache-Control", "no-cache, no-store, must-revalidate"); 1416 .set("Cache-Control", "no-cache, no-store, must-revalidate");
1425 } 1417 }
1426 1418
1427 int testId(HttpRequest request) => 1419 int testId(HttpRequest request) =>
1428 int.parse(request.uri.queryParameters["id"]); 1420 int.parse(request.uri.queryParameters["id"]);
1429 String browserId(HttpRequest request, String prefix) => 1421 String browserId(HttpRequest request, String prefix) =>
1430 request.uri.path.substring(prefix.length + 1); 1422 request.uri.path.substring(prefix.length + 1);
1431 1423
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1527 return nextTest == null ? waitSignal : nextTest.toJSON(); 1519 return nextTest == null ? waitSignal : nextTest.toJSON();
1528 } 1520 }
1529 1521
1530 String getDriverUrl(String browserId) { 1522 String getDriverUrl(String browserId) {
1531 if (errorReportingServer == null) { 1523 if (errorReportingServer == null) {
1532 print("Bad browser testing server, you are not started yet. Can't " 1524 print("Bad browser testing server, you are not started yet. Can't "
1533 "produce driver url"); 1525 "produce driver url");
1534 exit(1); 1526 exit(1);
1535 // This should never happen - exit immediately; 1527 // This should never happen - exit immediately;
1536 } 1528 }
1537 var port = (configuration['_servers_'] as TestingServers).port; 1529
1538 return "http://$localIp:$port/driver/$browserId"; 1530 return "http://$localIp:${configuration.servers.port}/driver/$browserId";
1539 } 1531 }
1540 1532
1541 Future<String> getDriverPage(String browserId) async { 1533 Future<String> getDriverPage(String browserId) async {
1542 await testRunner.browserStatus[browserId].browser.onDriverPageRequested(); 1534 await testRunner.browserStatus[browserId].browser.onDriverPageRequested();
1543 var errorReportingUrl = 1535 var errorReportingUrl =
1544 "http://$localIp:${errorReportingServer.port}/$browserId"; 1536 "http://$localIp:${errorReportingServer.port}/$browserId";
1545 String driverContent = """ 1537 String driverContent = """
1546 <!DOCTYPE html><html> 1538 <!DOCTYPE html><html>
1547 <head> 1539 <head>
1548 <title>Driving page</title> 1540 <title>Driving page</title>
(...skipping 29 matching lines...) Expand all
1578 var test_completed = true; 1570 var test_completed = true;
1579 // Has the test in the current iframe reported that it is started? 1571 // Has the test in the current iframe reported that it is started?
1580 var test_started = false; 1572 var test_started = false;
1581 var testing_window; 1573 var testing_window;
1582 1574
1583 var embedded_iframe_div = document.getElementById('embedded_iframe_div'); 1575 var embedded_iframe_div = document.getElementById('embedded_iframe_div');
1584 var embedded_iframe = document.getElementById('embedded_iframe'); 1576 var embedded_iframe = document.getElementById('embedded_iframe');
1585 var number_div = document.getElementById('number'); 1577 var number_div = document.getElementById('number');
1586 var executing_div = document.getElementById('currently_executing'); 1578 var executing_div = document.getElementById('currently_executing');
1587 var error_div = document.getElementById('unhandled_error'); 1579 var error_div = document.getElementById('unhandled_error');
1588 var use_iframe = ${useIframe}; 1580 var use_iframe = ${configuration.runtime.requiresIFrame};
1589 var start = new Date(); 1581 var start = new Date();
1590 1582
1591 // Object that holds the state of an HTML test 1583 // Object that holds the state of an HTML test
1592 var html_test; 1584 var html_test;
1593 1585
1594 function newTaskHandler() { 1586 function newTaskHandler() {
1595 if (this.readyState == this.DONE) { 1587 if (this.readyState == this.DONE) {
1596 if (this.status == 200) { 1588 if (this.status == 200) {
1597 if (this.responseText == '$waitSignal') { 1589 if (this.responseText == '$waitSignal') {
1598 setTimeout(getNextTask, 500); 1590 setTimeout(getNextTask, 500);
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
1948 'exit code: ${result.exitCode}\n' 1940 'exit code: ${result.exitCode}\n'
1949 'stdout: ${result.stdout}\n' 1941 'stdout: ${result.stdout}\n'
1950 'stderr: ${result.stderr}'); 1942 'stderr: ${result.stderr}');
1951 } else { 1943 } else {
1952 print('[$message] Successfully uploaded screenshot to $storageUrl'); 1944 print('[$message] Successfully uploaded screenshot to $storageUrl');
1953 } 1945 }
1954 new File(screenshotFile).deleteSync(); 1946 new File(screenshotFile).deleteSync();
1955 } 1947 }
1956 print('--------------------------------------------------------------------'); 1948 print('--------------------------------------------------------------------');
1957 } 1949 }
OLDNEW
« no previous file with comments | « tests/standalone/status_expression_test.dart ('k') | tools/testing/dart/co19_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698