You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by el...@apache.org on 2017/04/01 20:36:16 UTC
[24/51] [partial] calcite-avatica git commit: [CALCITE-1717] Remove
Calcite code and lift avatica
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/server/src/main/java/org/apache/calcite/avatica/server/MetricsAwareAvaticaHandler.java
----------------------------------------------------------------------
diff --git a/avatica/server/src/main/java/org/apache/calcite/avatica/server/MetricsAwareAvaticaHandler.java b/avatica/server/src/main/java/org/apache/calcite/avatica/server/MetricsAwareAvaticaHandler.java
deleted file mode 100644
index 0914dbd..0000000
--- a/avatica/server/src/main/java/org/apache/calcite/avatica/server/MetricsAwareAvaticaHandler.java
+++ /dev/null
@@ -1,43 +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.calcite.avatica.server;
-
-import org.apache.calcite.avatica.metrics.MetricsSystem;
-
-/**
- * An {@link AvaticaHandler} that is capable of collecting metrics.
- */
-public interface MetricsAwareAvaticaHandler extends AvaticaHandler {
-
- /**
- * General prefix for all metrics in a handler.
- */
- String HANDLER_PREFIX = "Handler.";
-
- /**
- * Name for timing requests from users
- */
- String REQUEST_TIMER_NAME = HANDLER_PREFIX + "RequestTimings";
-
- /**
- * @return An instance of the {@link MetricsSystem} for this AvaticaHandler.
- */
- MetricsSystem getMetrics();
-
-}
-
-// End MetricsAwareAvaticaHandler.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/server/src/main/java/org/apache/calcite/avatica/server/PropertyBasedSpnegoLoginService.java
----------------------------------------------------------------------
diff --git a/avatica/server/src/main/java/org/apache/calcite/avatica/server/PropertyBasedSpnegoLoginService.java b/avatica/server/src/main/java/org/apache/calcite/avatica/server/PropertyBasedSpnegoLoginService.java
deleted file mode 100644
index 9e373fb..0000000
--- a/avatica/server/src/main/java/org/apache/calcite/avatica/server/PropertyBasedSpnegoLoginService.java
+++ /dev/null
@@ -1,50 +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.calcite.avatica.server;
-
-import org.eclipse.jetty.security.SpnegoLoginService;
-
-import java.lang.reflect.Field;
-import java.util.Objects;
-
-/**
- * A customization of {@link SpnegoLoginService} which directly specifies the server's
- * principal instead of requiring a file to exist. Known to work with Jetty-9.2.x, any other
- * version would require testing/inspection to ensure the logic is still sound.
- */
-public class PropertyBasedSpnegoLoginService extends SpnegoLoginService {
-
- private static final String TARGET_NAME_FIELD_NAME = "_targetName";
- private final String serverPrincipal;
-
- public PropertyBasedSpnegoLoginService(String realm, String serverPrincipal) {
- super(realm);
- this.serverPrincipal = Objects.requireNonNull(serverPrincipal);
- }
-
- @Override protected void doStart() throws Exception {
- // Override the parent implementation, setting _targetName to be the serverPrincipal
- // without the need for a one-line file to do the same thing.
- //
- // AbstractLifeCycle's doStart() method does nothing, so we aren't missing any extra logic.
- final Field targetNameField = SpnegoLoginService.class.getDeclaredField(TARGET_NAME_FIELD_NAME);
- targetNameField.setAccessible(true);
- targetNameField.set(this, serverPrincipal);
- }
-}
-
-// End PropertyBasedSpnegoLoginService.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/server/src/main/java/org/apache/calcite/avatica/server/package-info.java
----------------------------------------------------------------------
diff --git a/avatica/server/src/main/java/org/apache/calcite/avatica/server/package-info.java b/avatica/server/src/main/java/org/apache/calcite/avatica/server/package-info.java
deleted file mode 100644
index f2b8728..0000000
--- a/avatica/server/src/main/java/org/apache/calcite/avatica/server/package-info.java
+++ /dev/null
@@ -1,26 +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.
- */
-
-/**
- * Avatica server that listens for HTTP requests.
- */
-@PackageMarker
-package org.apache.calcite.avatica.server;
-
-import org.apache.calcite.avatica.util.PackageMarker;
-
-// End package-info.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/server/src/test/java/org/apache/calcite/avatica/AvaticaSpnegoTest.java
----------------------------------------------------------------------
diff --git a/avatica/server/src/test/java/org/apache/calcite/avatica/AvaticaSpnegoTest.java b/avatica/server/src/test/java/org/apache/calcite/avatica/AvaticaSpnegoTest.java
deleted file mode 100644
index 34329e2..0000000
--- a/avatica/server/src/test/java/org/apache/calcite/avatica/AvaticaSpnegoTest.java
+++ /dev/null
@@ -1,246 +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.calcite.avatica;
-
-import org.apache.calcite.avatica.jdbc.JdbcMeta;
-import org.apache.calcite.avatica.remote.Driver;
-import org.apache.calcite.avatica.remote.LocalService;
-import org.apache.calcite.avatica.server.HttpServer;
-
-import org.apache.kerby.kerberos.kerb.KrbException;
-import org.apache.kerby.kerberos.kerb.client.JaasKrbUtil;
-import org.apache.kerby.kerberos.kerb.client.KrbConfig;
-import org.apache.kerby.kerberos.kerb.client.KrbConfigKey;
-import org.apache.kerby.kerberos.kerb.server.SimpleKdcServer;
-
-import org.junit.AfterClass;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.security.PrivilegedExceptionAction;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import javax.security.auth.Subject;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-/**
- * End to end test case for SPNEGO with Avatica.
- */
-@RunWith(Parameterized.class)
-@Ignore("Disabled due to [CALCITE-1183] intermittent HTTP 404 failures")
-public class AvaticaSpnegoTest {
- private static final Logger LOG = LoggerFactory.getLogger(AvaticaSpnegoTest.class);
-
- private static final ConnectionSpec CONNECTION_SPEC = ConnectionSpec.HSQLDB;
- private static final List<HttpServer> SERVERS_TO_STOP = new ArrayList<>();
-
- private static SimpleKdcServer kdc;
- private static KrbConfig clientConfig;
- private static File keytabDir;
-
- private static int kdcPort;
- private static File clientKeytab;
- private static File serverKeytab;
-
- private static boolean isKdcStarted = false;
-
- private static void setupKdc() throws Exception {
- kdc = new SimpleKdcServer();
- File target = new File(System.getProperty("user.dir"), "target");
- assertTrue(target.exists());
-
- File kdcDir = new File(target, AvaticaSpnegoTest.class.getSimpleName());
- if (kdcDir.exists()) {
- SpnegoTestUtil.deleteRecursively(kdcDir);
- }
- kdcDir.mkdirs();
- kdc.setWorkDir(kdcDir);
-
- kdc.setKdcHost(SpnegoTestUtil.KDC_HOST);
- kdcPort = SpnegoTestUtil.getFreePort();
- kdc.setAllowTcp(true);
- kdc.setAllowUdp(false);
- kdc.setKdcTcpPort(kdcPort);
-
- LOG.info("Starting KDC server at {}:{}", SpnegoTestUtil.KDC_HOST, kdcPort);
-
- kdc.init();
- kdc.start();
- isKdcStarted = true;
-
- keytabDir = new File(target, AvaticaSpnegoTest.class.getSimpleName()
- + "_keytabs");
- if (keytabDir.exists()) {
- SpnegoTestUtil.deleteRecursively(keytabDir);
- }
- keytabDir.mkdirs();
- setupServerUser(keytabDir);
-
- clientConfig = new KrbConfig();
- clientConfig.setString(KrbConfigKey.KDC_HOST, SpnegoTestUtil.KDC_HOST);
- clientConfig.setInt(KrbConfigKey.KDC_TCP_PORT, kdcPort);
- clientConfig.setString(KrbConfigKey.DEFAULT_REALM, SpnegoTestUtil.REALM);
-
- // Kerby sets "java.security.krb5.conf" for us!
- System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
- //System.setProperty("sun.security.spnego.debug", "true");
- //System.setProperty("sun.security.krb5.debug", "true");
- }
-
- @AfterClass public static void stopKdc() throws Exception {
- for (HttpServer server : SERVERS_TO_STOP) {
- server.stop();
- }
-
- if (isKdcStarted) {
- LOG.info("Stopping KDC on {}", kdcPort);
- kdc.stop();
- }
- }
-
- private static void setupServerUser(File keytabDir) throws KrbException {
- // Create the client user
- String clientPrincipal = SpnegoTestUtil.CLIENT_PRINCIPAL.substring(0,
- SpnegoTestUtil.CLIENT_PRINCIPAL.indexOf('@'));
- clientKeytab = new File(keytabDir, clientPrincipal.replace('/', '_') + ".keytab");
- if (clientKeytab.exists()) {
- SpnegoTestUtil.deleteRecursively(clientKeytab);
- }
- LOG.info("Creating {} with keytab {}", clientPrincipal, clientKeytab);
- SpnegoTestUtil.setupUser(kdc, clientKeytab, clientPrincipal);
-
- // Create the server user
- String serverPrincipal = SpnegoTestUtil.SERVER_PRINCIPAL.substring(0,
- SpnegoTestUtil.SERVER_PRINCIPAL.indexOf('@'));
- serverKeytab = new File(keytabDir, serverPrincipal.replace('/', '_') + ".keytab");
- if (serverKeytab.exists()) {
- SpnegoTestUtil.deleteRecursively(serverKeytab);
- }
- LOG.info("Creating {} with keytab {}", SpnegoTestUtil.SERVER_PRINCIPAL, serverKeytab);
- SpnegoTestUtil.setupUser(kdc, serverKeytab, SpnegoTestUtil.SERVER_PRINCIPAL);
- }
-
- @Parameters public static List<Object[]> parameters() throws Exception {
- final ArrayList<Object[]> parameters = new ArrayList<>();
-
- // Start the KDC
- setupKdc();
-
- // Create a LocalService around HSQLDB
- final JdbcMeta jdbcMeta = new JdbcMeta(CONNECTION_SPEC.url,
- CONNECTION_SPEC.username, CONNECTION_SPEC.password);
- final LocalService localService = new LocalService(jdbcMeta);
-
- for (Driver.Serialization serialization : new Driver.Serialization[] {
- Driver.Serialization.JSON, Driver.Serialization.PROTOBUF}) {
- // Build and start the server
- HttpServer httpServer = new HttpServer.Builder()
- .withPort(0)
- .withAutomaticLogin(serverKeytab)
- .withSpnego(SpnegoTestUtil.SERVER_PRINCIPAL, SpnegoTestUtil.REALM)
- .withHandler(localService, serialization)
- .build();
- httpServer.start();
- SERVERS_TO_STOP.add(httpServer);
-
- final String url = "jdbc:avatica:remote:url=http://" + SpnegoTestUtil.KDC_HOST + ":"
- + httpServer.getPort() + ";authentication=SPNEGO;serialization=" + serialization;
- LOG.info("JDBC URL {}", url);
-
- parameters.add(new Object[] {url});
- }
-
- return parameters;
- }
-
- private final String jdbcUrl;
-
- public AvaticaSpnegoTest(String jdbcUrl) {
- this.jdbcUrl = Objects.requireNonNull(jdbcUrl);
- }
-
- @Test public void testAuthenticatedClient() throws Exception {
- ConnectionSpec.getDatabaseLock().lock();
- try {
- final String tableName = "allowed_clients";
- // Create the subject for the client
- final Subject clientSubject = JaasKrbUtil.loginUsingKeytab(SpnegoTestUtil.CLIENT_PRINCIPAL,
- clientKeytab);
-
- // The name of the principal
-
- // Run this code, logged in as the subject (the client)
- Subject.doAs(clientSubject, new PrivilegedExceptionAction<Void>() {
- @Override public Void run() throws Exception {
- try (Connection conn = DriverManager.getConnection(jdbcUrl)) {
- try (Statement stmt = conn.createStatement()) {
- assertFalse(stmt.execute("DROP TABLE IF EXISTS " + tableName));
- assertFalse(stmt.execute("CREATE TABLE " + tableName + "(pk integer)"));
- assertEquals(1, stmt.executeUpdate("INSERT INTO " + tableName + " VALUES(1)"));
- assertEquals(1, stmt.executeUpdate("INSERT INTO " + tableName + " VALUES(2)"));
- assertEquals(1, stmt.executeUpdate("INSERT INTO " + tableName + " VALUES(3)"));
-
- ResultSet results = stmt.executeQuery("SELECT count(1) FROM " + tableName);
- assertTrue(results.next());
- assertEquals(3, results.getInt(1));
- }
- }
- return null;
- }
- });
- } finally {
- ConnectionSpec.getDatabaseLock().unlock();
- }
- }
-
- @Test public void testAutomaticLogin() throws Exception {
- final String tableName = "automaticAllowedClients";
- // Avatica should log in for us with this info
- String url = jdbcUrl + ";principal=" + SpnegoTestUtil.CLIENT_PRINCIPAL + ";keytab="
- + clientKeytab;
- LOG.info("Updated JDBC url: {}", url);
- try (Connection conn = DriverManager.getConnection(url);
- Statement stmt = conn.createStatement()) {
- assertFalse(stmt.execute("DROP TABLE IF EXISTS " + tableName));
- assertFalse(stmt.execute("CREATE TABLE " + tableName + "(pk integer)"));
- assertEquals(1, stmt.executeUpdate("INSERT INTO " + tableName + " VALUES(1)"));
- assertEquals(1, stmt.executeUpdate("INSERT INTO " + tableName + " VALUES(2)"));
- assertEquals(1, stmt.executeUpdate("INSERT INTO " + tableName + " VALUES(3)"));
-
- ResultSet results = stmt.executeQuery("SELECT count(1) FROM " + tableName);
- assertTrue(results.next());
- assertEquals(3, results.getInt(1));
- }
- }
-}
-
-// End AvaticaSpnegoTest.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/server/src/test/java/org/apache/calcite/avatica/ConnectionSpec.java
----------------------------------------------------------------------
diff --git a/avatica/server/src/test/java/org/apache/calcite/avatica/ConnectionSpec.java b/avatica/server/src/test/java/org/apache/calcite/avatica/ConnectionSpec.java
deleted file mode 100644
index ba4c5b8..0000000
--- a/avatica/server/src/test/java/org/apache/calcite/avatica/ConnectionSpec.java
+++ /dev/null
@@ -1,55 +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.calcite.avatica;
-
-import net.hydromatic.scott.data.hsqldb.ScottHsqldb;
-
-import java.util.concurrent.locks.ReentrantLock;
-
-/** Information necessary to create a JDBC connection. Specify one to run
- * tests against a different database. (hsqldb is the default.) */
-public class ConnectionSpec {
- public final String url;
- public final String username;
- public final String password;
- public final String driver;
-
- // CALCITE-687 HSQLDB seems to fail oddly when multiple tests are run concurrently
- private static final ReentrantLock HSQLDB_LOCK = new ReentrantLock();
-
- public ConnectionSpec(String url, String username, String password,
- String driver) {
- this.url = url;
- this.username = username;
- this.password = password;
- this.driver = driver;
- }
-
- public static final ConnectionSpec HSQLDB =
- new ConnectionSpec(ScottHsqldb.URI, ScottHsqldb.USER,
- ScottHsqldb.PASSWORD, "org.hsqldb.jdbcDriver");
-
- /**
- * Return a lock used for controlling concurrent access to the database as it has been observed
- * that concurrent access is causing problems with HSQLDB.
- */
- public static ReentrantLock getDatabaseLock() {
- return HSQLDB_LOCK;
- }
-}
-
-// End ConnectionSpec.java
http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java
----------------------------------------------------------------------
diff --git a/avatica/server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java b/avatica/server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java
deleted file mode 100644
index 96e524a..0000000
--- a/avatica/server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java
+++ /dev/null
@@ -1,219 +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.calcite.avatica;
-
-import org.apache.calcite.avatica.remote.MockJsonService;
-import org.apache.calcite.avatica.remote.MockProtobufService.MockProtobufServiceFactory;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ParameterMetaData;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Callable;
-
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-/**
- * RemoteDriver tests that use a Mock implementation of a Connection.
- */
-@RunWith(Parameterized.class)
-public class RemoteDriverMockTest {
- public static final String MJS = MockJsonService.Factory.class.getName();
- public static final String MPBS = MockProtobufServiceFactory.class.getName();
-
- private static Connection mjs() throws SQLException {
- return DriverManager.getConnection("jdbc:avatica:remote:factory=" + MJS);
- }
-
- private static Connection mpbs() throws SQLException {
- return DriverManager.getConnection("jdbc:avatica:remote:factory=" + MPBS);
- }
-
- @Parameters
- public static List<Object[]> parameters() {
- List<Object[]> parameters = new ArrayList<>();
-
- parameters.add(new Object[] {new Callable<Connection>() {
- public Connection call() throws SQLException {
- return mjs();
- }
- } });
-
- parameters.add(new Object[] {new Callable<Connection>() {
- public Connection call() throws SQLException {
- return mpbs();
- }
- } });
-
- return parameters;
- }
-
- private final Callable<Connection> connectionFunctor;
-
- public RemoteDriverMockTest(Callable<Connection> functor) {
- this.connectionFunctor = functor;
- }
-
- private Connection getMockConnection() {
- try {
- return connectionFunctor.call();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @Test public void testRegister() throws Exception {
- final Connection connection = getMockConnection();
- assertThat(connection.isClosed(), is(false));
- connection.close();
- assertThat(connection.isClosed(), is(true));
- }
-
- @Test public void testSchemas() throws Exception {
- final Connection connection = getMockConnection();
- final ResultSet resultSet =
- connection.getMetaData().getSchemas(null, null);
- assertFalse(resultSet.next());
- final ResultSetMetaData metaData = resultSet.getMetaData();
- assertTrue(metaData.getColumnCount() >= 2);
- assertEquals("TABLE_SCHEM", metaData.getColumnName(1));
- assertEquals("TABLE_CATALOG", metaData.getColumnName(2));
- resultSet.close();
- connection.close();
- }
-
- @Test public void testTables() throws Exception {
- final Connection connection = getMockConnection();
- final ResultSet resultSet =
- connection.getMetaData().getTables(null, null, null, new String[0]);
- assertFalse(resultSet.next());
- final ResultSetMetaData metaData = resultSet.getMetaData();
- assertTrue(metaData.getColumnCount() >= 3);
- assertEquals("TABLE_CAT", metaData.getColumnName(1));
- assertEquals("TABLE_SCHEM", metaData.getColumnName(2));
- assertEquals("TABLE_NAME", metaData.getColumnName(3));
- resultSet.close();
- connection.close();
- }
-
- @Ignore
- @Test public void testNoFactory() throws Exception {
- final Connection connection =
- DriverManager.getConnection("jdbc:avatica:remote:");
- assertThat(connection.isClosed(), is(false));
- final ResultSet resultSet = connection.getMetaData().getSchemas();
- assertFalse(resultSet.next());
- final ResultSetMetaData metaData = resultSet.getMetaData();
- assertEquals(2, metaData.getColumnCount());
- assertEquals("TABLE_SCHEM", metaData.getColumnName(1));
- assertEquals("TABLE_CATALOG", metaData.getColumnName(2));
- resultSet.close();
- connection.close();
- assertThat(connection.isClosed(), is(true));
- }
-
- @Ignore
- @Test public void testCatalogsMock() throws Exception {
- final Connection connection = getMockConnection();
- assertThat(connection.isClosed(), is(false));
- final ResultSet resultSet = connection.getMetaData().getSchemas();
- assertFalse(resultSet.next());
- final ResultSetMetaData metaData = resultSet.getMetaData();
- assertEquals(2, metaData.getColumnCount());
- assertEquals("TABLE_SCHEM", metaData.getColumnName(1));
- assertEquals("TABLE_CATALOG", metaData.getColumnName(2));
- resultSet.close();
- connection.close();
- assertThat(connection.isClosed(), is(true));
- }
-
- @Ignore
- @Test public void testStatementExecuteQueryMock() throws Exception {
- checkStatementExecuteQuery(getMockConnection(), false);
- }
-
- @Ignore
- @Test public void testPrepareExecuteQueryMock() throws Exception {
- checkStatementExecuteQuery(getMockConnection(), true);
- }
-
- private void checkStatementExecuteQuery(Connection connection,
- boolean prepare) throws SQLException {
- final String sql = "select * from (\n"
- + " values (1, 'a'), (null, 'b'), (3, 'c')) as t (c1, c2)";
- final Statement statement;
- final ResultSet resultSet;
- final ParameterMetaData parameterMetaData;
- if (prepare) {
- final PreparedStatement ps = connection.prepareStatement(sql);
- statement = ps;
- parameterMetaData = ps.getParameterMetaData();
- resultSet = ps.executeQuery();
- } else {
- statement = connection.createStatement();
- parameterMetaData = null;
- resultSet = statement.executeQuery(sql);
- }
- if (parameterMetaData != null) {
- assertThat(parameterMetaData.getParameterCount(), equalTo(0));
- }
- final ResultSetMetaData metaData = resultSet.getMetaData();
- assertEquals(2, metaData.getColumnCount());
- assertEquals("C1", metaData.getColumnName(1));
- assertEquals("C2", metaData.getColumnName(2));
- assertTrue(resultSet.next());
- assertTrue(resultSet.next());
- assertTrue(resultSet.next());
- assertFalse(resultSet.next());
- resultSet.close();
- statement.close();
- connection.close();
- }
-
- @Test public void testResultSetsFinagled() throws Exception {
- // These values specified in MockJsonService
- final String table = "my_table";
- final long value = 10;
-
- final Connection connection = getMockConnection();
- // Not an accurate ResultSet per JDBC, but close enough for testing.
- ResultSet results = connection.getMetaData().getColumns(null, null, table, null);
- assertTrue(results.next());
- assertEquals(table, results.getString(1));
- assertEquals(value, results.getLong(2));
- }
-
-}
-
-// End RemoteDriverMockTest.java