This is an automated email from the ASF dual-hosted git repository.
kfaraz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new af4e63d12e6 Migrate query JDBC, cancel and system tables ITs, cleanup
and refactor helper classes (#18805)
af4e63d12e6 is described below
commit af4e63d12e6765d5b978614b0578029b05d1ced0
Author: Sasha Syrotenko <[email protected]>
AuthorDate: Fri Dec 5 09:01:19 2025 +0200
Migrate query JDBC, cancel and system tables ITs, cleanup and refactor
helper classes (#18805)
* Stage 1: move QueryErrorTest, create a base class for the convenience
* Migrate query retry on missing segments test
* Don't use parametrize test, duplicate usage instead
* Fix checkstyle issue
* Migreate system table query test
* Migrate JDBC test
---
.github/workflows/cron-job-its.yml | 2 +-
.github/workflows/standard-its.yml | 2 +-
.../testing/embedded/query/JdbcQueryTest.java | 129 ++--
.../testing/embedded/query/QueryErrorTest.java | 33 +-
.../query/QueryRetryOnMissingSegmentsTest.java | 36 +-
.../testing/embedded/query/QueryTestBase.java | 93 ++-
.../testing/embedded/query/SqlQueryCancelTest.java | 97 +++
.../query/SqlQueryHttpRequestHeadersTest.java | 26 +-
.../embedded/query/SystemTableQueryTest.java | 62 ++
.../docker/docker-compose.query-error-test.yml | 107 ---
.../docker/docker-compose.query-retry-test.yml | 107 ---
integration-tests/docker/druid.sh | 4 +-
.../historical-for-query-error-test | 3 +-
.../docker/test-data/query-error-sample-data.sql | 20 -
.../docker/test-data/query-retry-sample-data.sql | 20 -
integration-tests/script/docker_compose_args.sh | 14 +-
.../java/org/apache/druid/tests/TestNGGroup.java | 4 -
.../apache/druid/tests/query/ITSqlCancelTest.java | 147 ----
.../druid/tests/query/ITSystemTableQueryTest.java | 67 --
.../druid/tests/query/ITTwitterQueryTest.java | 58 --
.../druid/tests/query/ITWikipediaQueryTest.java | 4 +-
.../src/test/resources/queries/sys_queries.json | 30 -
.../resources/queries/twitterstream_queries.json | 810 ---------------------
.../twitterstream_queries_query_retry_test.json | 26 -
24 files changed, 329 insertions(+), 1572 deletions(-)
diff --git a/.github/workflows/cron-job-its.yml
b/.github/workflows/cron-job-its.yml
index d13ae4c6ad6..1f555778ab9 100644
--- a/.github/workflows/cron-job-its.yml
+++ b/.github/workflows/cron-job-its.yml
@@ -88,7 +88,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- testing_group: [ query, query-retry, query-error, security ]
+ testing_group: [ query, security ]
uses: ./.github/workflows/reusable-standard-its.yml
needs: build
with:
diff --git a/.github/workflows/standard-its.yml
b/.github/workflows/standard-its.yml
index 1af7acd9c8e..3c30c5c9194 100644
--- a/.github/workflows/standard-its.yml
+++ b/.github/workflows/standard-its.yml
@@ -78,7 +78,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- testing_group: [query, query-retry, query-error, security,
centralized-datasource-schema]
+ testing_group: [query, security, centralized-datasource-schema]
uses: ./.github/workflows/reusable-standard-its.yml
if: ${{ needs.changes.outputs.core == 'true' ||
needs.changes.outputs.common-extensions == 'true' }}
with:
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/query/ITJdbcQueryTest.java
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/JdbcQueryTest.java
similarity index 57%
rename from
integration-tests/src/test/java/org/apache/druid/tests/query/ITJdbcQueryTest.java
rename to
embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/JdbcQueryTest.java
index e63fd134196..32020853753 100644
---
a/integration-tests/src/test/java/org/apache/druid/tests/query/ITJdbcQueryTest.java
+++
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/JdbcQueryTest.java
@@ -17,22 +17,15 @@
* under the License.
*/
-package org.apache.druid.tests.query;
+package org.apache.druid.testing.embedded.query;
import com.google.common.collect.ImmutableList;
-import com.google.inject.Inject;
import org.apache.calcite.avatica.AvaticaSqlException;
-import org.apache.druid.https.SSLClientConfig;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.logger.Logger;
-import org.apache.druid.testing.guice.DruidTestModuleFactory;
-import org.apache.druid.testing.tools.IntegrationTestingConfig;
-import org.apache.druid.testing.utils.DataLoaderHelper;
-import org.apache.druid.tests.TestNGGroup;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Guice;
-import org.testng.annotations.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
import java.sql.Connection;
import java.sql.DatabaseMetaData;
@@ -47,69 +40,40 @@ import java.util.List;
import java.util.Properties;
import java.util.Set;
-@Test(groups = {TestNGGroup.QUERY, TestNGGroup.CENTRALIZED_DATASOURCE_SCHEMA})
-@Guice(moduleFactory = DruidTestModuleFactory.class)
-public class ITJdbcQueryTest
+/**
+ * JDBC query integration tests.
+ * Note: we need to correspond queries with TLS support to fullfill the
conversion
+ */
+public class JdbcQueryTest extends QueryTestBase
{
- private static final Logger LOG = new Logger(ITJdbcQueryTest.class);
- private static final String WIKIPEDIA_DATA_SOURCE = "wikipedia_editstream";
+ private static final Logger LOG = new Logger(JdbcQueryTest.class);
private static final String CONNECTION_TEMPLATE =
"jdbc:avatica:remote:url=%s/druid/v2/sql/avatica/";
private static final String TLS_CONNECTION_TEMPLATE =
"jdbc:avatica:remote:url=%s/druid/v2/sql/avatica/;truststore=%s;truststore_password=%s;keystore=%s;keystore_password=%s;key_password=%s";
private static final String QUERY_TEMPLATE =
- "SELECT \"user\", SUM(\"added\"), COUNT(*)" +
- "FROM \"wikipedia\" " +
- "WHERE \"__time\" >= CURRENT_TIMESTAMP - INTERVAL '99' YEAR AND
\"language\" = %s" +
- "GROUP BY 1 ORDER BY 3 DESC LIMIT 10";
- private static final String QUERY = StringUtils.format(QUERY_TEMPLATE,
"'en'");
-
- private static final String QUERY_PARAMETERIZED =
StringUtils.format(QUERY_TEMPLATE, "?");
+ "SELECT \"item\", SUM(\"value\"), COUNT(*) "
+ + "FROM \"%s\" "
+ + "WHERE \"__time\" >= CURRENT_TIMESTAMP - INTERVAL '99' YEAR AND
\"value\" < %s \n"
+ + "GROUP BY 1 ORDER BY 3 DESC LIMIT 10";
private String[] connections;
private Properties connectionProperties;
- @Inject
- private IntegrationTestingConfig config;
-
- @Inject
- SSLClientConfig sslConfig;
+ private String dataSourceName;
- @Inject
- private DataLoaderHelper dataLoaderHelper;
-
- @BeforeMethod
- public void before()
+ @Override
+ protected void beforeAll()
{
connectionProperties = new Properties();
connectionProperties.setProperty("user", "admin");
connectionProperties.setProperty("password", "priest");
connections = new String[]{
- StringUtils.format(CONNECTION_TEMPLATE, config.getRouterUrl()),
- StringUtils.format(CONNECTION_TEMPLATE, config.getBrokerUrl()),
- StringUtils.format(
- TLS_CONNECTION_TEMPLATE,
- config.getRouterTLSUrl(),
- sslConfig.getTrustStorePath(),
- sslConfig.getTrustStorePasswordProvider().getPassword(),
- sslConfig.getKeyStorePath(),
- sslConfig.getKeyStorePasswordProvider().getPassword(),
- sslConfig.getKeyManagerPasswordProvider().getPassword()
- ),
- StringUtils.format(
- TLS_CONNECTION_TEMPLATE,
- config.getBrokerTLSUrl(),
- sslConfig.getTrustStorePath(),
- sslConfig.getTrustStorePasswordProvider().getPassword(),
- sslConfig.getKeyStorePath(),
- sslConfig.getKeyStorePasswordProvider().getPassword(),
- sslConfig.getKeyManagerPasswordProvider().getPassword()
- )
- };
- // ensure that wikipedia segments are loaded completely
- dataLoaderHelper.waitUntilDatasourceIsReady(WIKIPEDIA_DATA_SOURCE);
- dataLoaderHelper.waitUntilDatasourceIsReady("wikipedia");
- dataLoaderHelper.waitUntilDatasourceIsReady("twitterstream");
+ StringUtils.format(CONNECTION_TEMPLATE, getServerUrl(router)),
+ StringUtils.format(CONNECTION_TEMPLATE, getServerUrl(broker)),
+ };
+
+ dataSourceName = ingestBasicData();
}
@Test
@@ -126,7 +90,7 @@ public class ITJdbcQueryTest
catalogs.add(catalog);
}
LOG.info("catalogs %s", catalogs);
- Assert.assertEquals(catalogs, ImmutableList.of("druid"));
+ Assertions.assertEquals(catalogs, ImmutableList.of("druid"));
Set<String> schemas = new HashSet<>();
ResultSet schemasMetadata = metadata.getSchemas("druid", null);
@@ -136,7 +100,7 @@ public class ITJdbcQueryTest
}
LOG.info("'druid' catalog schemas %s", schemas);
// maybe more schemas than this, but at least should have these
-
Assert.assertTrue(schemas.containsAll(ImmutableList.of("INFORMATION_SCHEMA",
"druid", "lookup", "sys")));
+
Assertions.assertTrue(schemas.containsAll(ImmutableList.of("INFORMATION_SCHEMA",
"druid", "lookup", "sys")));
Set<String> druidTables = new HashSet<>();
ResultSet tablesMetadata = metadata.getTables("druid", "druid", null,
null);
@@ -145,25 +109,25 @@ public class ITJdbcQueryTest
druidTables.add(table);
}
LOG.info("'druid' schema tables %s", druidTables);
- // maybe more tables than this, but at least should have these
- Assert.assertTrue(
- druidTables.containsAll(ImmutableList.of("twitterstream",
"wikipedia", WIKIPEDIA_DATA_SOURCE))
+ // There may be more tables than this, but at least should have
@tableName
+ Assertions.assertTrue(
+ druidTables.containsAll(ImmutableList.of(dataSourceName))
);
Set<String> wikiColumns = new HashSet<>();
- ResultSet columnsMetadata = metadata.getColumns("druid", "druid",
WIKIPEDIA_DATA_SOURCE, null);
+ ResultSet columnsMetadata = metadata.getColumns("druid", "druid",
dataSourceName, null);
while (columnsMetadata.next()) {
final String column = columnsMetadata.getString(4);
wikiColumns.add(column);
}
- LOG.info("'%s' columns %s", WIKIPEDIA_DATA_SOURCE, wikiColumns);
+ LOG.info("'%s' columns %s", dataSourceName, wikiColumns);
// a lot more columns than this, but at least should have these
- Assert.assertTrue(
- wikiColumns.containsAll(ImmutableList.of("added", "city", "delta",
"language"))
+ Assertions.assertTrue(
+ wikiColumns.containsAll(ImmutableList.of("__time", "item",
"value"))
);
}
catch (SQLException throwables) {
- Assert.fail(throwables.getMessage());
+ Assertions.fail(throwables.getMessage());
}
}
}
@@ -171,21 +135,22 @@ public class ITJdbcQueryTest
@Test
public void testJdbcStatementQuery()
{
+ String query = StringUtils.format(QUERY_TEMPLATE, dataSourceName, "1000");
for (String url : connections) {
try (Connection connection = DriverManager.getConnection(url,
connectionProperties)) {
try (Statement statement = connection.createStatement()) {
- final ResultSet resultSet = statement.executeQuery(QUERY);
+ final ResultSet resultSet = statement.executeQuery(query);
int resultRowCount = 0;
while (resultSet.next()) {
resultRowCount++;
LOG.info("%s,%s,%s", resultSet.getString(1), resultSet.getLong(2),
resultSet.getLong(3));
}
- Assert.assertEquals(resultRowCount, 10);
+ Assertions.assertEquals(7, resultRowCount);
resultSet.close();
}
}
catch (SQLException throwables) {
- Assert.fail(throwables.getMessage());
+ Assertions.fail(throwables.getMessage());
}
}
}
@@ -193,35 +158,41 @@ public class ITJdbcQueryTest
@Test
public void testJdbcPrepareStatementQuery()
{
+ String query = StringUtils.format(QUERY_TEMPLATE, dataSourceName, "?");
for (String url : connections) {
try (Connection connection = DriverManager.getConnection(url,
connectionProperties)) {
- try (PreparedStatement statement =
connection.prepareStatement(QUERY_PARAMETERIZED)) {
- statement.setString(1, "en");
+ try (PreparedStatement statement = connection.prepareStatement(query))
{
+ statement.setLong(1, 1000);
final ResultSet resultSet = statement.executeQuery();
int resultRowCount = 0;
while (resultSet.next()) {
resultRowCount++;
LOG.info("%s,%s,%s", resultSet.getString(1), resultSet.getLong(2),
resultSet.getLong(3));
}
- Assert.assertEquals(resultRowCount, 10);
+ Assertions.assertEquals(7, resultRowCount);
resultSet.close();
}
}
catch (SQLException throwables) {
- Assert.fail(throwables.getMessage());
+ Assertions.fail(throwables.getMessage());
}
}
}
- @Test(expectedExceptions = AvaticaSqlException.class,
expectedExceptionsMessageRegExp = ".* No value bound for parameter \\(position
\\[1]\\)")
- public void testJdbcPrepareStatementQueryMissingParameters() throws
SQLException
+ @Test
+ public void testJdbcPrepareStatementQueryMissingParameters()
{
+ String query = StringUtils.format(QUERY_TEMPLATE, dataSourceName, "?");
for (String url : connections) {
try (Connection connection = DriverManager.getConnection(url,
connectionProperties);
- PreparedStatement statement =
connection.prepareStatement(QUERY_PARAMETERIZED);
+ PreparedStatement statement = connection.prepareStatement(query);
ResultSet resultSet = statement.executeQuery()) {
// This won't actually run as we expect the exception to be thrown
before it gets here
- throw new IllegalStateException(resultSet.toString());
+ Assertions.fail(resultSet.toString());
+ }
+ catch (SQLException e) {
+ Assertions.assertInstanceOf(AvaticaSqlException.class, e);
+ Assertions.assertTrue(e.getMessage().contains("No value bound for
parameter (position [1])"));
}
}
}
diff --git
a/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/QueryErrorTest.java
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/QueryErrorTest.java
index e3896700823..5b7846b0570 100644
---
a/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/QueryErrorTest.java
+++
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/QueryErrorTest.java
@@ -29,7 +29,6 @@ import org.apache.druid.query.http.ClientSqlQuery;
import org.apache.druid.query.http.SqlTaskStatus;
import org.apache.druid.rpc.HttpResponseException;
import org.apache.druid.testing.embedded.EmbeddedClusterApis;
-import org.apache.druid.testing.embedded.EmbeddedDruidCluster;
import org.apache.druid.testing.embedded.msq.EmbeddedMSQApis;
import org.hamcrest.MatcherAssert;
import org.junit.jupiter.api.Assertions;
@@ -56,42 +55,22 @@ import static
org.apache.druid.testing.embedded.query.ServerManagerForQueryError
public class QueryErrorTest extends QueryTestBase
{
// Introduce onAnyRouter(...) and use it; add TLS tests in the follow-up
patches
- protected String tableName;
-
- @Override
- protected EmbeddedDruidCluster createCluster()
- {
- overlord.addProperty("druid.manager.segments.pollDuration", "PT0.1s");
- indexer.setServerMemory(600_000_000)
- .addProperty("druid.worker.capacity", "4")
- .addProperty("druid.processing.numThreads", "2")
- .addProperty("druid.segment.handoff.pollDuration", "PT0.1s");
-
- return EmbeddedDruidCluster.withEmbeddedDerbyAndZookeeper()
- .useLatchableEmitter()
- .addServer(overlord)
- .addServer(coordinator)
- .addServer(broker)
- .addServer(router)
- .addServer(indexer)
- .addServer(historical)
-
.addExtension(ServerManagerForQueryErrorTestModule.class);
- }
+ protected String testDataSourceName;
@Override
protected void beforeAll()
{
- tableName = EmbeddedClusterApis.createTestDatasourceName();
+ testDataSourceName = EmbeddedClusterApis.createTestDatasourceName();
EmbeddedMSQApis msqApi = new EmbeddedMSQApis(cluster, overlord);
SqlTaskStatus ingestionStatus = msqApi.submitTaskSql(StringUtils.format(
"REPLACE INTO %s\n"
+ "OVERWRITE ALL\n"
+ "SELECT CURRENT_TIMESTAMP AS __time, 1 AS d PARTITIONED BY ALL",
- tableName
+ testDataSourceName
));
cluster.callApi().waitForTaskToSucceed(ingestionStatus.getTaskId(),
overlord);
- cluster.callApi().waitForAllSegmentsToBeAvailable(tableName, coordinator,
broker);
+ cluster.callApi().waitForAllSegmentsToBeAvailable(testDataSourceName,
coordinator, broker);
}
@Test
@@ -267,7 +246,7 @@ public class QueryErrorTest extends QueryTestBase
private ListenableFuture<String> sqlQueryFuture(BrokerClient b, String
contextKey)
{
return b.submitSqlQuery(new ClientSqlQuery(
- StringUtils.format("SELECT * FROM %s LIMIT 1", tableName),
+ StringUtils.format("SELECT * FROM %s LIMIT 1", testDataSourceName),
null,
false,
false,
@@ -283,7 +262,7 @@ public class QueryErrorTest extends QueryTestBase
private ListenableFuture<String> nativeQueryFuture(BrokerClient b, String
contextKey)
{
return b.submitNativeQuery(new Druids.ScanQueryBuilder()
- .dataSource(tableName)
+ .dataSource(testDataSourceName)
.eternityInterval()
.limit(1)
.context(buildTestContext(contextKey))
diff --git
a/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/QueryRetryOnMissingSegmentsTest.java
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/QueryRetryOnMissingSegmentsTest.java
index 2e1bdb69465..7b36b52bc4a 100644
---
a/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/QueryRetryOnMissingSegmentsTest.java
+++
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/QueryRetryOnMissingSegmentsTest.java
@@ -20,17 +20,11 @@
package org.apache.druid.testing.embedded.query;
import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.druid.common.utils.IdUtils;
-import org.apache.druid.indexing.common.task.IndexTask;
import org.apache.druid.java.util.common.ISE;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.jackson.JacksonUtils;
import org.apache.druid.query.QueryContexts;
import org.apache.druid.query.http.ClientSqlQuery;
-import org.apache.druid.testing.embedded.EmbeddedClusterApis;
-import org.apache.druid.testing.embedded.EmbeddedDruidCluster;
-import org.apache.druid.testing.embedded.indexing.MoreResources;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -69,41 +63,13 @@ public class QueryRetryOnMissingSegmentsTest extends
QueryTestBase
QUERY_FAILURE
}
- private ObjectMapper jsonMapper;
private String tableName;
- @Override
- protected EmbeddedDruidCluster createCluster()
- {
- overlord.addProperty("druid.manager.segments.pollDuration", "PT0.1s");
- coordinator.addProperty("druid.manager.segments.useIncrementalCache",
"always");
- indexer.setServerMemory(400_000_000)
- .addProperty("druid.worker.capacity", "4")
- .addProperty("druid.processing.numThreads", "2")
- .addProperty("druid.segment.handoff.pollDuration", "PT0.1s");
-
- return EmbeddedDruidCluster.withEmbeddedDerbyAndZookeeper()
- .useLatchableEmitter()
- .addServer(overlord)
- .addServer(coordinator)
- .addServer(broker)
- .addServer(router)
- .addServer(indexer)
- .addServer(historical)
-
.addExtension(ServerManagerForQueryErrorTestModule.class);
- }
-
@Override
public void beforeAll()
{
jsonMapper = overlord.bindings().jsonMapper();
- tableName = EmbeddedClusterApis.createTestDatasourceName();
-
- final String taskId = IdUtils.getRandomId();
- final IndexTask task =
MoreResources.Task.BASIC_INDEX.get().dataSource(tableName).withId(taskId);
- cluster.callApi().onLeaderOverlord(o -> o.runTask(taskId, task));
- cluster.callApi().waitForTaskToSucceed(taskId, overlord);
- cluster.callApi().waitForAllSegmentsToBeAvailable(tableName, coordinator,
broker);
+ tableName = ingestBasicData();
}
@Test
diff --git
a/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/QueryTestBase.java
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/QueryTestBase.java
index b8e810b7ca6..e025c90d2f1 100644
---
a/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/QueryTestBase.java
+++
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/QueryTestBase.java
@@ -19,23 +19,33 @@
package org.apache.druid.testing.embedded.query;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.util.concurrent.ListenableFuture;
+import org.apache.druid.common.utils.IdUtils;
+import org.apache.druid.guice.SleepModule;
+import org.apache.druid.indexing.common.task.IndexTask;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.http.client.HttpClient;
import org.apache.druid.java.util.http.client.Request;
import org.apache.druid.java.util.http.client.response.StatusResponseHandler;
import org.apache.druid.java.util.http.client.response.StatusResponseHolder;
+import org.apache.druid.query.http.ClientSqlQuery;
import org.apache.druid.testing.embedded.EmbeddedBroker;
+import org.apache.druid.testing.embedded.EmbeddedClusterApis;
import org.apache.druid.testing.embedded.EmbeddedCoordinator;
import org.apache.druid.testing.embedded.EmbeddedDruidCluster;
import org.apache.druid.testing.embedded.EmbeddedHistorical;
import org.apache.druid.testing.embedded.EmbeddedIndexer;
import org.apache.druid.testing.embedded.EmbeddedOverlord;
import org.apache.druid.testing.embedded.EmbeddedRouter;
+import org.apache.druid.testing.embedded.indexing.MoreResources;
import org.apache.druid.testing.embedded.junit5.EmbeddedClusterTestBase;
import org.jboss.netty.handler.codec.http.HttpMethod;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
+import javax.ws.rs.core.MediaType;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
@@ -46,7 +56,7 @@ import java.util.function.Consumer;
public abstract class QueryTestBase extends EmbeddedClusterTestBase
{
- protected static final String SQL_QUERY_ROUTE = "%s/druid/v2/sql/";
+ protected static final String SQL_QUERY_ROUTE = "%s/druid/v2/sql";
public static List<Boolean> SHOULD_USE_BROKER_TO_QUERY = List.of(true,
false);
protected final EmbeddedBroker broker = new EmbeddedBroker();
@@ -57,6 +67,7 @@ public abstract class QueryTestBase extends
EmbeddedClusterTestBase
protected final EmbeddedHistorical historical = new EmbeddedHistorical();
protected HttpClient httpClientRef;
+ protected ObjectMapper jsonMapper;
protected String brokerEndpoint;
protected String routerEndpoint;
@@ -85,7 +96,9 @@ public abstract class QueryTestBase extends
EmbeddedClusterTestBase
.addServer(broker)
.addServer(router)
.addServer(indexer)
- .addServer(historical);
+ .addServer(historical)
+
.addExtension(ServerManagerForQueryErrorTestModule.class)
+ .addExtension(SleepModule.class);
}
@BeforeAll
@@ -102,10 +115,55 @@ public abstract class QueryTestBase extends
EmbeddedClusterTestBase
}
}
+ /**
+ * Ingests test data using the task template {@link
MoreResources.Task#BASIC_INDEX} in a synchronous manner.
+ *
+ * @return ingested datasource name
+ */
+ protected String ingestBasicData()
+ {
+ String datasourceName = EmbeddedClusterApis.createTestDatasourceName();
+
+ final String taskId = IdUtils.getRandomId();
+ final IndexTask task =
MoreResources.Task.BASIC_INDEX.get().dataSource(datasourceName).withId(taskId);
+ cluster.callApi().onLeaderOverlord(o -> o.runTask(taskId, task));
+ cluster.callApi().waitForTaskToSucceed(taskId, overlord);
+ cluster.callApi().waitForAllSegmentsToBeAvailable(datasourceName,
coordinator, broker);
+ return datasourceName;
+ }
+
+ /**
+ * Execute an async SQL query against the given endpoint via the HTTP client.
+ */
+ protected ListenableFuture<StatusResponseHolder> executeQueryAsync(String
endpoint, ClientSqlQuery query)
+ {
+ URL url;
+ try {
+ url = new URL(endpoint);
+ }
+ catch (MalformedURLException e) {
+ throw new AssertionError("Malformed URL");
+ }
+
+ Assertions.assertNotNull(jsonMapper);
+ String serializedQuery;
+ try {
+ serializedQuery = jsonMapper.writeValueAsString(query);
+ }
+ catch (JsonProcessingException e) {
+ throw new AssertionError(e);
+ }
+
+ Request request = new Request(HttpMethod.POST, url);
+ request.addHeader("Content-Type", MediaType.APPLICATION_JSON);
+ request.setContent(serializedQuery.getBytes(StandardCharsets.UTF_8));
+ return httpClientRef.go(request, StatusResponseHandler.getInstance());
+ }
+
/**
* Execute a SQL query against the given endpoint via the HTTP client.
*/
- protected void executeQuery(
+ protected void executeQueryWithContentType(
String endpoint,
String contentType,
String query,
@@ -150,4 +208,33 @@ public abstract class QueryTestBase extends
EmbeddedClusterTestBase
response.getContent().trim()
);
}
+
+ /**
+ * Execute a SQL query against the given endpoint via the HTTP client.
+ *
+ * @return response holder of a cancelled query
+ */
+ protected StatusResponseHolder cancelQuery(String endpoint, String queryId)
+ {
+ URL url;
+ try {
+ url = new URL(StringUtils.format("%s/%s", endpoint, queryId));
+ }
+ catch (MalformedURLException e) {
+ throw new AssertionError("Malformed URL");
+ }
+
+ Request request = new Request(HttpMethod.DELETE, url);
+ StatusResponseHolder response;
+ try {
+ response = httpClientRef.go(request, StatusResponseHandler.getInstance())
+ .get();
+ }
+ catch (InterruptedException | ExecutionException e) {
+ throw new AssertionError("Failed to execute a request", e);
+ }
+
+ Assertions.assertNotNull(response);
+ return response;
+ }
}
diff --git
a/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/SqlQueryCancelTest.java
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/SqlQueryCancelTest.java
new file mode 100644
index 00000000000..e78451d4e85
--- /dev/null
+++
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/SqlQueryCancelTest.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.testing.embedded.query;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.util.concurrent.ListenableFuture;
+import org.apache.druid.java.util.common.StringUtils;
+import org.apache.druid.java.util.http.client.response.StatusResponseHolder;
+import org.apache.druid.query.BaseQuery;
+import org.apache.druid.query.http.ClientSqlQuery;
+import org.jboss.netty.handler.codec.http.HttpResponseStatus;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+public class SqlQueryCancelTest extends QueryTestBase
+{
+ private static final String QUERY = " SELECT sleep(2) FROM %s LIMIT 2";
+ private String dataSourceName;
+
+ @Override
+ public void beforeAll()
+ {
+ jsonMapper = overlord.bindings().jsonMapper();
+ dataSourceName = ingestBasicData();
+ }
+
+ @Test
+ public void testCancelValidQuery() throws Exception
+ {
+ final String sqlQuery = StringUtils.format(QUERY, dataSourceName);
+ final String queryId = "sql-cancel-test";
+ final ClientSqlQuery query = new ClientSqlQuery(
+ sqlQuery,
+ null,
+ false,
+ false,
+ false,
+ ImmutableMap.of(BaseQuery.SQL_QUERY_ID, queryId),
+ List.of()
+ );
+
+ ListenableFuture<StatusResponseHolder> f =
executeQueryAsync(routerEndpoint, query);
+
+ // Wait until the sqlLifecycle is authorized and registered
+ Thread.sleep(300L);
+ StatusResponseHolder queryCancellationResponse =
cancelQuery(routerEndpoint, queryId);
+
+ StatusResponseHolder queryResponce = f.get();
+
+ Assertions.assertEquals(HttpResponseStatus.ACCEPTED.getCode(),
queryCancellationResponse.getStatus().getCode());
+
Assertions.assertEquals(HttpResponseStatus.INTERNAL_SERVER_ERROR.getCode(),
queryResponce.getStatus().getCode());
+ }
+
+ @Test
+ public void test_cancelInvalidQuery_returnsNotFound() throws Exception
+ {
+ final String sqlQuery = StringUtils.format(QUERY, dataSourceName);
+ final String validQueryId = "sql-cancel-test-";
+ final String invalidQueryId = "sql-continue-test";
+ final ClientSqlQuery query = new ClientSqlQuery(
+ sqlQuery,
+ null,
+ false,
+ false,
+ false,
+ ImmutableMap.of(BaseQuery.SQL_QUERY_ID, validQueryId),
+ List.of()
+ );
+
+ ListenableFuture<StatusResponseHolder> f =
executeQueryAsync(routerEndpoint, query);
+ StatusResponseHolder queryCancellationResponse =
cancelQuery(routerEndpoint, invalidQueryId);
+
+ StatusResponseHolder queryResponse = f.get();
+
+ Assertions.assertEquals(HttpResponseStatus.NOT_FOUND.getCode(),
queryCancellationResponse.getStatus().getCode());
+ Assertions.assertEquals(HttpResponseStatus.OK.getCode(),
queryResponse.getStatus().getCode());
+ }
+}
diff --git
a/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/SqlQueryHttpRequestHeadersTest.java
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/SqlQueryHttpRequestHeadersTest.java
index 3ce50da68da..0dff59c2265 100644
---
a/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/SqlQueryHttpRequestHeadersTest.java
+++
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/SqlQueryHttpRequestHeadersTest.java
@@ -38,7 +38,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
@FieldSource("SHOULD_USE_BROKER_TO_QUERY")
public void testNullContentType(boolean shouldQueryBroker)
{
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
null,
"select 1",
@@ -52,7 +52,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
@FieldSource("SHOULD_USE_BROKER_TO_QUERY")
public void testUnsupportedContentType(boolean shouldQueryBroker)
{
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
"application/xml",
"select 1",
@@ -69,7 +69,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
@FieldSource("SHOULD_USE_BROKER_TO_QUERY")
public void testTextPlain(boolean shouldQueryBroker)
{
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
MediaType.TEXT_PLAIN,
"select \n1",
@@ -86,7 +86,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
@FieldSource("SHOULD_USE_BROKER_TO_QUERY")
public void testFormURLEncoded(boolean shouldQueryBroker)
{
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
MediaType.APPLICATION_FORM_URLENCODED,
URLEncoder.encode("select 'x % y'", StandardCharsets.UTF_8),
@@ -103,7 +103,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
@FieldSource("SHOULD_USE_BROKER_TO_QUERY")
public void testFormURLEncoded_InvalidEncoding(boolean shouldQueryBroker)
{
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
MediaType.APPLICATION_FORM_URLENCODED,
"select 'x % y'",
@@ -120,7 +120,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
@FieldSource("SHOULD_USE_BROKER_TO_QUERY")
public void testJSON(boolean shouldQueryBroker)
{
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
MediaType.APPLICATION_JSON,
"{\"query\":\"select 567\"}",
@@ -132,7 +132,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
}
);
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
"application/json; charset=UTF-8",
"{\"query\":\"select 567\"}",
@@ -149,7 +149,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
@FieldSource("SHOULD_USE_BROKER_TO_QUERY")
public void testInvalidJSONFormat(boolean shouldQueryBroker)
{
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
MediaType.APPLICATION_JSON,
"{\"query\":select 567}",
@@ -166,7 +166,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
@FieldSource("SHOULD_USE_BROKER_TO_QUERY")
public void testEmptyQuery_TextPlain(boolean shouldQueryBroker)
{
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
MediaType.TEXT_PLAIN,
null,
@@ -183,7 +183,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
@FieldSource("SHOULD_USE_BROKER_TO_QUERY")
public void testEmptyQuery_UrlEncoded(boolean shouldQueryBroker)
{
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
MediaType.APPLICATION_FORM_URLENCODED,
null,
@@ -200,7 +200,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
@FieldSource("SHOULD_USE_BROKER_TO_QUERY")
public void testBlankQuery_TextPlain(boolean shouldQueryBroker)
{
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
MediaType.TEXT_PLAIN,
" ",
@@ -217,7 +217,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
@FieldSource("SHOULD_USE_BROKER_TO_QUERY")
public void testEmptyQuery_JSON(boolean shouldQueryBroker)
{
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
MediaType.APPLICATION_JSON,
null,
@@ -234,7 +234,7 @@ public class SqlQueryHttpRequestHeadersTest extends
QueryTestBase
@FieldSource("SHOULD_USE_BROKER_TO_QUERY")
public void testMultipleContentType_usesFirstOne(boolean shouldQueryBroker)
{
- executeQuery(
+ executeQueryWithContentType(
shouldQueryBroker ? brokerEndpoint : routerEndpoint,
MediaType.TEXT_PLAIN,
"SELECT 1",
diff --git
a/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/SystemTableQueryTest.java
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/SystemTableQueryTest.java
new file mode 100644
index 00000000000..faa16a43f89
--- /dev/null
+++
b/embedded-tests/src/test/java/org/apache/druid/testing/embedded/query/SystemTableQueryTest.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.testing.embedded.query;
+
+
+import org.apache.druid.java.util.common.StringUtils;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Integration test for system table queries.
+ * In this test we're using deterministic table names to avoid flaky behavior
of the test.
+ */
+public class SystemTableQueryTest extends QueryTestBase
+{
+ private String testDataSourceName;
+
+ @Override
+ public void beforeAll()
+ {
+ testDataSourceName = ingestBasicData();
+ }
+
+ @Test
+ public void testSystemTableQueries_segmentsCount()
+ {
+ String query = StringUtils.format(
+ "SELECT datasource, count(*) \n"
+ + "FROM sys.segments \n"
+ + "WHERE datasource='%s' \n"
+ + "GROUP BY 1",
+ testDataSourceName
+ );
+
+ String result = cluster.callApi().runSql(query);
+ Assertions.assertEquals(StringUtils.format("%s,10", testDataSourceName),
result);
+ }
+
+ @Test
+ public void testSystemTableQueries_serverTypes()
+ {
+ String query = "SELECT server_type FROM sys.servers WHERE tier IS NOT NULL
AND server_type <> 'indexer'";
+ Assertions.assertEquals("historical", cluster.callApi().runSql(query));
+ }
+}
diff --git a/integration-tests/docker/docker-compose.query-error-test.yml
b/integration-tests/docker/docker-compose.query-error-test.yml
deleted file mode 100644
index c7fed645ce5..00000000000
--- a/integration-tests/docker/docker-compose.query-error-test.yml
+++ /dev/null
@@ -1,107 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-version: "2.2"
-services:
- druid-zookeeper-kafka:
- extends:
- file: docker-compose.base.yml
- service: druid-zookeeper-kafka
-
- druid-metadata-storage:
- extends:
- file: docker-compose.base.yml
- service: druid-metadata-storage
- environment:
- - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
- depends_on:
- - druid-zookeeper-kafka
-
- druid-overlord:
- extends:
- file: docker-compose.base.yml
- service: druid-overlord
- environment:
- - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
- depends_on:
- druid-metadata-storage:
- condition: service_healthy
- druid-zookeeper-kafka:
- condition: service_started
-
- druid-coordinator:
- extends:
- file: docker-compose.base.yml
- service: druid-coordinator
- environment:
- - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
- depends_on:
- druid-overlord:
- condition: service_started
- druid-metadata-storage:
- condition: service_healthy
- druid-zookeeper-kafka:
- condition: service_started
-
- druid-broker:
- extends:
- file: docker-compose.base.yml
- service: druid-broker
- environment:
- - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
- depends_on:
- - druid-zookeeper-kafka
- - druid-historical-for-query-error-test
-
- druid-router:
- extends:
- file: docker-compose.base.yml
- service: druid-router
- environment:
- - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
- depends_on:
- - druid-zookeeper-kafka
- - druid-coordinator
- - druid-broker
-
- druid-historical-for-query-error-test:
- image: druid/cluster
- container_name: druid-historical-for-query-error-test
- networks:
- druid-it-net:
- ipv4_address: 172.172.172.14
- ports:
- - 8086:8083 #8084 is used by mono service on GHA runners
- - 8284:8283
- - 5010:5007
- privileged: true
- volumes:
- - ${HOME}/shared:/shared
- - ./service-supervisords/druid.conf:/usr/lib/druid/conf/druid.conf
- env_file:
- - ./environment-configs/common
- - ./environment-configs/historical-for-query-error-test
- - ${OVERRIDE_ENV}
- environment:
- - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
- depends_on:
- - druid-zookeeper-kafka
-
-networks:
- druid-it-net:
- name: druid-it-net
- ipam:
- config:
- - subnet: 172.172.172.0/24
\ No newline at end of file
diff --git a/integration-tests/docker/docker-compose.query-retry-test.yml
b/integration-tests/docker/docker-compose.query-retry-test.yml
deleted file mode 100644
index 0a5c8bfc21b..00000000000
--- a/integration-tests/docker/docker-compose.query-retry-test.yml
+++ /dev/null
@@ -1,107 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-version: "2.2"
-services:
- druid-zookeeper-kafka:
- extends:
- file: docker-compose.base.yml
- service: druid-zookeeper-kafka
-
- druid-metadata-storage:
- extends:
- file: docker-compose.base.yml
- service: druid-metadata-storage
- environment:
- - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
- depends_on:
- - druid-zookeeper-kafka
-
- druid-overlord:
- extends:
- file: docker-compose.base.yml
- service: druid-overlord
- environment:
- - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
- depends_on:
- druid-metadata-storage:
- condition: service_healthy
- druid-zookeeper-kafka:
- condition: service_started
-
- druid-coordinator:
- extends:
- file: docker-compose.base.yml
- service: druid-coordinator
- environment:
- - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
- depends_on:
- druid-overlord:
- condition: service_started
- druid-metadata-storage:
- condition: service_healthy
- druid-zookeeper-kafka:
- condition: service_started
-
- druid-broker:
- extends:
- file: docker-compose.base.yml
- service: druid-broker
- environment:
- - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
- depends_on:
- - druid-zookeeper-kafka
- - druid-historical-for-query-retry-test
-
- druid-router:
- extends:
- file: docker-compose.base.yml
- service: druid-router
- environment:
- - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
- depends_on:
- - druid-zookeeper-kafka
- - druid-coordinator
- - druid-broker
-
- druid-historical-for-query-retry-test:
- image: druid/cluster
- container_name: druid-historical-for-query-retry-test
- networks:
- druid-it-net:
- ipv4_address: 172.172.172.14
- ports:
- - 8086:8083 #8084 is used by mono service on GHA runners
- - 8284:8283
- - 5010:5007
- privileged: true
- volumes:
- - ${HOME}/shared:/shared
- - ./service-supervisords/druid.conf:/usr/lib/druid/conf/druid.conf
- env_file:
- - ./environment-configs/common
- - ./environment-configs/historical-for-query-error-test
- - ${OVERRIDE_ENV}
- environment:
- - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
- depends_on:
- - druid-zookeeper-kafka
-
-networks:
- druid-it-net:
- name: druid-it-net
- ipam:
- config:
- - subnet: 172.172.172.0/24
\ No newline at end of file
diff --git a/integration-tests/docker/druid.sh
b/integration-tests/docker/druid.sh
index 129e3722ee6..6d666af1a17 100755
--- a/integration-tests/docker/druid.sh
+++ b/integration-tests/docker/druid.sh
@@ -22,8 +22,8 @@ getConfPath()
cluster_conf_base=/tmp/conf/druid/cluster
case "$1" in
_common) echo $cluster_conf_base/_common ;;
- historical) echo $cluster_conf_base/data/historical ;;
historical-for-query-error-test) echo $cluster_conf_base/data/historical ;;
+ historical) echo $cluster_conf_base/data/historical ;;
middleManager) echo $cluster_conf_base/data/middleManager ;;
indexer) echo $cluster_conf_base/data/indexer ;;
coordinator) echo $cluster_conf_base/master/coordinator ;;
@@ -103,7 +103,7 @@ setupData()
# The "query" and "security" test groups require data to be setup before
running the tests.
# In particular, they requires segments to be download from a pre-existing
s3 bucket.
# This is done by using the loadSpec put into metadatastore and s3
credientials set below.
- if [ "$DRUID_INTEGRATION_TEST_GROUP" = "query" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "query-retry" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "query-error" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "security" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "upgrade" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "centralized-datasource-schema" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "cds-task-schema-publish-disabled" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "cds-coordinator-metadata-query-disabled [...]
+ if [ "$DRUID_INTEGRATION_TEST_GROUP" = "query" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "security" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "upgrade" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "centralized-datasource-schema" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "cds-task-schema-publish-disabled" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "cds-coordinator-metadata-query-disabled" ];
then
cat /test-data/${DRUID_INTEGRATION_TEST_GROUP}-sample-data.sql | mysql -u
root druid
fi
diff --git
a/integration-tests/docker/environment-configs/historical-for-query-error-test
b/integration-tests/docker/environment-configs/historical-for-query-error-test
index b2eb3460d4f..da842e5374a 100644
---
a/integration-tests/docker/environment-configs/historical-for-query-error-test
+++
b/integration-tests/docker/environment-configs/historical-for-query-error-test
@@ -1,3 +1,4 @@
+@@ -1,32 +0,0 @@
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -29,4 +30,4 @@ druid_processing_numThreads=2
druid_query_groupBy_maxOnDiskStorage=300000000
druid_segmentCache_locations=[{"path":"/shared/druid/indexCache-query-error-test","maxSize":5000000000}]
druid_auth_basic_common_cacheDirectory=/tmp/authCache/historical-query-error-test
-druid_server_https_crlPath=/tls/revocations.crl
+druid_server_https_crlPath=/tls/revocations.crl
\ No newline at end of file
diff --git a/integration-tests/docker/test-data/query-error-sample-data.sql
b/integration-tests/docker/test-data/query-error-sample-data.sql
deleted file mode 100644
index abe0f115189..00000000000
--- a/integration-tests/docker/test-data/query-error-sample-data.sql
+++ /dev/null
@@ -1,20 +0,0 @@
--- Licensed to the Apache Software Foundation (ASF) under one or more
--- contributor license agreements. See the NOTICE file distributed with
--- this work for additional information regarding copyright ownership.
--- The ASF licenses this file to You under the Apache License, Version 2.0
--- (the "License"); you may not use this file except in compliance with
--- the License. You may obtain a copy of the License at
---
--- http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
-
-INSERT INTO druid_segments
(id,dataSource,created_date,start,end,partitioned,version,used,payload,used_status_last_updated)
VALUES
('twitterstream_2013-01-01T00:00:00.000Z_2013-01-02T00:00:00.000Z_2013-01-02T04:13:41.980Z_v9','twitterstream','2013-05-13T01:08:18.192Z','2013-01-01T00:00:00.000Z','2013-01-02T00:00:00.000Z',0,'2013-01-02T04:13:41.980Z_v9',1,'{\"dataSource\":\"twitterstream\",\"interval\":\"2013-01-01T00:00:00.000Z/2013-01-02T00:00:00.000Z\",\"version\":\"2013-01-02T04:13:41
[...]
-INSERT INTO druid_segments
(id,dataSource,created_date,start,end,partitioned,version,used,payload,used_status_last_updated)
VALUES
('twitterstream_2013-01-02T00:00:00.000Z_2013-01-03T00:00:00.000Z_2013-01-03T03:44:58.791Z_v9','twitterstream','2013-05-13T00:03:28.640Z','2013-01-02T00:00:00.000Z','2013-01-03T00:00:00.000Z',0,'2013-01-03T03:44:58.791Z_v9',1,'{\"dataSource\":\"twitterstream\",\"interval\":\"2013-01-02T00:00:00.000Z/2013-01-03T00:00:00.000Z\",\"version\":\"2013-01-03T03:44:58
[...]
-INSERT INTO druid_segments
(id,dataSource,created_date,start,end,partitioned,version,used,payload,used_status_last_updated)
VALUES
('twitterstream_2013-01-03T00:00:00.000Z_2013-01-04T00:00:00.000Z_2013-01-04T04:09:13.590Z_v9','twitterstream','2013-05-13T00:03:48.807Z','2013-01-03T00:00:00.000Z','2013-01-04T00:00:00.000Z',0,'2013-01-04T04:09:13.590Z_v9',1,'{\"dataSource\":\"twitterstream\",\"interval\":\"2013-01-03T00:00:00.000Z/2013-01-04T00:00:00.000Z\",\"version\":\"2013-01-04T04:09:13
[...]
-INSERT INTO druid_segments
(id,dataSource,created_date,start,end,partitioned,version,used,payload,used_status_last_updated)
VALUES
('wikipedia_editstream_2012-12-29T00:00:00.000Z_2013-01-10T08:00:00.000Z_2013-01-10T08:13:47.830Z_v9','wikipedia_editstream','2013-03-15T20:49:52.348Z','2012-12-29T00:00:00.000Z','2013-01-10T08:00:00.000Z',0,'2013-01-10T08:13:47.830Z_v9',1,'{\"dataSource\":\"wikipedia_editstream\",\"interval\":\"2012-12-29T00:00:00.000Z/2013-01-10T08:00:00.000Z\",\"version\":
[...]
-INSERT INTO druid_segments (id, dataSource, created_date, start, end,
partitioned, version, used, payload,used_status_last_updated) VALUES
('wikipedia_2013-08-01T00:00:00.000Z_2013-08-02T00:00:00.000Z_2013-08-08T21:22:48.989Z',
'wikipedia', '2013-08-08T21:26:23.799Z', '2013-08-01T00:00:00.000Z',
'2013-08-02T00:00:00.000Z', '0', '2013-08-08T21:22:48.989Z', '1',
'{\"dataSource\":\"wikipedia\",\"interval\":\"2013-08-01T00:00:00.000Z/2013-08-02T00:00:00.000Z\",\"version\":\"2013-08-08T21:22:
[...]
diff --git a/integration-tests/docker/test-data/query-retry-sample-data.sql
b/integration-tests/docker/test-data/query-retry-sample-data.sql
deleted file mode 100644
index abe0f115189..00000000000
--- a/integration-tests/docker/test-data/query-retry-sample-data.sql
+++ /dev/null
@@ -1,20 +0,0 @@
--- Licensed to the Apache Software Foundation (ASF) under one or more
--- contributor license agreements. See the NOTICE file distributed with
--- this work for additional information regarding copyright ownership.
--- The ASF licenses this file to You under the Apache License, Version 2.0
--- (the "License"); you may not use this file except in compliance with
--- the License. You may obtain a copy of the License at
---
--- http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
-
-INSERT INTO druid_segments
(id,dataSource,created_date,start,end,partitioned,version,used,payload,used_status_last_updated)
VALUES
('twitterstream_2013-01-01T00:00:00.000Z_2013-01-02T00:00:00.000Z_2013-01-02T04:13:41.980Z_v9','twitterstream','2013-05-13T01:08:18.192Z','2013-01-01T00:00:00.000Z','2013-01-02T00:00:00.000Z',0,'2013-01-02T04:13:41.980Z_v9',1,'{\"dataSource\":\"twitterstream\",\"interval\":\"2013-01-01T00:00:00.000Z/2013-01-02T00:00:00.000Z\",\"version\":\"2013-01-02T04:13:41
[...]
-INSERT INTO druid_segments
(id,dataSource,created_date,start,end,partitioned,version,used,payload,used_status_last_updated)
VALUES
('twitterstream_2013-01-02T00:00:00.000Z_2013-01-03T00:00:00.000Z_2013-01-03T03:44:58.791Z_v9','twitterstream','2013-05-13T00:03:28.640Z','2013-01-02T00:00:00.000Z','2013-01-03T00:00:00.000Z',0,'2013-01-03T03:44:58.791Z_v9',1,'{\"dataSource\":\"twitterstream\",\"interval\":\"2013-01-02T00:00:00.000Z/2013-01-03T00:00:00.000Z\",\"version\":\"2013-01-03T03:44:58
[...]
-INSERT INTO druid_segments
(id,dataSource,created_date,start,end,partitioned,version,used,payload,used_status_last_updated)
VALUES
('twitterstream_2013-01-03T00:00:00.000Z_2013-01-04T00:00:00.000Z_2013-01-04T04:09:13.590Z_v9','twitterstream','2013-05-13T00:03:48.807Z','2013-01-03T00:00:00.000Z','2013-01-04T00:00:00.000Z',0,'2013-01-04T04:09:13.590Z_v9',1,'{\"dataSource\":\"twitterstream\",\"interval\":\"2013-01-03T00:00:00.000Z/2013-01-04T00:00:00.000Z\",\"version\":\"2013-01-04T04:09:13
[...]
-INSERT INTO druid_segments
(id,dataSource,created_date,start,end,partitioned,version,used,payload,used_status_last_updated)
VALUES
('wikipedia_editstream_2012-12-29T00:00:00.000Z_2013-01-10T08:00:00.000Z_2013-01-10T08:13:47.830Z_v9','wikipedia_editstream','2013-03-15T20:49:52.348Z','2012-12-29T00:00:00.000Z','2013-01-10T08:00:00.000Z',0,'2013-01-10T08:13:47.830Z_v9',1,'{\"dataSource\":\"wikipedia_editstream\",\"interval\":\"2012-12-29T00:00:00.000Z/2013-01-10T08:00:00.000Z\",\"version\":
[...]
-INSERT INTO druid_segments (id, dataSource, created_date, start, end,
partitioned, version, used, payload,used_status_last_updated) VALUES
('wikipedia_2013-08-01T00:00:00.000Z_2013-08-02T00:00:00.000Z_2013-08-08T21:22:48.989Z',
'wikipedia', '2013-08-08T21:26:23.799Z', '2013-08-01T00:00:00.000Z',
'2013-08-02T00:00:00.000Z', '0', '2013-08-08T21:22:48.989Z', '1',
'{\"dataSource\":\"wikipedia\",\"interval\":\"2013-08-01T00:00:00.000Z/2013-08-02T00:00:00.000Z\",\"version\":\"2013-08-08T21:22:
[...]
diff --git a/integration-tests/script/docker_compose_args.sh
b/integration-tests/script/docker_compose_args.sh
index fff93605e97..87475239e62 100644
--- a/integration-tests/script/docker_compose_args.sh
+++ b/integration-tests/script/docker_compose_args.sh
@@ -28,8 +28,8 @@ getComposeArgs()
fi
if [ "$DRUID_INTEGRATION_TEST_INDEXER" = "indexer" ]
then
- # Sanity check: cannot combine CliIndexer tests with security, query-retry
tests
- if [ "$DRUID_INTEGRATION_TEST_GROUP" = "security" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "query-retry" ] || [
"$DRUID_INTEGRATION_TEST_GROUP" = "query-error" ]
+ # Sanity check: cannot combine CliIndexer tests with security tests
+ if [ "$DRUID_INTEGRATION_TEST_GROUP" = "security" ]
then
echo "Cannot run test group '$DRUID_INTEGRATION_TEST_GROUP' with
CliIndexer"
exit 1
@@ -41,16 +41,6 @@ getComposeArgs()
then
# default + additional druid router (custom-check-tls, permissive-tls,
no-client-auth-tls)
echo "-f ${DOCKERDIR}/docker-compose.yml -f
${DOCKERDIR}/docker-compose.security.yml"
- elif [ "$DRUID_INTEGRATION_TEST_GROUP" = "query-retry" ]
- then
- # default + additional historical modified for query retry test
- # See CliHistoricalForQueryRetryTest.
- echo "-f ${DOCKERDIR}/docker-compose.query-retry-test.yml"
- elif [ "$DRUID_INTEGRATION_TEST_GROUP" = "query-error" ]
- then
- # default + additional historical modified for query error test
- # See CliHistoricalForQueryRetryTest.
- echo "-f ${DOCKERDIR}/docker-compose.query-error-test.yml"
elif [ "$DRUID_INTEGRATION_TEST_GROUP" = "kinesis-data-format" ]
then
# default + with override config + schema registry container
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/TestNGGroup.java
b/integration-tests/src/test/java/org/apache/druid/tests/TestNGGroup.java
index 21c3fc7a76b..efdd26de20a 100644
--- a/integration-tests/src/test/java/org/apache/druid/tests/TestNGGroup.java
+++ b/integration-tests/src/test/java/org/apache/druid/tests/TestNGGroup.java
@@ -40,10 +40,6 @@ public class TestNGGroup
*/
public static final String QUERY = "query";
- public static final String QUERY_RETRY = "query-retry";
-
- public static final String QUERY_ERROR = "query-error";
-
/**
* This group can only be run individually using -Dgroups=security since it
requires specific test data setup.
*/
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/query/ITSqlCancelTest.java
b/integration-tests/src/test/java/org/apache/druid/tests/query/ITSqlCancelTest.java
deleted file mode 100644
index 8385f643e52..00000000000
---
a/integration-tests/src/test/java/org/apache/druid/tests/query/ITSqlCancelTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.druid.tests.query;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.collect.ImmutableMap;
-import com.google.inject.Inject;
-import org.apache.druid.java.util.common.ISE;
-import org.apache.druid.java.util.common.RE;
-import org.apache.druid.java.util.http.client.response.StatusResponseHolder;
-import org.apache.druid.query.BaseQuery;
-import org.apache.druid.query.QueryException;
-import org.apache.druid.sql.http.SqlQuery;
-import org.apache.druid.testing.clients.SqlResourceTestClient;
-import org.apache.druid.testing.guice.DruidTestModuleFactory;
-import org.apache.druid.testing.tools.IntegrationTestingConfig;
-import org.apache.druid.testing.utils.DataLoaderHelper;
-import org.apache.druid.testing.utils.SqlTestQueryHelper;
-import org.apache.druid.tests.TestNGGroup;
-import org.jboss.netty.handler.codec.http.HttpResponseStatus;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Guice;
-import org.testng.annotations.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-@Test(groups = {TestNGGroup.QUERY, TestNGGroup.CENTRALIZED_DATASOURCE_SCHEMA})
-@Guice(moduleFactory = DruidTestModuleFactory.class)
-public class ITSqlCancelTest
-{
- private static final String WIKIPEDIA_DATA_SOURCE = "wikipedia_editstream";
-
- /**
- * This query will run exactly for 15 seconds.
- */
- private static final String QUERY
- = "SELECT sleep(CASE WHEN added > 0 THEN 1 ELSE 0 END) FROM
wikipedia_editstream WHERE added > 0 LIMIT 15";
-
- private static final int NUM_QUERIES = 3;
-
- @Inject
- private DataLoaderHelper dataLoaderHelper;
- @Inject
- private SqlTestQueryHelper sqlHelper;
- @Inject
- private SqlResourceTestClient sqlClient;
- @Inject
- private IntegrationTestingConfig config;
- @Inject
- private ObjectMapper jsonMapper;
-
- @BeforeMethod
- public void before()
- {
- // ensure that wikipedia segments are loaded completely
- dataLoaderHelper.waitUntilDatasourceIsReady(WIKIPEDIA_DATA_SOURCE);
- }
-
- @Test
- public void testCancelValidQuery() throws Exception
- {
- final String queryId = "sql-cancel-test";
- final List<Future<StatusResponseHolder>> queryResponseFutures = new
ArrayList<>();
- for (int i = 0; i < NUM_QUERIES; i++) {
- queryResponseFutures.add(
- sqlClient.queryAsync(
- sqlHelper.getQueryURL(config.getRouterUrl()),
- new SqlQuery(QUERY, null, false, false, false,
ImmutableMap.of(BaseQuery.SQL_QUERY_ID, queryId), null)
- )
- );
- }
-
- // Wait until the sqlLifecycle is authorized and registered
- Thread.sleep(1000);
- final HttpResponseStatus responseStatus = sqlClient.cancelQuery(
- sqlHelper.getCancelUrl(config.getRouterUrl(), queryId),
- 1000
- );
- if (!responseStatus.equals(HttpResponseStatus.ACCEPTED)) {
- throw new RE("Failed to cancel query [%s]. Response code was [%s]",
queryId, responseStatus);
- }
-
- for (Future<StatusResponseHolder> queryResponseFuture :
queryResponseFutures) {
- final StatusResponseHolder queryResponse = queryResponseFuture.get(1,
TimeUnit.SECONDS);
- if
(!queryResponse.getStatus().equals(HttpResponseStatus.INTERNAL_SERVER_ERROR)) {
- throw new ISE("Query is not canceled after cancel request");
- }
- QueryException queryException =
jsonMapper.readValue(queryResponse.getContent(), QueryException.class);
- if (!"Query cancelled".equals(queryException.getErrorCode())) {
- throw new ISE(
- "Expected error code [%s], actual [%s]",
- "Query cancelled",
- queryException.getErrorCode()
- );
- }
- }
- }
-
- @Test
- public void testCancelInvalidQuery() throws Exception
- {
- final Future<StatusResponseHolder> queryResponseFuture = sqlClient
- .queryAsync(
- sqlHelper.getQueryURL(config.getRouterUrl()),
- new SqlQuery(QUERY, null, false, false, false,
ImmutableMap.of(BaseQuery.SQL_QUERY_ID, "validId"), null)
- );
-
- // Wait until the sqlLifecycle is authorized and registered
- Thread.sleep(1000);
- final HttpResponseStatus responseStatus = sqlClient.cancelQuery(
- sqlHelper.getCancelUrl(config.getRouterUrl(), "invalidId"),
- 1000
- );
- if (!responseStatus.equals(HttpResponseStatus.NOT_FOUND)) {
- throw new RE("Expected http response [%s], actual response [%s]",
HttpResponseStatus.NOT_FOUND, responseStatus);
- }
-
- final StatusResponseHolder queryResponse = queryResponseFuture.get(30,
TimeUnit.SECONDS);
- if (!queryResponse.getStatus().equals(HttpResponseStatus.OK)) {
- throw new ISE(
- "Cancel request failed with status[%s] and content[%s]",
- queryResponse.getStatus(),
- queryResponse.getContent()
- );
- }
- }
-}
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/query/ITSystemTableQueryTest.java
b/integration-tests/src/test/java/org/apache/druid/tests/query/ITSystemTableQueryTest.java
deleted file mode 100644
index 5cf022eef37..00000000000
---
a/integration-tests/src/test/java/org/apache/druid/tests/query/ITSystemTableQueryTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.druid.tests.query;
-
-import com.google.inject.Inject;
-import org.apache.druid.testing.guice.DruidTestModuleFactory;
-import org.apache.druid.testing.tools.IntegrationTestingConfig;
-import org.apache.druid.testing.utils.DataLoaderHelper;
-import org.apache.druid.testing.utils.SqlTestQueryHelper;
-import org.apache.druid.tests.TestNGGroup;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Guice;
-import org.testng.annotations.Test;
-
-@Test(groups = {TestNGGroup.QUERY, TestNGGroup.CENTRALIZED_DATASOURCE_SCHEMA})
-@Guice(moduleFactory = DruidTestModuleFactory.class)
-public class ITSystemTableQueryTest
-{
- private static final String WIKIPEDIA_DATA_SOURCE = "wikipedia_editstream";
- private static final String TWITTER_DATA_SOURCE = "twitterstream";
- private static final String SYSTEM_QUERIES_RESOURCE =
"/queries/sys_queries.json";
-
- @Inject
- DataLoaderHelper dataLoaderHelper;
- @Inject
- private SqlTestQueryHelper queryHelper;
- @Inject
- IntegrationTestingConfig config;
-
- @BeforeMethod
- public void before()
- {
- // ensure that wikipedia segments are loaded completely
- dataLoaderHelper.waitUntilDatasourceIsReady(WIKIPEDIA_DATA_SOURCE);
-
- // ensure that the twitter segments are loaded completely
- dataLoaderHelper.waitUntilDatasourceIsReady(TWITTER_DATA_SOURCE);
- }
-
- @Test
- public void testSystemTableQueries()
- {
- try {
- this.queryHelper.testQueriesFromFile(SYSTEM_QUERIES_RESOURCE);
- }
- catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-}
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/query/ITTwitterQueryTest.java
b/integration-tests/src/test/java/org/apache/druid/tests/query/ITTwitterQueryTest.java
deleted file mode 100644
index ebbaf1795e6..00000000000
---
a/integration-tests/src/test/java/org/apache/druid/tests/query/ITTwitterQueryTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.druid.tests.query;
-
-import com.google.inject.Inject;
-import org.apache.druid.testing.clients.CoordinatorResourceTestClient;
-import org.apache.druid.testing.guice.DruidTestModuleFactory;
-import org.apache.druid.testing.tools.ITRetryUtil;
-import org.apache.druid.testing.utils.TestQueryHelper;
-import org.apache.druid.tests.TestNGGroup;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Guice;
-import org.testng.annotations.Test;
-
-@Test(groups = {TestNGGroup.QUERY, TestNGGroup.CENTRALIZED_DATASOURCE_SCHEMA})
-@Guice(moduleFactory = DruidTestModuleFactory.class)
-public class ITTwitterQueryTest
-{
- private static final String TWITTER_DATA_SOURCE = "twitterstream";
- private static final String TWITTER_QUERIES_RESOURCE =
"/queries/twitterstream_queries.json";
- @Inject
- CoordinatorResourceTestClient coordinatorClient;
- @Inject
- private TestQueryHelper queryHelper;
-
- @BeforeMethod
- public void before()
- {
- // ensure that the twitter segments are loaded completely
- ITRetryUtil.retryUntilTrue(
- () -> coordinatorClient.areSegmentsLoaded(TWITTER_DATA_SOURCE),
"twitter segment load"
- );
- }
-
- @Test
- public void testTwitterQueriesFromFile() throws Exception
- {
- queryHelper.testQueriesFromFile(TWITTER_QUERIES_RESOURCE);
- }
-
-}
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/query/ITWikipediaQueryTest.java
b/integration-tests/src/test/java/org/apache/druid/tests/query/ITWikipediaQueryTest.java
index 18d29922cd5..4bb4653877d 100644
---
a/integration-tests/src/test/java/org/apache/druid/tests/query/ITWikipediaQueryTest.java
+++
b/integration-tests/src/test/java/org/apache/druid/tests/query/ITWikipediaQueryTest.java
@@ -84,9 +84,9 @@ public class ITWikipediaQueryTest
/**
* A combination of request Content-Type and Accept HTTP header
- * The first is Content-Type which can not be null while the 2nd is Accept
which could be null
+ * The first is Content-Type that cannot be null while the 2nd is Accept
that could be null
* <p>
- * When Accept is null, its value defaults to value of Content-Type
+ * When Accept is null, its value defaults to the value of Content-Type
*/
@DataProvider
public static Object[][] encodingCombination()
diff --git a/integration-tests/src/test/resources/queries/sys_queries.json
b/integration-tests/src/test/resources/queries/sys_queries.json
deleted file mode 100644
index 284c60272a6..00000000000
--- a/integration-tests/src/test/resources/queries/sys_queries.json
+++ /dev/null
@@ -1,30 +0,0 @@
-[
- {
- "query": {
- "query": "SELECT datasource, count(*) FROM sys.segments WHERE
datasource='wikipedia_editstream' OR datasource='twitterstream' GROUP BY 1 "
- },
- "expectedResults": [
- {
- "datasource": "wikipedia_editstream",
- "EXPR$1": 1
- },
- {
- "datasource": "twitterstream",
- "EXPR$1": 3
- }
- ]
- },
- {
- "query": {
- "query": "SELECT server_type FROM sys.servers WHERE tier IS NOT NULL AND
server_type <> 'indexer'"
- },
- "expectedResults": [
- {
- "server_type":"historical"
- },
- {
- "server_type":"broker"
- }
- ]
- }
-]
\ No newline at end of file
diff --git
a/integration-tests/src/test/resources/queries/twitterstream_queries.json
b/integration-tests/src/test/resources/queries/twitterstream_queries.json
deleted file mode 100644
index c83d616d789..00000000000
--- a/integration-tests/src/test/resources/queries/twitterstream_queries.json
+++ /dev/null
@@ -1,810 +0,0 @@
-[
- {
- "description": "timeseries, 2 aggs",
- "query": {
- "queryType": "timeseries",
- "dataSource": "twitterstream",
- "intervals": ["2013-01-01T00:00:00.000/2013-01-04T00:00:00.000"],
- "granularity": "day",
- "aggregations": [
- {
- "type": "doubleSum",
- "name": "num_tweets",
- "fieldName": "count"
- },
- {
- "type": "doubleSum",
- "name": "tweet_length",
- "fieldName": "tweet_length"
- }
- ],
- "context": {
- "useCache": "true",
- "populateCache": "true",
- "timeout": 60000
- }
- },
- "expectedResults": [
- {
- "timestamp": "2013-01-01T00:00:00.000Z",
- "result": {
- "tweet_length": 2.40241323E8,
- "num_tweets": 3754028.0
- }
- },
- {
- "timestamp": "2013-01-02T00:00:00.000Z",
- "result": {
- "tweet_length": 2.46397801E8,
- "num_tweets": 3799466.0
- }
- },
- {
- "timestamp": "2013-01-03T00:00:00.000Z",
- "result": {
- "tweet_length": 2.31365019E8,
- "num_tweets": 3552419.0
- }
- }
- ]
- },
- {
- "description": "topN, 2 aggs, lexicographic",
- "query": {
- "queryType": "topN",
- "dataSource": "twitterstream",
- "intervals": ["2013-01-01T00:00:00.000/2013-01-04T00:00:00.000"],
- "granularity": "day",
- "aggregations": [
- {
- "type": "doubleSum",
- "name": "num_tweets",
- "fieldName": "count"
- },
- {
- "type": "doubleSum",
- "name": "tweet_length",
- "fieldName": "tweet_length"
- }
- ],
- "postAggregations": [
- {
- "type": "arithmetic",
- "name": "avg_tweet_len",
- "fn": "/",
- "fields": [
- {
- "type": "fieldAccess",
- "name": "tweet_length",
- "fieldName": "tweet_length"
- },
- {
- "type": "fieldAccess",
- "name": "num_tweets",
- "fieldName": "num_tweets"
- }
- ]
- }
- ],
- "dimension": "user_name",
- "metric": {
- "type": "lexicographic"
- },
- "threshold": 2,
- "context": {
- "useCache": "true",
- "populateCache": "true",
- "timeout": 60000,
- "useTopNMultiPassPooledQueryGranularity": "true"
- }
- },
- "expectedResults": [
- {
- "timestamp": "2013-01-01T00:00:00.000Z",
- "result": [
- {
- "user_name": "000000000000087",
- "tweet_length": 14.0,
- "num_tweets": 1.0,
- "avg_tweet_len": 14.0
- },
- {
- "user_name": "0000000000mghi",
- "tweet_length": 291.0,
- "num_tweets": 4.0,
- "avg_tweet_len": 72.75
- }
- ]
- },
- {
- "timestamp": "2013-01-02T00:00:00.000Z",
- "result": [
- {
- "user_name": "000000000037",
- "tweet_length": 13.0,
- "num_tweets": 1.0,
- "avg_tweet_len": 13.0
- },
- {
- "user_name": "0000000000mghi",
- "tweet_length": 21.0,
- "num_tweets": 1.0,
- "avg_tweet_len": 21.0
- }
- ]
- },
- {
- "timestamp": "2013-01-03T00:00:00.000Z",
- "result": [
- {
- "user_name": "000000007",
- "tweet_length": 37.0,
- "num_tweets": 1.0,
- "avg_tweet_len": 37.0
- },
- {
- "user_name": "00000000b",
- "tweet_length": 119.0,
- "num_tweets": 1.0,
- "avg_tweet_len": 119.0
- }
- ]
- }
- ]
- },
- {
- "description": "topN, 2 aggs",
- "query": {
- "queryType": "topN",
- "dataSource": "twitterstream",
- "intervals": ["2013-01-01T00:00:00.000/2013-01-04T00:00:00.000"],
- "granularity": "day",
- "aggregations": [
- {
- "type": "doubleSum",
- "name": "num_tweets",
- "fieldName": "count"
- },
- {
- "type": "doubleSum",
- "name": "tweet_length",
- "fieldName": "tweet_length"
- }
- ],
- "postAggregations": [
- {
- "type": "arithmetic",
- "name": "avg_tweet_len",
- "fn": "/",
- "fields": [
- {
- "type": "fieldAccess",
- "name": "tweet_length",
- "fieldName": "tweet_length"
- },
- {
- "type": "fieldAccess",
- "name": "num_tweets",
- "fieldName": "num_tweets"
- }
- ]
- }
- ],
- "dimension": "user_name",
- "metric": {
- "type": "numeric",
- "metric": "num_tweets"
- },
- "threshold": 2,
- "context": {
- "useCache": "true",
- "populateCache": "true",
- "timeout": 60000,
- "useTopNMultiPassPooledQueryGranularity": "true"
- }
- },
- "expectedResults": [
- {
- "timestamp": "2013-01-01T00:00:00.000Z",
- "result": [
- {
- "user_name": "Favstar_Bot",
- "tweet_length": 2002.0,
- "num_tweets": 33.0,
- "avg_tweet_len": 60.666666666666664
- },
- {
- "user_name": "SportsAB",
- "tweet_length": 1114.0,
- "num_tweets": 26.0,
- "avg_tweet_len": 42.84615384615385
- }
- ]
- },
- {
- "timestamp": "2013-01-02T00:00:00.000Z",
- "result": [
- {
- "user_name": "Favstar_Bot",
- "tweet_length": 2185.0,
- "num_tweets": 36.0,
- "avg_tweet_len": 60.69444444444444
- },
- {
- "user_name": "SportsAB",
- "tweet_length": 1148.0,
- "num_tweets": 23.0,
- "avg_tweet_len": 49.91304347826087
- }
- ]
- },
- {
- "timestamp": "2013-01-03T00:00:00.000Z",
- "result": [
- {
- "user_name": "SportsAB",
- "tweet_length": 882.0,
- "num_tweets": 22.0,
- "avg_tweet_len": 40.09090909090909
- },
- {
- "user_name": "furin0620",
- "tweet_length": 867.0,
- "num_tweets": 21.0,
- "avg_tweet_len": 41.285714285714285
- }
- ]
- }
- ]
- },
- {
- "description": "topN, 2 aggs, filtered",
- "query": {
- "queryType": "topN",
- "dataSource": "twitterstream",
- "intervals": ["2013-01-01T00:00:00.000/2013-01-04T00:00:00.000"],
- "granularity": "day",
- "filter": {
- "type": "or",
- "fields": [
- {
- "type": "selector",
- "dimension": "user_name",
- "value": "Favstar_Bot"
- },
- {
- "type": "selector",
- "dimension": "user_name",
- "value": "SportsAB"
- },
- {
- "type": "selector",
- "dimension": "user_name",
- "value": "furin0620"
- }
- ]
- },
- "aggregations": [
- {
- "type": "doubleSum",
- "name": "num_tweets",
- "fieldName": "count"
- },
- {
- "type": "doubleSum",
- "name": "tweet_length",
- "fieldName": "tweet_length"
- }
- ],
- "postAggregations": [
- {
- "type": "arithmetic",
- "name": "avg_tweet_len",
- "fn": "/",
- "fields": [
- {
- "type": "fieldAccess",
- "name": "tweet_length",
- "fieldName": "tweet_length"
- },
- {
- "type": "fieldAccess",
- "name": "num_tweets",
- "fieldName": "num_tweets"
- }
- ]
- }
- ],
- "dimension": "user_name",
- "metric": {
- "type": "numeric",
- "metric": "num_tweets"
- },
- "threshold": 2,
- "context": {
- "useCache": "true",
- "populateCache": "true",
- "timeout": 60000,
- "useTopNMultiPassPooledQueryGranularity": "true"
- }
- },
- "expectedResults": [
- {
- "timestamp": "2013-01-01T00:00:00.000Z",
- "result": [
- {
- "user_name": "Favstar_Bot",
- "tweet_length": 2002.0,
- "num_tweets": 33.0,
- "avg_tweet_len": 60.666666666666664
- },
- {
- "user_name": "SportsAB",
- "tweet_length": 1114.0,
- "num_tweets": 26.0,
- "avg_tweet_len": 42.84615384615385
- }
- ]
- },
- {
- "timestamp": "2013-01-02T00:00:00.000Z",
- "result": [
- {
- "user_name": "Favstar_Bot",
- "tweet_length": 2185.0,
- "num_tweets": 36.0,
- "avg_tweet_len": 60.69444444444444
- },
- {
- "user_name": "SportsAB",
- "tweet_length": 1148.0,
- "num_tweets": 23.0,
- "avg_tweet_len": 49.91304347826087
- }
- ]
- },
- {
- "timestamp": "2013-01-03T00:00:00.000Z",
- "result": [
- {
- "user_name": "SportsAB",
- "tweet_length": 882.0,
- "num_tweets": 22.0,
- "avg_tweet_len": 40.09090909090909
- },
- {
- "user_name": "furin0620",
- "tweet_length": 867.0,
- "num_tweets": 21.0,
- "avg_tweet_len": 41.285714285714285
- }
- ]
- }
- ]
- },
- {
- "description": "groupBy",
- "query": {
- "queryType": "groupBy",
- "dataSource": "twitterstream",
- "intervals": ["2013-01-01T00:00:00.000/2013-01-04T00:00:00.000"],
- "granularity": "day",
- "aggregations": [
- {
- "type": "doubleSum",
- "name": "num_tweets",
- "fieldName": "count"
- },
- {
- "type": "doubleSum",
- "name": "tweet_length",
- "fieldName": "tweet_length"
- }
- ],
- "dimensions": ["has_links"]
- },
- "expectedResults": [
- {
- "version": "v1",
- "timestamp": "2013-01-01T00:00:00.000Z",
- "event": {
- "has_links": "No",
- "tweet_length": 2.08803904E8,
- "num_tweets": 3377791.0
- }
- },
- {
- "version": "v1",
- "timestamp": "2013-01-01T00:00:00.000Z",
- "event": {
- "has_links": "Yes",
- "tweet_length": 3.1437419E7,
- "num_tweets": 376237.0
- }
- },
- {
- "version": "v1",
- "timestamp": "2013-01-02T00:00:00.000Z",
- "event": {
- "has_links": "No",
- "tweet_length": 2.10402683E8,
- "num_tweets": 3375243.0
- }
- },
- {
- "version": "v1",
- "timestamp": "2013-01-02T00:00:00.000Z",
- "event": {
- "has_links": "Yes",
- "tweet_length": 3.5995118E7,
- "num_tweets": 424223.0
- }
- },
- {
- "version": "v1",
- "timestamp": "2013-01-03T00:00:00.000Z",
- "event": {
- "has_links": "No",
- "tweet_length": 1.9645145E8,
- "num_tweets": 3144985.0
- }
- },
- {
- "version": "v1",
- "timestamp": "2013-01-03T00:00:00.000Z",
- "event": {
- "has_links": "Yes",
- "tweet_length": 3.4913569E7,
- "num_tweets": 407434.0
- }
- }
- ]
- },
- {
- "query": {
- "queryType": "search",
- "intervals": ["2013-01-01T00:00:00.000/2013-01-04T00:00:00.000"],
- "dataSource": "twitterstream",
- "granularity": "all",
- "searchDimensions": ["user_name"],
- "sort": {
- "type": "lexicographic"
- },
- "query": {
- "type": "insensitive_contains",
- "value": "1World_Sports"
- },
- "limit": 3,
- "context": {
- "useCache": "true",
- "populateCache": "true",
- "timeout": 60000
- }
- },
- "expectedResults": [
- {
- "timestamp": "2013-01-01T00:00:00.000Z",
- "result": [
- {
- "dimension": "user_name",
- "value": "1World_Sports",
- "count":1
- }
- ]
- }
- ]
- },
- {
- "description": "groupByArbitraryInterval",
- "query": {
- "queryType": "groupBy",
- "dataSource": "twitterstream",
- "intervals": ["2013-01-01T15:10:10.090/2013-01-03T19:30:01.090"],
- "granularity": "day",
- "aggregations": [
- {
- "type": "doubleSum",
- "name": "num_tweets",
- "fieldName": "count"
- },
- {
- "type": "doubleSum",
- "name": "tweet_length",
- "fieldName": "tweet_length"
- }
- ],
- "dimensions": ["has_links"]
- },
- "expectedResults": [
- {
- "version": "v1",
- "timestamp": "2013-01-01T00:00:00.000Z",
- "event": {
- "has_links": "No",
- "tweet_length": 7.4820449E7,
- "num_tweets": 1170229.0
- }
- },
- {
- "version": "v1",
- "timestamp": "2013-01-01T00:00:00.000Z",
- "event": {
- "has_links": "Yes",
- "tweet_length": 1.149719E7,
- "num_tweets": 136582.0
- }
- },
- {
- "version": "v1",
- "timestamp": "2013-01-02T00:00:00.000Z",
- "event": {
- "has_links": "No",
- "tweet_length": 2.10402683E8,
- "num_tweets": 3375243.0
- }
- },
- {
- "version": "v1",
- "timestamp": "2013-01-02T00:00:00.000Z",
- "event": {
- "has_links": "Yes",
- "tweet_length": 3.5995118E7,
- "num_tweets": 424223.0
- }
- },
- {
- "version": "v1",
- "timestamp": "2013-01-03T00:00:00.000Z",
- "event": {
- "has_links": "No",
- "tweet_length": 1.59141096E8,
- "num_tweets": 2567986.0
- }
- },
- {
- "version": "v1",
- "timestamp": "2013-01-03T00:00:00.000Z",
- "event": {
- "has_links": "Yes",
- "tweet_length": 2.8345444E7,
- "num_tweets": 328917.0
- }
- }
- ]
- },
- {
- "description": "segmentMetadata",
- "query": {
- "queryType": "segmentMetadata",
- "dataSource": "twitterstream",
- "intervals": ["2013-01-01T00:00:00.000/2013-01-04T00:00:00.000"],
- "toInclude": {
- "type": "list",
- "columns": ["has_links", "has_links"]
- }
- },
- "expectedResults": [
- {
-
"id":"twitterstream_2013-01-01T00:00:00.000Z_2013-01-02T00:00:00.000Z_2013-01-02T04:13:41.980Z_v9",
-
"intervals":["2013-01-01T00:00:00.000Z/2013-01-02T00:00:00.000Z"],
- "columns":{
- "has_links":{
- "typeSignature": "STRING",
- "type":"STRING",
- "hasMultipleValues":false,
- "size":0,
- "cardinality":2,
- "minValue":"No",
- "maxValue":"Yes",
- "errorMessage":null,
- "hasNulls":false
- }
- },
- "size":0,
- "numRows":3702583,
- "aggregators":null,
- "projections":null,
- "timestampSpec":null,
- "queryGranularity":null,
- "rollup":null
- },
- {
-
"id":"twitterstream_2013-01-02T00:00:00.000Z_2013-01-03T00:00:00.000Z_2013-01-03T03:44:58.791Z_v9",
-
"intervals":["2013-01-02T00:00:00.000Z/2013-01-03T00:00:00.000Z"],
- "columns":{
- "has_links":{
- "typeSignature": "STRING",
- "type":"STRING",
- "hasMultipleValues":false,
- "size":0,
- "cardinality":2,
- "minValue":"No",
- "maxValue":"Yes",
- "errorMessage":null,
- "hasNulls":false
- }
- },
- "size":0,
- "numRows":3743002,
- "aggregators":null,
- "projections":null,
- "timestampSpec":null,
- "queryGranularity":null,
- "rollup":null
- },
- {
-
"id":"twitterstream_2013-01-03T00:00:00.000Z_2013-01-04T00:00:00.000Z_2013-01-04T04:09:13.590Z_v9",
-
"intervals":["2013-01-03T00:00:00.000Z/2013-01-04T00:00:00.000Z"],
- "columns":{
- "has_links":{
- "typeSignature": "STRING",
- "type":"STRING",
- "hasMultipleValues":false,
- "size":0,
- "cardinality":2,
- "minValue":"No",
- "maxValue":"Yes",
- "errorMessage":null,
- "hasNulls":false
- }
- },
- "size":0,
- "numRows":3502959,
- "aggregators":null,
- "projections":null,
- "timestampSpec":null,
- "queryGranularity":null,
- "rollup":null
- }
- ]
- },
- {
- "description": "topN, 2 aggs, topN over dependent postAgg",
- "query": {
- "queryType": "topN",
- "dataSource": "twitterstream",
- "intervals": ["2013-01-01T00:00:00.000/2013-01-04T00:00:00.000"],
- "granularity": "day",
- "aggregations": [
- {
- "type": "doubleSum",
- "name": "num_tweets",
- "fieldName": "count"
- },
- {
- "type": "doubleSum",
- "name": "tweet_length",
- "fieldName": "tweet_length"
- }
- ],
- "postAggregations": [
- {
- "type": "arithmetic",
- "name": "avg_tweet_len",
- "fn": "/",
- "fields": [
- {
- "type": "fieldAccess",
- "name": "tweet_length",
- "fieldName": "tweet_length"
- },
- {
- "type": "fieldAccess",
- "name": "num_tweets",
- "fieldName": "num_tweets"
- }
- ]
- },
- {
- "type": "arithmetic",
- "name": "avg_tweet_len_half",
- "fn": "/",
- "fields": [
- {
- "type": "fieldAccess",
- "name": "avg_tweet_len",
- "fieldName": "avg_tweet_len"
- },
- {
- "type": "constant",
- "value": "2"
- }
- ]
- },
- {
- "type": "arithmetic",
- "name": "avg_tweet_len_doubled",
- "fn": "*",
- "fields": [
- {
- "type": "fieldAccess",
- "name": "avg_tweet_len",
- "fieldName": "avg_tweet_len"
- },
- {
- "type": "constant",
- "value": "2"
- }
- ]
- }
- ],
- "dimension": "user_name",
- "metric": {
- "type": "numeric",
- "metric": "avg_tweet_len_doubled"
- },
- "threshold": 2,
- "context": {
- "useCache": "true",
- "populateCache": "true",
- "timeout": 60000,
- "useTopNMultiPassPooledQueryGranularity": "true"
- }
- },
- "expectedResults": [
- {
- "timestamp": "2013-01-01T00:00:00.000Z",
- "result": [
- {
- "user_name": "___soMALIa___",
- "tweet_length": 539.0,
- "avg_tweet_len_half": 269.5,
- "avg_tweet_len_doubled": 1078.0,
- "num_tweets": 1.0,
- "avg_tweet_len": 539.0
- },
- {
- "user_name": "SophiiiaSlr",
- "tweet_length": 530.0,
- "avg_tweet_len_half": 265.0,
- "avg_tweet_len_doubled": 1060.0,
- "num_tweets": 1.0,
- "avg_tweet_len": 530.0
- }
- ]
- },
- {
- "timestamp": "2013-01-02T00:00:00.000Z",
- "result": [
- {
- "user_name": "FallenReckless",
- "tweet_length": 518.0,
- "avg_tweet_len_half": 259.0,
- "avg_tweet_len_doubled": 1036.0,
- "num_tweets": 1.0,
- "avg_tweet_len": 518.0
- },
- {
- "user_name": "SigaMike",
- "tweet_length": 514.0,
- "avg_tweet_len_half": 257.0,
- "avg_tweet_len_doubled": 1028.0,
- "num_tweets": 1.0,
- "avg_tweet_len": 514.0
- }
- ]
- },
- {
- "timestamp": "2013-01-03T00:00:00.000Z",
- "result": [
- {
- "user_name": "Alejo_InReverse",
- "tweet_length": 560.0,
- "avg_tweet_len_half": 280.0,
- "avg_tweet_len_doubled": 1120.0,
- "num_tweets": 1.0,
- "avg_tweet_len": 560.0
- },
- {
- "user_name": "GavLeftHome",
- "tweet_length": 506.0,
- "avg_tweet_len_half": 253.0,
- "avg_tweet_len_doubled": 1012.0,
- "num_tweets": 1.0,
- "avg_tweet_len": 506.0
- }
- ]
- }
- ]
- }
-]
diff --git
a/integration-tests/src/test/resources/queries/twitterstream_queries_query_retry_test.json
b/integration-tests/src/test/resources/queries/twitterstream_queries_query_retry_test.json
deleted file mode 100644
index ffad3ca5817..00000000000
---
a/integration-tests/src/test/resources/queries/twitterstream_queries_query_retry_test.json
+++ /dev/null
@@ -1,26 +0,0 @@
-[
- {
- "description": "timeseries, 1 agg, all",
- "query": {
- "queryType": "timeseries",
- "dataSource": "twitterstream",
- "intervals": ["2013-01-01T00:00:00.000/2013-01-08T00:00:00.000"],
- "granularity": "all",
- "aggregations": [
- {
- "type": "count",
- "name": "rows"
- }
- ],
- "context": %%CONTEXT%%
- },
- "expectedResults": [
- {
- "timestamp": "2013-01-01T00:00:00.000Z",
- "result": {
- "rows": 10948544
- }
- }
- ]
- }
-]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]