|
16 | 16 | import org.elasticsearch.client.RequestOptions; |
17 | 17 | import org.elasticsearch.client.Response; |
18 | 18 | import org.elasticsearch.client.ResponseException; |
| 19 | +import org.elasticsearch.client.ResponseListener; |
19 | 20 | import org.elasticsearch.client.WarningsHandler; |
20 | 21 | import org.elasticsearch.common.bytes.BytesArray; |
21 | 22 | import org.elasticsearch.common.io.Streams; |
|
26 | 27 | import org.elasticsearch.core.TimeValue; |
27 | 28 | import org.elasticsearch.logging.LogManager; |
28 | 29 | import org.elasticsearch.logging.Logger; |
| 30 | +import org.elasticsearch.tasks.TaskId; |
29 | 31 | import org.elasticsearch.test.ListMatcher; |
30 | 32 | import org.elasticsearch.test.rest.ESRestTestCase; |
31 | 33 | import org.elasticsearch.xcontent.ToXContent; |
|
44 | 46 | import java.io.InputStreamReader; |
45 | 47 | import java.io.OutputStream; |
46 | 48 | import java.nio.charset.StandardCharsets; |
| 49 | +import java.time.Duration; |
47 | 50 | import java.time.ZoneId; |
48 | 51 | import java.util.ArrayList; |
49 | 52 | import java.util.Arrays; |
|
70 | 73 | import static org.hamcrest.Matchers.emptyOrNullString; |
71 | 74 | import static org.hamcrest.Matchers.equalTo; |
72 | 75 | import static org.hamcrest.Matchers.greaterThanOrEqualTo; |
| 76 | +import static org.hamcrest.Matchers.hasKey; |
73 | 77 | import static org.hamcrest.Matchers.is; |
74 | 78 | import static org.hamcrest.Matchers.not; |
75 | 79 | import static org.hamcrest.Matchers.nullValue; |
@@ -1345,6 +1349,56 @@ public void testAsyncGetWithoutContentType() throws IOException { |
1345 | 1349 |
|
1346 | 1350 | } |
1347 | 1351 |
|
| 1352 | + public void testListApi_noRunningQueries_returnsAnObject() throws Exception { |
| 1353 | + Request request = prepareListQueriesRequest(); |
| 1354 | + Response response = performRequest(request); |
| 1355 | + assertThat(entityToMap(response.getEntity(), XContentType.JSON), is(Map.of("queries", Map.of()))); |
| 1356 | + } |
| 1357 | + |
| 1358 | + public void testListApi_runningQuery_returnsQueriesObject() throws Exception { |
| 1359 | + bulkLoadTestData(1); |
| 1360 | + String query = fromIndex() + " | keep keyword, integer | where delay(10s) | limit 100 "; |
| 1361 | + var builder = requestObjectBuilder().query(query); |
| 1362 | + Request request = prepareRequest(SYNC); |
| 1363 | + String mediaType = attachBody(builder.build(), request); |
| 1364 | + RequestOptions.Builder options = request.getOptions().toBuilder(); |
| 1365 | + options.addHeader("Content-Type", mediaType); |
| 1366 | + options.addHeader("Accept", mediaType); |
| 1367 | + request.setOptions(options); |
| 1368 | + client().performRequestAsync(request, new ResponseListener() { |
| 1369 | + @Override |
| 1370 | + public void onSuccess(Response response) {} |
| 1371 | + |
| 1372 | + @Override |
| 1373 | + public void onFailure(Exception exception) {} |
| 1374 | + }); |
| 1375 | + Thread.sleep(Duration.ofSeconds(5)); |
| 1376 | + Response response = performRequest(prepareListQueriesRequest()); |
| 1377 | + @SuppressWarnings("unchecked") |
| 1378 | + var listResult = (Map<String, Map<String, Object>>) EsqlTestUtils.singleValue( |
| 1379 | + entityToMap(response.getEntity(), XContentType.JSON).values() |
| 1380 | + ); |
| 1381 | + var taskId = new TaskId(EsqlTestUtils.singleValue(listResult.keySet())); |
| 1382 | + var queryFromListResult = EsqlTestUtils.singleValue(listResult.values()); |
| 1383 | + assertThat(queryFromListResult.get("id"), is((int) taskId.getId())); |
| 1384 | + assertThat(queryFromListResult.get("node"), is(taskId.getNodeId())); |
| 1385 | + assertThat(queryFromListResult.get("query"), is(query)); |
| 1386 | + assertThat(queryFromListResult, hasKey("start_time_millis")); |
| 1387 | + assertThat(queryFromListResult, hasKey("running_time_nanos")); |
| 1388 | + |
| 1389 | + response = performRequest(prepareGetQueryRequest(taskId)); |
| 1390 | + @SuppressWarnings("unchecked") |
| 1391 | + Map<String, Object> getQueryResult = entityToMap(response.getEntity(), XContentType.JSON); |
| 1392 | + assertThat(getQueryResult.get("id"), is((int) taskId.getId())); |
| 1393 | + assertThat(getQueryResult.get("node"), is(taskId.getNodeId())); |
| 1394 | + assertThat(getQueryResult.get("query"), is(query)); |
| 1395 | + assertThat(getQueryResult.get("start_time_millis"), is(queryFromListResult.get("start_time_millis"))); |
| 1396 | + assertThat(getQueryResult, hasKey("running_time_nanos")); |
| 1397 | + assertThat(getQueryResult, hasKey("coordinating_node")); |
| 1398 | + assertThat(getQueryResult, hasKey("data_nodes")); |
| 1399 | + Thread.sleep(Duration.ofSeconds(5)); |
| 1400 | + } |
| 1401 | + |
1348 | 1402 | protected static Request prepareRequestWithOptions(RequestObjectBuilder requestObject, Mode mode) throws IOException { |
1349 | 1403 | requestObject.build(); |
1350 | 1404 | Request request = prepareRequest(mode); |
|
0 commit comments