From 0c7816504ab7e68bab958820f6ab5898a8509462 Mon Sep 17 00:00:00 2001 From: Yuya Ebihara Date: Tue, 10 May 2022 18:09:19 +0900 Subject: [PATCH] Remove deprecated AbstractTestIntegrationSmokeTest --- .../AbstractTestIntegrationSmokeTest.java | 449 ------------------ .../trino/testing/TestBaseConnectorTest.java | 83 ---- 2 files changed, 532 deletions(-) delete mode 100644 testing/trino-testing/src/main/java/io/trino/testing/AbstractTestIntegrationSmokeTest.java delete mode 100644 testing/trino-testing/src/test/java/io/trino/testing/TestBaseConnectorTest.java diff --git a/testing/trino-testing/src/main/java/io/trino/testing/AbstractTestIntegrationSmokeTest.java b/testing/trino-testing/src/main/java/io/trino/testing/AbstractTestIntegrationSmokeTest.java deleted file mode 100644 index 0a0b95f4b895..000000000000 --- a/testing/trino-testing/src/main/java/io/trino/testing/AbstractTestIntegrationSmokeTest.java +++ /dev/null @@ -1,449 +0,0 @@ -/* - * Licensed 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 io.trino.testing; - -import io.trino.Session; -import io.trino.sql.planner.OptimizerConfig.JoinDistributionType; -import org.intellij.lang.annotations.Language; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; - -import java.util.stream.Stream; - -import static io.trino.SystemSessionProperties.IGNORE_STATS_CALCULATOR_FAILURES; -import static io.trino.spi.type.VarcharType.VARCHAR; -import static io.trino.testing.DataProviders.toDataProvider; -import static io.trino.testing.QueryAssertions.assertContains; -import static io.trino.testing.assertions.Assert.assertEquals; -import static java.lang.String.join; -import static java.util.Collections.nCopies; -import static org.assertj.core.api.Assertions.assertThat; -import static org.testng.Assert.assertTrue; - -/** - * @deprecated Use {@link BaseConnectorTest} instead. - */ -@Deprecated -public abstract class AbstractTestIntegrationSmokeTest - extends AbstractTestQueryFramework -{ - /** - * Ensure the tests are run with {@link DistributedQueryRunner}. E.g. {@link LocalQueryRunner} takes some - * shortcuts, not exercising certain aspects. - */ - @Test - public void ensureDistributedQueryRunner() - { - assertThat(getQueryRunner().getNodeCount()).as("query runner node count") - .isGreaterThanOrEqualTo(3); - } - - @Test - public void testColumnsInReverseOrder() - { - assertQuery("SELECT shippriority, clerk, totalprice FROM orders"); - } - - @Test - public void testAggregation() - { - assertQuery("SELECT sum(orderkey) FROM orders"); - assertQuery("SELECT sum(totalprice) FROM orders"); - assertQuery("SELECT max(comment) FROM nation"); - - assertQuery("SELECT count(*) FROM orders"); - assertQuery("SELECT count(*) FROM orders WHERE orderkey > 10"); - assertQuery("SELECT count(*) FROM (SELECT * FROM orders LIMIT 10)"); - assertQuery("SELECT count(*) FROM (SELECT * FROM orders WHERE orderkey > 10 LIMIT 10)"); - - assertQuery("SELECT DISTINCT regionkey FROM nation"); - assertQuery("SELECT regionkey FROM nation GROUP BY regionkey"); - - // TODO support aggregation pushdown with GROUPING SETS - assertQuery( - "SELECT regionkey, nationkey FROM nation GROUP BY GROUPING SETS ((regionkey), (nationkey))", - "SELECT NULL, nationkey FROM nation " + - "UNION ALL SELECT DISTINCT regionkey, NULL FROM nation"); - assertQuery( - "SELECT regionkey, nationkey, count(*) FROM nation GROUP BY GROUPING SETS ((), (regionkey), (nationkey), (regionkey, nationkey))", - "SELECT NULL, NULL, count(*) FROM nation " + - "UNION ALL SELECT NULL, nationkey, 1 FROM nation " + - "UNION ALL SELECT regionkey, NULL, count(*) FROM nation GROUP BY regionkey " + - "UNION ALL SELECT regionkey, nationkey, 1 FROM nation"); - - assertQuery("SELECT count(regionkey) FROM nation"); - assertQuery("SELECT count(DISTINCT regionkey) FROM nation"); - assertQuery("SELECT regionkey, count(*) FROM nation GROUP BY regionkey"); - - assertQuery("SELECT min(regionkey), max(regionkey) FROM nation"); - assertQuery("SELECT min(DISTINCT regionkey), max(DISTINCT regionkey) FROM nation"); - assertQuery("SELECT regionkey, min(regionkey), min(name), max(regionkey), max(name) FROM nation GROUP BY regionkey"); - - assertQuery("SELECT sum(regionkey) FROM nation"); - assertQuery("SELECT sum(DISTINCT regionkey) FROM nation"); - assertQuery("SELECT regionkey, sum(regionkey) FROM nation GROUP BY regionkey"); - - assertQuery( - "SELECT avg(nationkey) FROM nation", - "SELECT avg(CAST(nationkey AS double)) FROM nation"); - assertQuery( - "SELECT avg(DISTINCT nationkey) FROM nation", - "SELECT avg(DISTINCT CAST(nationkey AS double)) FROM nation"); - assertQuery( - "SELECT regionkey, avg(nationkey) FROM nation GROUP BY regionkey", - "SELECT regionkey, avg(CAST(nationkey AS double)) FROM nation GROUP BY regionkey"); - } - - @Test - public void testExactPredicate() - { - assertQueryReturnsEmptyResult("SELECT * FROM orders WHERE orderkey = 10"); - - // filtered column is selected - assertQuery("SELECT custkey, orderkey FROM orders WHERE orderkey = 32", "VALUES (1301, 32)"); - - // filtered column is not selected - assertQuery("SELECT custkey FROM orders WHERE orderkey = 32", "VALUES (1301)"); - } - - @Test - public void testInListPredicate() - { - assertQueryReturnsEmptyResult("SELECT * FROM orders WHERE orderkey IN (10, 11, 20, 21)"); - - // filtered column is selected - assertQuery("SELECT custkey, orderkey FROM orders WHERE orderkey IN (7, 10, 32, 33)", "VALUES (392, 7), (1301, 32), (670, 33)"); - - // filtered column is not selected - assertQuery("SELECT custkey FROM orders WHERE orderkey IN (7, 10, 32, 33)", "VALUES (392), (1301), (670)"); - } - - @Test - public void testIsNullPredicate() - { - assertQueryReturnsEmptyResult("SELECT * FROM orders WHERE orderkey IS NULL"); - assertQueryReturnsEmptyResult("SELECT * FROM orders WHERE orderkey = 10 OR orderkey IS NULL"); - - // filtered column is selected - assertQuery("SELECT custkey, orderkey FROM orders WHERE orderkey = 32 OR orderkey IS NULL", "VALUES (1301, 32)"); - - // filtered column is not selected - assertQuery("SELECT custkey FROM orders WHERE orderkey = 32 OR orderkey IS NULL", "VALUES (1301)"); - } - - @Test - public void testLikePredicate() - { - // filtered column is not selected - assertQuery("SELECT orderkey FROM orders WHERE orderpriority LIKE '5-L%'"); - - // filtered column is selected - assertQuery("SELECT orderkey, orderpriority FROM orders WHERE orderpriority LIKE '5-L%'"); - - // filtered column is not selected - assertQuery("SELECT orderkey FROM orders WHERE orderpriority LIKE '5-L__'"); - - // filtered column is selected - assertQuery("SELECT orderkey, orderpriority FROM orders WHERE orderpriority LIKE '5-L__'"); - } - - @Test - public void testLimit() - { - assertEquals(computeActual("SELECT * FROM orders LIMIT 10").getRowCount(), 10); - } - - @Test - public void testMultipleRangesPredicate() - { - // List columns explicitly. Some connectors do not maintain column ordering. - assertQuery("" + - "SELECT orderkey, custkey, orderstatus, totalprice, orderdate, orderpriority, clerk, shippriority, comment " + - "FROM orders " + - "WHERE orderkey BETWEEN 10 AND 50"); - } - - @Test - public void testRangePredicate() - { - // List columns explicitly. Some connectors do not maintain column ordering. - assertQuery("" + - "SELECT orderkey, custkey, orderstatus, totalprice, orderdate, orderpriority, clerk, shippriority, comment " + - "FROM orders " + - "WHERE orderkey BETWEEN 10 AND 50"); - } - - @Test - public void testConcurrentScans() - { - String unionMultipleTimes = join(" UNION ALL ", nCopies(25, "SELECT * FROM orders")); - assertQuery("SELECT sum(if(rand() >= 0, orderkey)) FROM (" + unionMultipleTimes + ")", "VALUES 11246812500"); - } - - @Test - public void testSelectAll() - { - assertQuery("SELECT * FROM orders"); - } - - /** - * Test interactions between optimizer (including CBO), scheduling and connector metadata APIs. - */ - @Test(timeOut = 300_000, dataProvider = "joinDistributionTypes") - public void testJoinWithEmptySides(JoinDistributionType joinDistributionType) - { - Session session = noJoinReordering(joinDistributionType); - // empty build side - assertQuery(session, "SELECT count(*) FROM nation JOIN region ON nation.regionkey = region.regionkey AND region.name = ''", "VALUES 0"); - assertQuery(session, "SELECT count(*) FROM nation JOIN region ON nation.regionkey = region.regionkey AND region.regionkey < 0", "VALUES 0"); - // empty probe side - assertQuery(session, "SELECT count(*) FROM region JOIN nation ON nation.regionkey = region.regionkey AND region.name = ''", "VALUES 0"); - assertQuery(session, "SELECT count(*) FROM nation JOIN region ON nation.regionkey = region.regionkey AND region.regionkey < 0", "VALUES 0"); - } - - @DataProvider - public Object[][] joinDistributionTypes() - { - return Stream.of(JoinDistributionType.values()) - .collect(toDataProvider()); - } - - /** - * Test interactions between optimizer (including CBO) and connector metadata APIs. - */ - @Test - public void testJoin() - { - Session session = Session.builder(getSession()) - .setSystemProperty(IGNORE_STATS_CALCULATOR_FAILURES, "false") - .build(); - - // 2 inner joins, eligible for join reodering - assertQuery( - session, - "SELECT c.name, n.name, r.name " + - "FROM nation n " + - "JOIN customer c ON c.nationkey = n.nationkey " + - "JOIN region r ON n.regionkey = r.regionkey"); - - // 2 inner joins, eligible for join reodering, where one table has a filter - assertQuery( - session, - "SELECT c.name, n.name, r.name " + - "FROM nation n " + - "JOIN customer c ON c.nationkey = n.nationkey " + - "JOIN region r ON n.regionkey = r.regionkey " + - "WHERE n.name = 'ARGENTINA'"); - - // 2 inner joins, eligible for join reodering, on top of aggregation - assertQuery( - session, - "SELECT c.name, n.name, n.count, r.name " + - "FROM (SELECT name, regionkey, nationkey, count(*) count FROM nation GROUP BY name, regionkey, nationkey) n " + - "JOIN customer c ON c.nationkey = n.nationkey " + - "JOIN region r ON n.regionkey = r.regionkey"); - } - - @Test - public void testShowSchemas() - { - MaterializedResult actualSchemas = computeActual("SHOW SCHEMAS").toTestTypes(); - - MaterializedResult.Builder resultBuilder = MaterializedResult.resultBuilder(getSession(), VARCHAR) - .row(getSession().getSchema().orElse("tpch")); - - assertContains(actualSchemas, resultBuilder.build()); - } - - @Test - public void testShowTables() - { - MaterializedResult actualTables = computeActual("SHOW TABLES").toTestTypes(); - MaterializedResult expectedTables = MaterializedResult.resultBuilder(getSession(), VARCHAR) - .row("orders") - .build(); - assertContains(actualTables, expectedTables); - } - - @Test - public void testDescribeTable() - { - MaterializedResult expectedColumns = MaterializedResult.resultBuilder(getSession(), VARCHAR, VARCHAR, VARCHAR, VARCHAR) - .row("orderkey", "bigint", "", "") - .row("custkey", "bigint", "", "") - .row("orderstatus", "varchar(1)", "", "") - .row("totalprice", "double", "", "") - .row("orderdate", "date", "", "") - .row("orderpriority", "varchar(15)", "", "") - .row("clerk", "varchar(15)", "", "") - .row("shippriority", "integer", "", "") - .row("comment", "varchar(79)", "", "") - .build(); - MaterializedResult actualColumns = computeActual("DESCRIBE orders"); - assertEquals(actualColumns, expectedColumns); - } - - @Test - public void testExplainAnalyze() - { - assertExplainAnalyze("EXPLAIN ANALYZE SELECT * FROM orders"); - assertExplainAnalyze("EXPLAIN ANALYZE SELECT count(*), clerk FROM orders GROUP BY clerk"); - assertExplainAnalyze( - "EXPLAIN ANALYZE SELECT x + y FROM (" + - " SELECT orderdate, COUNT(*) x FROM orders GROUP BY orderdate) a JOIN (" + - " SELECT orderdate, COUNT(*) y FROM orders GROUP BY orderdate) b ON a.orderdate = b.orderdate"); - assertExplainAnalyze("EXPLAIN ANALYZE SELECT count(*), clerk FROM orders GROUP BY clerk UNION ALL SELECT sum(orderkey), clerk FROM orders GROUP BY clerk"); - - assertExplainAnalyze("EXPLAIN ANALYZE SHOW COLUMNS FROM orders"); - assertExplainAnalyze("EXPLAIN ANALYZE EXPLAIN SELECT count(*) FROM orders"); - assertExplainAnalyze("EXPLAIN ANALYZE EXPLAIN ANALYZE SELECT count(*) FROM orders"); - assertExplainAnalyze("EXPLAIN ANALYZE SHOW FUNCTIONS"); - assertExplainAnalyze("EXPLAIN ANALYZE SHOW TABLES"); - assertExplainAnalyze("EXPLAIN ANALYZE SHOW SCHEMAS"); - assertExplainAnalyze("EXPLAIN ANALYZE SHOW CATALOGS"); - assertExplainAnalyze("EXPLAIN ANALYZE SHOW SESSION"); - } - - @Test - public void testExplainAnalyzeVerbose() - { - assertExplainAnalyze("EXPLAIN ANALYZE VERBOSE SELECT * FROM orders"); - assertExplainAnalyze("EXPLAIN ANALYZE VERBOSE SELECT rank() OVER (PARTITION BY orderkey ORDER BY clerk DESC) FROM orders"); - assertExplainAnalyze("EXPLAIN ANALYZE VERBOSE SELECT rank() OVER (PARTITION BY orderkey ORDER BY clerk DESC) FROM orders WHERE orderkey < 0"); - } - - @Test - public void testTableSampleSystem() - { - MaterializedResult fullSample = computeActual("SELECT orderkey FROM orders TABLESAMPLE SYSTEM (100)"); - MaterializedResult emptySample = computeActual("SELECT orderkey FROM orders TABLESAMPLE SYSTEM (0)"); - MaterializedResult randomSample = computeActual("SELECT orderkey FROM orders TABLESAMPLE SYSTEM (50)"); - MaterializedResult all = computeActual("SELECT orderkey FROM orders"); - - assertContains(all, fullSample); - assertEquals(emptySample.getMaterializedRows().size(), 0); - assertTrue(all.getMaterializedRows().size() >= randomSample.getMaterializedRows().size()); - } - - @Test - public void testTableSampleWithFiltering() - { - MaterializedResult emptySample = computeActual("SELECT DISTINCT orderkey, orderdate FROM orders TABLESAMPLE SYSTEM (99) WHERE orderkey BETWEEN 0 AND 0"); - MaterializedResult halfSample = computeActual("SELECT DISTINCT orderkey, orderdate FROM orders TABLESAMPLE SYSTEM (50) WHERE orderkey BETWEEN 0 AND 9999999999"); - MaterializedResult all = computeActual("SELECT orderkey, orderdate FROM orders"); - - assertEquals(emptySample.getMaterializedRows().size(), 0); - // Assertions need to be loose here because SYSTEM sampling random selects data on split boundaries. In this case either all the data will be selected, or - // none of it. Sampling with a 100% ratio is ignored, so that also cannot be used to guarantee results. - assertTrue(all.getMaterializedRows().size() >= halfSample.getMaterializedRows().size()); - } - - @Test - public void testShowCreateTable() - { - assertThat((String) computeScalar("SHOW CREATE TABLE orders")) - // If the connector reports additional column properties, the expected value needs to be adjusted in the test subclass - .matches("CREATE TABLE \\w+\\.\\w+\\.orders \\Q(\n" + - " orderkey bigint,\n" + - " custkey bigint,\n" + - " orderstatus varchar(1),\n" + - " totalprice double,\n" + - " orderdate date,\n" + - " orderpriority varchar(15),\n" + - " clerk varchar(15),\n" + - " shippriority integer,\n" + - " comment varchar(79)\n" + - ")"); - } - - @Test - public void testSelectInformationSchemaTables() - { - String catalog = getSession().getCatalog().get(); - String schema = getSession().getSchema().get(); - String schemaPattern = schema.replaceAll("^.", "_"); - - assertQuery("SELECT table_name FROM information_schema.tables WHERE table_schema = '" + schema + "' AND table_name = 'orders'", "VALUES 'orders'"); - assertQuery("SELECT table_name FROM information_schema.tables WHERE table_schema LIKE '" + schema + "' AND table_name LIKE '%rders'", "VALUES 'orders'"); - assertQuery("SELECT table_name FROM information_schema.tables WHERE table_schema LIKE '" + schemaPattern + "' AND table_name LIKE '%rders'", "VALUES 'orders'"); - assertQuery( - "SELECT table_name FROM information_schema.tables " + - "WHERE table_catalog = '" + catalog + "' AND table_schema LIKE '" + schema + "' AND table_name LIKE '%orders'", - "VALUES 'orders'"); - assertQuery("SELECT table_name FROM information_schema.tables WHERE table_catalog = 'something_else'", "SELECT '' WHERE false"); - - assertQuery( - "SELECT DISTINCT table_name FROM information_schema.tables WHERE table_schema = 'information_schema' OR rand() = 42 ORDER BY 1", - "VALUES " + - "('applicable_roles'), " + - "('columns'), " + - "('enabled_roles'), " + - "('role_authorization_descriptors'), " + - "('roles'), " + - "('schemata'), " + - "('table_privileges'), " + - "('tables'), " + - "('views')"); - } - - @Test - public void testSelectInformationSchemaColumns() - { - String catalog = getSession().getCatalog().get(); - String schema = getSession().getSchema().get(); - String schemaPattern = schema.replaceAll(".$", "_"); - - @Language("SQL") String ordersTableWithColumns = "VALUES " + - "('orders', 'orderkey'), " + - "('orders', 'custkey'), " + - "('orders', 'orderstatus'), " + - "('orders', 'totalprice'), " + - "('orders', 'orderdate'), " + - "('orders', 'orderpriority'), " + - "('orders', 'clerk'), " + - "('orders', 'shippriority'), " + - "('orders', 'comment')"; - - assertQuery("SELECT table_schema FROM information_schema.columns WHERE table_schema = '" + schema + "' GROUP BY table_schema", "VALUES '" + schema + "'"); - assertQuery("SELECT table_name FROM information_schema.columns WHERE table_name = 'orders' GROUP BY table_name", "VALUES 'orders'"); - assertQuery("SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = '" + schema + "' AND table_name = 'orders'", ordersTableWithColumns); - assertQuery("SELECT table_name, column_name FROM information_schema.columns WHERE table_schema = '" + schema + "' AND table_name LIKE '%rders'", ordersTableWithColumns); - assertQuery("SELECT table_name, column_name FROM information_schema.columns WHERE table_schema LIKE '" + schemaPattern + "' AND table_name LIKE '_rder_'", ordersTableWithColumns); - assertQuery( - "SELECT table_name, column_name FROM information_schema.columns " + - "WHERE table_catalog = '" + catalog + "' AND table_schema = '" + schema + "' AND table_name LIKE '%orders%'", - ordersTableWithColumns); - - assertQuerySucceeds("SELECT * FROM information_schema.columns"); - assertQuery("SELECT DISTINCT table_name, column_name FROM information_schema.columns WHERE table_name LIKE '_rders'", ordersTableWithColumns); - assertQuerySucceeds("SELECT * FROM information_schema.columns WHERE table_catalog = '" + catalog + "'"); - assertQuerySucceeds("SELECT * FROM information_schema.columns WHERE table_catalog = '" + catalog + "' AND table_schema = '" + schema + "'"); - assertQuery("SELECT table_name, column_name FROM information_schema.columns WHERE table_catalog = '" + catalog + "' AND table_schema = '" + schema + "' AND table_name LIKE '_rders'", ordersTableWithColumns); - assertQuerySucceeds("SELECT * FROM information_schema.columns WHERE table_catalog = '" + catalog + "' AND table_name LIKE '%'"); - assertQuery("SELECT column_name FROM information_schema.columns WHERE table_catalog = 'something_else'", "SELECT '' WHERE false"); - - assertQuery( - "SELECT DISTINCT table_name FROM information_schema.columns WHERE table_schema = 'information_schema' OR rand() = 42 ORDER BY 1", - "VALUES " + - "('applicable_roles'), " + - "('columns'), " + - "('enabled_roles'), " + - "('role_authorization_descriptors'), " + - "('roles'), " + - "('schemata'), " + - "('table_privileges'), " + - "('tables'), " + - "('views')"); - } -} diff --git a/testing/trino-testing/src/test/java/io/trino/testing/TestBaseConnectorTest.java b/testing/trino-testing/src/test/java/io/trino/testing/TestBaseConnectorTest.java deleted file mode 100644 index e55ab56d450c..000000000000 --- a/testing/trino-testing/src/test/java/io/trino/testing/TestBaseConnectorTest.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Licensed 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 io.trino.testing; - -import com.google.common.collect.ImmutableList; -import org.testng.annotations.Test; - -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.collect.ImmutableList.toImmutableList; -import static java.util.Objects.requireNonNull; -import static org.assertj.core.api.Assertions.assertThat; - -public class TestBaseConnectorTest -{ - @Test - public void testThatAllTestsAreCopied() - { - assertThat(getMethods(BaseConnectorTest.class)).containsAll(getMethods(AbstractTestIntegrationSmokeTest.class)); - } - - private List getMethods(Class clazz) - { - return Arrays.stream(clazz.getMethods()) - .map(method -> new MethodSignature(method.getName(), method.getParameterTypes())) - .collect(toImmutableList()); - } - - private static final class MethodSignature - { - private final String name; - private final List> parameters; - - private MethodSignature(String name, Class[] parameters) - { - this.name = requireNonNull(name, "name is null"); - this.parameters = ImmutableList.copyOf(requireNonNull(parameters, "parameters is null")); - } - - @Override - public boolean equals(Object o) - { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - MethodSignature that = (MethodSignature) o; - return Objects.equals(name, that.name) && - Objects.equals(parameters, that.parameters); - } - - @Override - public int hashCode() - { - return Objects.hash(name, parameters); - } - - @Override - public String toString() - { - return toStringHelper(this) - .add("name", name) - .add("fields", parameters) - .toString(); - } - } -}