From 3336c639e05fae564a353a17a671288d3e25f74c Mon Sep 17 00:00:00 2001 From: Srinivasa Vasu Date: Tue, 26 Jul 2022 22:09:09 +0530 Subject: [PATCH] refactor from yugabyte to yugabytedb Signed-off-by: Srinivasa Vasu --- docs/modules/databases/yugabytedb.md | 36 +++---- .../YugabyteContainerConstants.java | 42 -------- ...iner.java => YugabyteDBYCQLContainer.java} | 49 +++++---- ...iner.java => YugabyteDBYSQLContainer.java} | 43 ++++---- ...a => YugabyteDBYSQLContainerProvider.java} | 21 ++-- ...egate.java => YugabyteDBYCQLDelegate.java} | 6 +- ...y.java => YugabyteDBYCQLWaitStrategy.java} | 9 +- ...y.java => YugabyteDBYSQLWaitStrategy.java} | 9 +- ...s.containers.JdbcDatabaseContainerProvider | 2 +- .../YugabyteTestContainerConstants.java | 18 ---- ...java => YugabyteDBYSQLJDBCDriverTest.java} | 2 +- .../yugabytedb/YugabyteDBYCQLUnitTest.java | 101 ++++++++++++++++++ .../yugabytedb/YugabyteDBYSQLUnitTest.java | 83 ++++++++++++++ .../yugabytedb/YugabyteYCQLUnitTest.java | 88 --------------- .../yugabytedb/YugabyteYSQLUnitTest.java | 72 ------------- 15 files changed, 277 insertions(+), 304 deletions(-) delete mode 100644 modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteContainerConstants.java rename modules/yugabytedb/src/main/java/org/testcontainers/containers/{YugabyteYCQLContainer.java => YugabyteDBYCQLContainer.java} (67%) rename modules/yugabytedb/src/main/java/org/testcontainers/containers/{YugabyteYSQLContainer.java => YugabyteDBYSQLContainer.java} (63%) rename modules/yugabytedb/src/main/java/org/testcontainers/containers/{YugabyteYSQLContainerProvider.java => YugabyteDBYSQLContainerProvider.java} (52%) rename modules/yugabytedb/src/main/java/org/testcontainers/containers/delegate/{YugabyteYCQLDelegate.java => YugabyteDBYCQLDelegate.java} (84%) rename modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/{YugabyteYCQLWaitStrategy.java => YugabyteDBYCQLWaitStrategy.java} (81%) rename modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/{YugabyteYSQLWaitStrategy.java => YugabyteDBYSQLWaitStrategy.java} (84%) delete mode 100644 modules/yugabytedb/src/test/java/org/testcontainers/YugabyteTestContainerConstants.java rename modules/yugabytedb/src/test/java/org/testcontainers/jdbc/yugabytedb/{YugabyteYSQLJDBCDriverTest.java => YugabyteDBYSQLJDBCDriverTest.java} (89%) create mode 100644 modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLUnitTest.java create mode 100644 modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLUnitTest.java delete mode 100644 modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteYCQLUnitTest.java delete mode 100644 modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteYSQLUnitTest.java diff --git a/docs/modules/databases/yugabytedb.md b/docs/modules/databases/yugabytedb.md index e723b2f1e25..0cc7c66cc84 100644 --- a/docs/modules/databases/yugabytedb.md +++ b/docs/modules/databases/yugabytedb.md @@ -10,37 +10,27 @@ YugabyteDB supports two APIs. ### YSQL API -```java -public class YugabyteDBTest { + +[Creating a YSQL container](../../../modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLUnitTest.java) inside_block:creatingYSQLContainer + - @Rule - public YugabyteYSQLContainer container = new YugabyteYSQLContainer("yugabytedb/yugabyte:2.12.1.0-b41"); - - @Test - public void method() { - String url = container.getJdbcUrl(); - ... create a connection and run the tests as usual. It also depends on the frameworks being used. -``` - -#### JDBC URL + +[Starting a YSQL container](../../../modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLUnitTest.java) inside_block:startingYSQLContainer + -`jdbc:tc:yugabyte:2.12.1.0-b41:///yugabyte` ### YCQL API -```java -public class YugabyteDBTest { + +[Creating a YCQL container](../../../modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLUnitTest.java) inside_block:creatingYCQLContainer + - @Rule - public YugabyteYCQLContainer container = new YugabyteYCQLContainer("yugabytedb/yugabyte:2.12.1.0-b41"); - - @Test - public void method() { - Session session = container.getSession(); - ... create a connection and run the tests as usual. It also depends on the frameworks being used. -``` + +[Starting a YCQL container](../../../modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLUnitTest.java) inside_block:startingYCQLContainer + + ## Adding this module to your project dependencies diff --git a/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteContainerConstants.java b/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteContainerConstants.java deleted file mode 100644 index fde5ebd4fc3..00000000000 --- a/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteContainerConstants.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.testcontainers.containers; - -import org.testcontainers.utility.DockerImageName; - -/** - * Constants used in both YCQL and YSQL APIs - * - * @author srinivasa-vasu - */ -public interface YugabyteContainerConstants { - - DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("yugabytedb/yugabyte"); - - String DEFAULT_TAG = "2.12.1.0-b41"; - - String NAME = "yugabyte"; - - Integer YSQL_PORT = 5433; - - Integer YCQL_PORT = 9042; - - Integer MASTER_DASHBOARD_PORT = 7000; - - Integer TSERVER_DASHBOARD_PORT = 9000; - - String JDBC_DRIVER_CLASS = "com.yugabyte.Driver"; - - String JDBC_CONNECT_PREFIX = "jdbc:yugabytedb"; - - String ENTRYPOINT = "bin/yugabyted start --daemon=false"; - - String LOCAL_DC = "datacenter1"; - - String USER_PARAM = "user"; - - String PASSWORD_PARAM = "password"; - - String YSQL_TEST_QUERY = "SELECT 1"; - - String YCQL_TEST_QUERY = "SELECT release_version FROM system.local"; - -} diff --git a/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteYCQLContainer.java b/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteDBYCQLContainer.java similarity index 67% rename from modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteYCQLContainer.java rename to modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteDBYCQLContainer.java index a46f8fec4b8..0e2783297c2 100644 --- a/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteYCQLContainer.java +++ b/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteDBYCQLContainer.java @@ -6,25 +6,30 @@ import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.CqlSessionBuilder; import com.github.dockerjava.api.command.InspectContainerResponse; -import org.testcontainers.containers.delegate.YugabyteYCQLDelegate; -import org.testcontainers.containers.strategy.YugabyteYCQLWaitStrategy; +import org.testcontainers.containers.delegate.YugabyteDBYCQLDelegate; +import org.testcontainers.containers.strategy.YugabyteDBYCQLWaitStrategy; import org.testcontainers.ext.ScriptUtils; import org.testcontainers.utility.DockerImageName; -import static org.testcontainers.containers.YugabyteContainerConstants.DEFAULT_IMAGE_NAME; -import static org.testcontainers.containers.YugabyteContainerConstants.ENTRYPOINT; -import static org.testcontainers.containers.YugabyteContainerConstants.LOCAL_DC; -import static org.testcontainers.containers.YugabyteContainerConstants.MASTER_DASHBOARD_PORT; -import static org.testcontainers.containers.YugabyteContainerConstants.TSERVER_DASHBOARD_PORT; -import static org.testcontainers.containers.YugabyteContainerConstants.YCQL_PORT; - /** * YugabyteDB YCQL (Cloud Query Language) API container * * @author srinivasa-vasu * @see YCQL API */ -public class YugabyteYCQLContainer extends GenericContainer { +public class YugabyteDBYCQLContainer extends GenericContainer { + + private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("yugabytedb/yugabyte"); + + private static final Integer YCQL_PORT = 9042; + + private static final Integer MASTER_DASHBOARD_PORT = 7000; + + private static final Integer TSERVER_DASHBOARD_PORT = 9000; + + private static final String ENTRYPOINT = "bin/yugabyted start --daemon=false"; + + private static final String LOCAL_DC = "datacenter1"; private String keyspace; @@ -37,18 +42,18 @@ public class YugabyteYCQLContainer extends GenericContainerYSQL API */ -public class YugabyteYSQLContainer extends JdbcDatabaseContainer { +public class YugabyteDBYSQLContainer extends JdbcDatabaseContainer { + + private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("yugabytedb/yugabyte"); + + private static final Integer YSQL_PORT = 5433; + + private static final Integer MASTER_DASHBOARD_PORT = 7000; + + private static final Integer TSERVER_DASHBOARD_PORT = 9000; + + private static final String JDBC_DRIVER_CLASS = "com.yugabyte.Driver"; + + private static final String JDBC_CONNECT_PREFIX = "jdbc:yugabytedb"; + + private static final String ENTRYPOINT = "bin/yugabyted start --daemon=false"; private String database = "yugabyte"; @@ -33,18 +40,18 @@ public class YugabyteYSQLContainer extends JdbcDatabaseContainer { +public final class YugabyteDBYCQLDelegate extends AbstractDatabaseDelegate { private final CqlSessionBuilder builder; diff --git a/modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteYCQLWaitStrategy.java b/modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteDBYCQLWaitStrategy.java similarity index 81% rename from modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteYCQLWaitStrategy.java rename to modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteDBYCQLWaitStrategy.java index de2b3c851b2..3dbcec51226 100644 --- a/modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteYCQLWaitStrategy.java +++ b/modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteDBYCQLWaitStrategy.java @@ -4,12 +4,11 @@ import com.datastax.oss.driver.api.core.CqlSession; import lombok.RequiredArgsConstructor; -import org.testcontainers.containers.YugabyteYCQLContainer; +import org.testcontainers.containers.YugabyteDBYCQLContainer; import org.testcontainers.containers.wait.strategy.AbstractWaitStrategy; import org.testcontainers.containers.wait.strategy.WaitStrategyTarget; import static org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess; -import static org.testcontainers.containers.YugabyteContainerConstants.YCQL_TEST_QUERY; /** * Custom wait strategy for YCQL API. @@ -25,13 +24,15 @@ * @author srinivasa-vasu */ @RequiredArgsConstructor -public final class YugabyteYCQLWaitStrategy extends AbstractWaitStrategy { +public final class YugabyteDBYCQLWaitStrategy extends AbstractWaitStrategy { + + private static final String YCQL_TEST_QUERY = "SELECT release_version FROM system.local"; private final WaitStrategyTarget target; @Override public void waitUntilReady(WaitStrategyTarget target) { - YugabyteYCQLContainer container = (YugabyteYCQLContainer) target; + YugabyteDBYCQLContainer container = (YugabyteDBYCQLContainer) target; retryUntilSuccess((int) startupTimeout.getSeconds(), TimeUnit.SECONDS, () -> { getRateLimiter().doWhenReady(() -> { try (CqlSession session = container.getSession()) { diff --git a/modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteYSQLWaitStrategy.java b/modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteDBYSQLWaitStrategy.java similarity index 84% rename from modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteYSQLWaitStrategy.java rename to modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteDBYSQLWaitStrategy.java index 1f114489f39..03d6134123f 100644 --- a/modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteYSQLWaitStrategy.java +++ b/modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteDBYSQLWaitStrategy.java @@ -6,12 +6,11 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.testcontainers.containers.YugabyteYSQLContainer; +import org.testcontainers.containers.YugabyteDBYSQLContainer; import org.testcontainers.containers.wait.strategy.AbstractWaitStrategy; import org.testcontainers.containers.wait.strategy.WaitStrategyTarget; import static org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess; -import static org.testcontainers.containers.YugabyteContainerConstants.YSQL_TEST_QUERY; /** * Custom wait strategy for YSQL API. @@ -28,13 +27,15 @@ */ @RequiredArgsConstructor @Slf4j -public final class YugabyteYSQLWaitStrategy extends AbstractWaitStrategy { +public final class YugabyteDBYSQLWaitStrategy extends AbstractWaitStrategy { + + private static final String YSQL_TEST_QUERY = "SELECT 1"; private final WaitStrategyTarget target; @Override public void waitUntilReady(WaitStrategyTarget target) { - YugabyteYSQLContainer container = (YugabyteYSQLContainer) target; + YugabyteDBYSQLContainer container = (YugabyteDBYSQLContainer) target; retryUntilSuccess((int) startupTimeout.getSeconds(), TimeUnit.SECONDS, () -> { getRateLimiter().doWhenReady(() -> { try (Connection con = container.createConnection(container.getJdbcUrl())) { diff --git a/modules/yugabytedb/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider b/modules/yugabytedb/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider index d4b25fba9f4..26e372d51ab 100644 --- a/modules/yugabytedb/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider +++ b/modules/yugabytedb/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider @@ -1 +1 @@ -org.testcontainers.containers.YugabyteYSQLContainerProvider +org.testcontainers.containers.YugabyteDBYSQLContainerProvider diff --git a/modules/yugabytedb/src/test/java/org/testcontainers/YugabyteTestContainerConstants.java b/modules/yugabytedb/src/test/java/org/testcontainers/YugabyteTestContainerConstants.java deleted file mode 100644 index 063337b3a0d..00000000000 --- a/modules/yugabytedb/src/test/java/org/testcontainers/YugabyteTestContainerConstants.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.testcontainers; - -import org.testcontainers.utility.DockerImageName; - -/** - * @author srinivasa-vasu - */ -public interface YugabyteTestContainerConstants { - - String IMAGE_NAME = "yugabytedb/yugabyte:2.12.1.0-b41"; - - DockerImageName YBDB_TEST_IMAGE = DockerImageName.parse(IMAGE_NAME); - - String LOCAL_DC = "datacenter1"; - - int YCQL_PORT = 9042; - -} diff --git a/modules/yugabytedb/src/test/java/org/testcontainers/jdbc/yugabytedb/YugabyteYSQLJDBCDriverTest.java b/modules/yugabytedb/src/test/java/org/testcontainers/jdbc/yugabytedb/YugabyteDBYSQLJDBCDriverTest.java similarity index 89% rename from modules/yugabytedb/src/test/java/org/testcontainers/jdbc/yugabytedb/YugabyteYSQLJDBCDriverTest.java rename to modules/yugabytedb/src/test/java/org/testcontainers/jdbc/yugabytedb/YugabyteDBYSQLJDBCDriverTest.java index 510a71f26d3..6e3790c92c1 100644 --- a/modules/yugabytedb/src/test/java/org/testcontainers/jdbc/yugabytedb/YugabyteYSQLJDBCDriverTest.java +++ b/modules/yugabytedb/src/test/java/org/testcontainers/jdbc/yugabytedb/YugabyteDBYSQLJDBCDriverTest.java @@ -14,7 +14,7 @@ * @author srinivasa-vasu */ @RunWith(Parameterized.class) -public class YugabyteYSQLJDBCDriverTest extends AbstractJDBCDriverTest { +public class YugabyteDBYSQLJDBCDriverTest extends AbstractJDBCDriverTest { @Parameterized.Parameters(name = "{index} - {0}") public static Iterable data() { diff --git a/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLUnitTest.java b/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLUnitTest.java new file mode 100644 index 00000000000..f8ff33c01b4 --- /dev/null +++ b/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLUnitTest.java @@ -0,0 +1,101 @@ +package org.testcontainers.junit.yugabytedb; + +import java.net.InetSocketAddress; + +import com.datastax.oss.driver.api.core.CqlSession; +import com.datastax.oss.driver.api.core.cql.ResultSet; +import org.junit.Test; +import org.testcontainers.containers.YugabyteDBYCQLContainer; +import org.testcontainers.utility.DockerImageName; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +/** + * YugabyteDB YCQL API unit test class + * + * @author srinivasa-vasu + */ +public class YugabyteDBYCQLUnitTest { + + private static final String IMAGE_NAME = "yugabytedb/yugabyte:2.14.0.0-b94"; + + private static final DockerImageName YBDB_TEST_IMAGE = DockerImageName.parse(IMAGE_NAME); + + private static final String LOCAL_DC = "datacenter1"; + + private static final int YCQL_PORT = 9042; + + @Test + public void testSmoke() { + try ( + // creatingYCQLContainer { + final YugabyteDBYCQLContainer ycqlContainer = new YugabyteDBYCQLContainer(IMAGE_NAME) + // } + ) { + // startingYCQLContainer { + ycqlContainer.start(); + // } + assertNotNull("Smoke test simple query execution fails!", + performQuery(ycqlContainer, "SELECT release_version FROM system.local").one().getString(0)); + } + } + + @Test + public void testCustomKeyspace() throws InterruptedException { + String key = "random"; + try (final YugabyteDBYCQLContainer ycqlContainer = new YugabyteDBYCQLContainer(YBDB_TEST_IMAGE) + .withKeyspaceName(key)) { + ycqlContainer.start(); + assertEquals("Custom keyspace creation fails!", key, + performQuery(ycqlContainer, + "SELECT keyspace_name FROM system_schema.keyspaces where keyspace_name='" + key + "'").one() + .getString(0)); + } + } + + @Test + public void testAuthenticationEnabled() throws InterruptedException { + String role = "random"; + try (final YugabyteDBYCQLContainer ycqlContainer = new YugabyteDBYCQLContainer(YBDB_TEST_IMAGE).withUsername(role) + .withPassword(role)) { + ycqlContainer.start(); + assertEquals("Keyspace login fails with authentication enabled!", role, + performQuery(ycqlContainer, "SELECT role FROM system_auth.roles where role='" + role + "'").one() + .getString(0)); + } + } + + @Test + public void testAuthenticationDisabled() { + try (final YugabyteDBYCQLContainer ycqlContainer = new YugabyteDBYCQLContainer(YBDB_TEST_IMAGE).withPassword("") + .withUsername("")) { + ycqlContainer.start(); + assertTrue("Query execution fails!", + performQuery(ycqlContainer, "SELECT release_version FROM system.local").wasApplied()); + } + } + + @Test + public void testInitScript() throws InterruptedException { + String key = "random"; + try (final YugabyteDBYCQLContainer ycqlContainer = new YugabyteDBYCQLContainer(YBDB_TEST_IMAGE) + .withKeyspaceName(key).withUsername(key).withPassword(key).withInitScript("init/init_yql.sql")) { + ycqlContainer.start(); + assertTrue("Query execution fails to execute statements from a custom script!", + performQuery(ycqlContainer, "SELECT * FROM random.bar").wasApplied()); + } + } + + private ResultSet performQuery(YugabyteDBYCQLContainer ycqlContainer, String cql) { + try (CqlSession session = CqlSession.builder().withKeyspace(ycqlContainer.getKeyspace()) + .withAuthCredentials(ycqlContainer.getUsername(), ycqlContainer.getPassword()) + .withLocalDatacenter(LOCAL_DC) + .addContactPoint(new InetSocketAddress(ycqlContainer.getHost(), ycqlContainer.getMappedPort(YCQL_PORT))) + .build()) { + return session.execute(cql); + } + } + +} diff --git a/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLUnitTest.java b/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLUnitTest.java new file mode 100644 index 00000000000..29675e242f1 --- /dev/null +++ b/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLUnitTest.java @@ -0,0 +1,83 @@ +package org.testcontainers.junit.yugabytedb; + +import java.sql.SQLException; + +import org.junit.Test; +import org.testcontainers.containers.YugabyteDBYSQLContainer; +import org.testcontainers.db.AbstractContainerDatabaseTest; +import org.testcontainers.utility.DockerImageName; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertEquals; + +/** + * YugabyteDB YSQL API unit test class + * + * @author srinivasa-vasu + */ +public class YugabyteDBYSQLUnitTest extends AbstractContainerDatabaseTest { + + private static final String IMAGE_NAME = "yugabytedb/yugabyte:2.14.0.0-b94"; + + private static final DockerImageName YBDB_TEST_IMAGE = DockerImageName.parse(IMAGE_NAME); + + @Test + public void testSmoke() throws SQLException { + try ( + // creatingYSQLContainer { + final YugabyteDBYSQLContainer ysqlContainer = new YugabyteDBYSQLContainer(IMAGE_NAME) + // } + ) { + // startingYSQLContainer { + ysqlContainer.start(); + // } + assertEquals("Query execution fails!", 1, performQuery(ysqlContainer, "SELECT 1").getInt(1)); + } + } + + @Test + public void testCustomDatabase() throws SQLException { + String key = "random"; + try (final YugabyteDBYSQLContainer ysqlContainer = new YugabyteDBYSQLContainer(YBDB_TEST_IMAGE) + .withDatabaseName(key)) { + ysqlContainer.start(); + assertEquals("Query execution on a custom database fails!", 1, + performQuery(ysqlContainer, "SELECT 1").getInt(1)); + } + } + + @Test + public void testExplicitInitScript() throws SQLException { + try (final YugabyteDBYSQLContainer ysqlContainer = new YugabyteDBYSQLContainer(YBDB_TEST_IMAGE) + .withInitScript("init/init_yql.sql")) { + ysqlContainer.start(); + assertEquals("Value from the init script does not match the real value", "hello world", + performQuery(ysqlContainer, "SELECT foo FROM bar").getString(1)); + } + } + + @Test + public void testWithAdditionalUrlParamInJdbcUrl() { + try (final YugabyteDBYSQLContainer ysqlContainer = new YugabyteDBYSQLContainer(YBDB_TEST_IMAGE) + .withUrlParam("sslmode", "disable").withUrlParam("application_name", "yugabyte")) { + ysqlContainer.start(); + String jdbcUrl = ysqlContainer.getJdbcUrl(); + assertThat(jdbcUrl, containsString("?")); + assertThat(jdbcUrl, containsString("&")); + assertThat(jdbcUrl, containsString("sslmode=disable")); + assertThat(jdbcUrl, containsString("application_name=yugabyte")); + } + } + + @Test + public void testWithCustomRole() throws SQLException { + try (final YugabyteDBYSQLContainer ysqlContainer = new YugabyteDBYSQLContainer(YBDB_TEST_IMAGE) + .withDatabaseName("yugabyte").withPassword("yugabyte").withUsername("yugabyte")) { + ysqlContainer.start(); + assertEquals("Query execution with a custom role fails!", 1, + performQuery(ysqlContainer, "SELECT 1").getInt(1)); + } + } + +} diff --git a/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteYCQLUnitTest.java b/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteYCQLUnitTest.java deleted file mode 100644 index ad3fc44f1aa..00000000000 --- a/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteYCQLUnitTest.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.testcontainers.junit.yugabytedb; - -import java.net.InetSocketAddress; - -import com.datastax.oss.driver.api.core.CqlSession; -import com.datastax.oss.driver.api.core.cql.ResultSet; -import org.junit.Test; -import org.testcontainers.containers.YugabyteYCQLContainer; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.testcontainers.YugabyteTestContainerConstants.IMAGE_NAME; -import static org.testcontainers.YugabyteTestContainerConstants.LOCAL_DC; -import static org.testcontainers.YugabyteTestContainerConstants.YBDB_TEST_IMAGE; -import static org.testcontainers.YugabyteTestContainerConstants.YCQL_PORT; - -/** - * YugabyteDB YCQL API unit test class - * - * @author srinivasa-vasu - */ -public class YugabyteYCQLUnitTest { - - @Test - public void testSmoke() { - try (YugabyteYCQLContainer container = new YugabyteYCQLContainer(IMAGE_NAME)) { - container.start(); - assertNotNull("Smoke test simple query execution fails!", - performQuery(container, "SELECT release_version FROM system.local").one().getString(0)); - } - } - - @Test - public void testCustomKeyspace() throws InterruptedException { - String key = "random"; - try (YugabyteYCQLContainer container = new YugabyteYCQLContainer(YBDB_TEST_IMAGE).withKeyspaceName(key)) { - container.start(); - assertEquals("Custom keyspace creation fails!", key, - performQuery(container, - "SELECT keyspace_name FROM system_schema.keyspaces where keyspace_name='" + key + "'").one() - .getString(0)); - } - } - - @Test - public void testAuthenticationEnabled() throws InterruptedException { - String role = "random"; - try (YugabyteYCQLContainer container = new YugabyteYCQLContainer(YBDB_TEST_IMAGE).withUsername(role) - .withPassword(role)) { - container.start(); - assertEquals("Keyspace login fails with authentication enabled!", role, - performQuery(container, "SELECT role FROM system_auth.roles where role='" + role + "'").one() - .getString(0)); - } - } - - @Test - public void testAuthenticationDisabled() { - try (YugabyteYCQLContainer container = new YugabyteYCQLContainer(YBDB_TEST_IMAGE).withPassword("") - .withUsername("")) { - container.start(); - assertTrue("Query execution fails!", - performQuery(container, "SELECT release_version FROM system.local").wasApplied()); - } - } - - @Test - public void testInitScript() throws InterruptedException { - String key = "random"; - try (YugabyteYCQLContainer container = new YugabyteYCQLContainer(YBDB_TEST_IMAGE).withKeyspaceName(key) - .withUsername(key).withPassword(key).withInitScript("init/init_yql.sql")) { - container.start(); - assertTrue("Query execution fails to execute statements from a custom script!", - performQuery(container, "SELECT * FROM random.bar").wasApplied()); - } - } - - private ResultSet performQuery(YugabyteYCQLContainer container, String cql) { - try (CqlSession session = CqlSession.builder().withKeyspace(container.getKeyspace()) - .withAuthCredentials(container.getUsername(), container.getPassword()).withLocalDatacenter(LOCAL_DC) - .addContactPoint(new InetSocketAddress(container.getHost(), container.getMappedPort(YCQL_PORT))) - .build()) { - return session.execute(cql); - } - } - -} diff --git a/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteYSQLUnitTest.java b/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteYSQLUnitTest.java deleted file mode 100644 index 707a3604991..00000000000 --- a/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteYSQLUnitTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.testcontainers.junit.yugabytedb; - -import java.sql.SQLException; - -import org.junit.Test; -import org.testcontainers.containers.YugabyteYSQLContainer; -import org.testcontainers.db.AbstractContainerDatabaseTest; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.assertEquals; -import static org.testcontainers.YugabyteTestContainerConstants.IMAGE_NAME; -import static org.testcontainers.YugabyteTestContainerConstants.YBDB_TEST_IMAGE; - -/** - * YugabyteDB YSQL API unit test class - * - * @author srinivasa-vasu - */ -public class YugabyteYSQLUnitTest extends AbstractContainerDatabaseTest { - - @Test - public void testSmoke() throws SQLException { - try (YugabyteYSQLContainer container = new YugabyteYSQLContainer(IMAGE_NAME)) { - container.start(); - assertEquals("Query execution fails!", 1, performQuery(container, "SELECT 1").getInt(1)); - } - } - - @Test - public void testCustomDatabase() throws SQLException { - String key = "random"; - try (YugabyteYSQLContainer container = new YugabyteYSQLContainer(YBDB_TEST_IMAGE).withDatabaseName(key)) { - container.start(); - assertEquals("Query execution on a custom database fails!", 1, - performQuery(container, "SELECT 1").getInt(1)); - } - } - - @Test - public void testExplicitInitScript() throws SQLException { - try (YugabyteYSQLContainer container = new YugabyteYSQLContainer(YBDB_TEST_IMAGE) - .withInitScript("init/init_yql.sql")) { - container.start(); - assertEquals("Value from the init script does not match the real value", "hello world", - performQuery(container, "SELECT foo FROM bar").getString(1)); - } - } - - @Test - public void testWithAdditionalUrlParamInJdbcUrl() { - try (YugabyteYSQLContainer container = new YugabyteYSQLContainer(YBDB_TEST_IMAGE) - .withUrlParam("sslmode", "disable").withUrlParam("application_name", "yugabyte")) { - container.start(); - String jdbcUrl = container.getJdbcUrl(); - assertThat(jdbcUrl, containsString("?")); - assertThat(jdbcUrl, containsString("&")); - assertThat(jdbcUrl, containsString("sslmode=disable")); - assertThat(jdbcUrl, containsString("application_name=yugabyte")); - } - } - - @Test - public void testWithCustomRole() throws SQLException { - try (YugabyteYSQLContainer container = new YugabyteYSQLContainer(YBDB_TEST_IMAGE).withDatabaseName("yugabyte") - .withPassword("yugabyte").withUsername("yugabyte")) { - container.start(); - assertEquals("Query execution with a custom role fails!", 1, performQuery(container, "SELECT 1").getInt(1)); - } - } - -}