diff --git a/modules/yugabytedb/src/main/java/org/testcontainers/containers/YCQLSessionDelegate.java b/modules/yugabytedb/src/main/java/org/testcontainers/containers/YCQLSessionDelegate.java new file mode 100644 index 00000000000..844260e80fe --- /dev/null +++ b/modules/yugabytedb/src/main/java/org/testcontainers/containers/YCQLSessionDelegate.java @@ -0,0 +1,25 @@ +package org.testcontainers.containers; + +import com.datastax.oss.driver.api.core.CqlSession; + +/** + * A builder abstraction to construct {@link CqlSession} instance from + * {@link YugabyteDBYCQLContainer} instance. + * + * @author srinivasa-vasu + */ +public interface YCQLSessionDelegate { + + /** + * Constructs a {@link CqlSession} instance from {@link YugabyteDBYCQLContainer} + * instance. + * @param container YCQL container instance + * @return {@link CqlSession} instance + */ + default CqlSession builder(YugabyteDBYCQLContainer container) { + return CqlSession.builder().withLocalDatacenter(container.getLocalDc()).withKeyspace(container.getKeyspace()) + .withAuthCredentials(container.getUsername(), container.getPassword()) + .addContactPoint(container.getContactPoint()).build(); + } + +} diff --git a/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteDBYCQLContainer.java b/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteDBYCQLContainer.java index 0e2783297c2..1d3a5f18f8e 100644 --- a/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteDBYCQLContainer.java +++ b/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteDBYCQLContainer.java @@ -3,8 +3,6 @@ import java.net.InetSocketAddress; import java.time.Duration; -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.YugabyteDBYCQLDelegate; import org.testcontainers.containers.strategy.YugabyteDBYCQLWaitStrategy; @@ -15,7 +13,7 @@ * YugabyteDB YCQL (Cloud Query Language) API container * * @author srinivasa-vasu - * @see YCQL API + * @see YCQL API */ public class YugabyteDBYCQLContainer extends GenericContainer { @@ -116,26 +114,24 @@ public YugabyteDBYCQLContainer withPassword(final String password) { @Override protected void containerIsStarted(InspectContainerResponse containerInfo) { if (initScript != null) { - ScriptUtils.runInitScript(new YugabyteDBYCQLDelegate(getSessionBuilder()), initScript); + ScriptUtils.runInitScript(new YugabyteDBYCQLDelegate(this), initScript); } } /** - * Builds a {@link CqlSession} instance - * @return {@link CqlSession} instance + * Returns a {@link InetSocketAddress} representation of YCQL's contact point info + * @return contactpoint */ - public CqlSession getSession() { - return getSessionBuilder().build(); + public InetSocketAddress getContactPoint() { + return new InetSocketAddress(getHost(), getMappedPort(YCQL_PORT)); } /** - * Builder method for {#com.datastax.oss.driver.api.core.CqlSession} - * @return {@link CqlSessionBuilder} + * Returns the local datacenter name + * @return localdc name */ - public CqlSessionBuilder getSessionBuilder() { - return CqlSession.builder().withLocalDatacenter(LOCAL_DC).withKeyspace(this.getKeyspace()) - .withAuthCredentials(this.getUsername(), this.getPassword()) - .addContactPoint(new InetSocketAddress(this.getHost(), this.getMappedPort(YCQL_PORT))); + public String getLocalDc() { + return LOCAL_DC; } /** diff --git a/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteDBYSQLContainer.java b/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteDBYSQLContainer.java index 4c6ec44b784..6f3d83f49b0 100644 --- a/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteDBYSQLContainer.java +++ b/modules/yugabytedb/src/main/java/org/testcontainers/containers/YugabyteDBYSQLContainer.java @@ -12,7 +12,7 @@ * YugabyteDB YSQL (Structured Query Language) API container * * @author srinivasa-vasu - * @see YSQL API + * @see YSQL API */ public class YugabyteDBYSQLContainer extends JdbcDatabaseContainer { diff --git a/modules/yugabytedb/src/main/java/org/testcontainers/containers/delegate/YugabyteDBYCQLDelegate.java b/modules/yugabytedb/src/main/java/org/testcontainers/containers/delegate/YugabyteDBYCQLDelegate.java index 11b8d27a6df..1502d0b3250 100644 --- a/modules/yugabytedb/src/main/java/org/testcontainers/containers/delegate/YugabyteDBYCQLDelegate.java +++ b/modules/yugabytedb/src/main/java/org/testcontainers/containers/delegate/YugabyteDBYCQLDelegate.java @@ -1,10 +1,8 @@ package org.testcontainers.containers.delegate; import com.datastax.oss.driver.api.core.CqlSession; -import com.datastax.oss.driver.api.core.CqlSessionBuilder; -import com.datastax.oss.driver.api.core.session.Session; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import org.testcontainers.containers.YCQLSessionDelegate; import org.testcontainers.containers.YugabyteDBYCQLContainer; import org.testcontainers.delegate.AbstractDatabaseDelegate; @@ -14,25 +12,24 @@ * @author srinivasa-vasu * @see YugabyteDBYCQLContainer */ -@Slf4j @RequiredArgsConstructor -public final class YugabyteDBYCQLDelegate extends AbstractDatabaseDelegate { +public final class YugabyteDBYCQLDelegate extends AbstractDatabaseDelegate implements YCQLSessionDelegate { - private final CqlSessionBuilder builder; + private final YugabyteDBYCQLContainer container; @Override - protected Session createNewConnection() { - return builder.build(); + protected CqlSession createNewConnection() { + return builder(container); } @Override public void execute(String statement, String scriptPath, int lineNumber, boolean continueOnError, boolean ignoreFailedDrops) { - ((CqlSession) getConnection()).execute(statement); + getConnection().execute(statement); } @Override - protected void closeConnectionQuietly(Session session) { + protected void closeConnectionQuietly(CqlSession session) { if (session != null) { session.close(); } diff --git a/modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteDBYCQLWaitStrategy.java b/modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteDBYCQLWaitStrategy.java index 3dbcec51226..73274dfc562 100644 --- a/modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteDBYCQLWaitStrategy.java +++ b/modules/yugabytedb/src/main/java/org/testcontainers/containers/strategy/YugabyteDBYCQLWaitStrategy.java @@ -4,6 +4,7 @@ import com.datastax.oss.driver.api.core.CqlSession; import lombok.RequiredArgsConstructor; +import org.testcontainers.containers.YCQLSessionDelegate; import org.testcontainers.containers.YugabyteDBYCQLContainer; import org.testcontainers.containers.wait.strategy.AbstractWaitStrategy; import org.testcontainers.containers.wait.strategy.WaitStrategyTarget; @@ -24,7 +25,7 @@ * @author srinivasa-vasu */ @RequiredArgsConstructor -public final class YugabyteDBYCQLWaitStrategy extends AbstractWaitStrategy { +public final class YugabyteDBYCQLWaitStrategy extends AbstractWaitStrategy implements YCQLSessionDelegate { private static final String YCQL_TEST_QUERY = "SELECT release_version FROM system.local"; @@ -35,7 +36,7 @@ public void waitUntilReady(WaitStrategyTarget target) { YugabyteDBYCQLContainer container = (YugabyteDBYCQLContainer) target; retryUntilSuccess((int) startupTimeout.getSeconds(), TimeUnit.SECONDS, () -> { getRateLimiter().doWhenReady(() -> { - try (CqlSession session = container.getSession()) { + try (CqlSession session = builder(container)) { session.execute(YCQL_TEST_QUERY); } }); diff --git a/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLUnitTest.java b/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLTest.java similarity index 98% rename from modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLUnitTest.java rename to modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLTest.java index 6e959a30362..2f097797fe7 100644 --- a/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLUnitTest.java +++ b/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLTest.java @@ -14,7 +14,7 @@ * * @author srinivasa-vasu */ -public class YugabyteDBYCQLUnitTest { +public class YugabyteDBYCQLTest { private static final String IMAGE_NAME = "yugabytedb/yugabyte:2.14.0.0-b94"; diff --git a/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLUnitTest.java b/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLTest.java similarity index 97% rename from modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLUnitTest.java rename to modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLTest.java index 98f01b34858..0480343546c 100644 --- a/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLUnitTest.java +++ b/modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLTest.java @@ -15,7 +15,7 @@ * * @author srinivasa-vasu */ -public class YugabyteDBYSQLUnitTest extends AbstractContainerDatabaseTest { +public class YugabyteDBYSQLTest extends AbstractContainerDatabaseTest { private static final String IMAGE_NAME = "yugabytedb/yugabyte:2.14.0.0-b94";