@Test public void testBenchmarkWithErrors() { List<SearchRequest> reqList = new ArrayList<>(); int numQueries = scaledRandomIntBetween(20, 100); int numErrors = scaledRandomIntBetween(1, numQueries); final boolean containsFatal = randomBoolean(); if (containsFatal) { ScriptScoreFunctionBuilder scriptFunction = scriptFunction("DOES NOT COMPILE - fails on any shard"); SearchRequest searchRequest = searchRequest() .source( searchSource() .query(functionScoreQuery(FilterBuilders.matchAllFilter(), scriptFunction))); reqList.add(searchRequest); } for (int i = 0; reqList.size() < numErrors; i++) { ScriptScoreFunctionBuilder scriptFunction = scriptFunction("throw new RuntimeException();"); SearchRequest searchRequest = searchRequest() .source( searchSource() .query(functionScoreQuery(FilterBuilders.matchAllFilter(), scriptFunction))); reqList.add(searchRequest); } logger.info("--> run with [{}] errors ", numErrors); for (int i = 0; reqList.size() < numQueries; i++) { reqList.add(BenchmarkTestUtil.randomSearch(client(), indices)); } Collections.shuffle(reqList, getRandom()); final BenchmarkRequest request = BenchmarkTestUtil.randomRequest( client(), indices, numExecutorNodes, competitionSettingsMap, reqList.toArray(new SearchRequest[0])); logger.info( "--> Submitting benchmark - competitors [{}] iterations [{}]", request.competitors().size(), request.settings().iterations()); final BenchmarkResponse response = client().bench(request).actionGet(); assertThat(response, notNullValue()); if (response.hasErrors() || containsFatal) { assertThat(response.state(), equalTo(BenchmarkResponse.State.FAILED)); } else { assertThat(response.state(), equalTo(BenchmarkResponse.State.COMPLETE)); for (CompetitionResult result : response.competitionResults().values()) { assertThat(result.nodeResults().size(), equalTo(numExecutorNodes)); validateCompetitionResult( result, competitionSettingsMap.get(result.competitionName()), true); } } assertThat(response.benchmarkName(), equalTo(BENCHMARK_NAME)); }