private void runTestsOnRemoteMachine(URL baseURL) { List<TestRunResult> results = new ArrayList<TestRunResult>(); try { URL fullURL = buildURL(baseURL); logger.info("Requesting run on remove machine URL " + baseURL); Document documentFromRemoteMachine = hitter.hitURL(fullURL); logger.info("Received response from remove machine URL " + baseURL); if (isMultipleTestRunResultsResult(documentFromRemoteMachine)) { DistributedTestRunResult multiple = new DistributedTestRunResultBuilder(configuration).build(documentFromRemoteMachine); results.addAll(multiple.getTestRunResults()); } else { TestRunResult single = new TestRunResultBuilder(configuration).build(documentFromRemoteMachine); results.add(single); } } catch (IOException e) { if (configuration.shouldIgnoreUnresponsiveRemoteMachines()) logger.info("Ignoring unresponsive machine " + baseURL.toString()); else { logger.info("Remote machine URL is unresponsive: " + baseURL.toString()); TestRunResult unresponsiveResult = new TestRunResult(baseURL); unresponsiveResult.setUnresponsive(); results.add(unresponsiveResult); } } for (TestRunResult result : results) { result.setURL(baseURL); //noinspection SynchronizeOnNonFinalField synchronized (distributedTestRunResult) { distributedTestRunResult.addTestRunResult(result); } } }