Skip to content

Commit

Permalink
refactor from yugabyte to yugabytedb
Browse files Browse the repository at this point in the history
Signed-off-by: Srinivasa Vasu <srinivasan.surprise@gmail.com>
  • Loading branch information
srinivasa-vasu committed Jul 26, 2022
1 parent 3f4ac99 commit 3336c63
Show file tree
Hide file tree
Showing 15 changed files with 277 additions and 304 deletions.
36 changes: 13 additions & 23 deletions docs/modules/databases/yugabytedb.md
Expand Up @@ -10,37 +10,27 @@ YugabyteDB supports two APIs.

### YSQL API

```java
public class YugabyteDBTest {
<!--codeinclude-->
[Creating a YSQL container](../../../modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLUnitTest.java) inside_block:creatingYSQLContainer
<!--/codeinclude-->

@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
<!--codeinclude-->
[Starting a YSQL container](../../../modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYSQLUnitTest.java) inside_block:startingYSQLContainer
<!--/codeinclude-->

`jdbc:tc:yugabyte:2.12.1.0-b41:///yugabyte`

### YCQL API

```java
public class YugabyteDBTest {
<!--codeinclude-->
[Creating a YCQL container](../../../modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLUnitTest.java) inside_block:creatingYCQLContainer
<!--/codeinclude-->

@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.
```
<!--codeinclude-->
[Starting a YCQL container](../../../modules/yugabytedb/src/test/java/org/testcontainers/junit/yugabytedb/YugabyteDBYCQLUnitTest.java) inside_block:startingYCQLContainer
<!--/codeinclude-->


## Adding this module to your project dependencies

Expand Down

This file was deleted.

Expand Up @@ -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 <a href="https://docs.yugabyte.com/latest/api/ycql/">YCQL API</a>
*/
public class YugabyteYCQLContainer extends GenericContainer<YugabyteYCQLContainer> {
public class YugabyteDBYCQLContainer extends GenericContainer<YugabyteDBYCQLContainer> {

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;

Expand All @@ -37,18 +42,18 @@ public class YugabyteYCQLContainer extends GenericContainer<YugabyteYCQLContaine
/**
* @param imageName image name
*/
public YugabyteYCQLContainer(final String imageName) {
public YugabyteDBYCQLContainer(final String imageName) {
this(DockerImageName.parse(imageName));
}

/**
* @param imageName image name
*/
public YugabyteYCQLContainer(final DockerImageName imageName) {
public YugabyteDBYCQLContainer(final DockerImageName imageName) {
super(imageName);
imageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);
withExposedPorts(YCQL_PORT, MASTER_DASHBOARD_PORT, TSERVER_DASHBOARD_PORT);
waitingFor(new YugabyteYCQLWaitStrategy(this).withStartupTimeout(Duration.ofSeconds(60)));
waitingFor(new YugabyteDBYCQLWaitStrategy(this).withStartupTimeout(Duration.ofSeconds(60)));
withCommand(ENTRYPOINT);
}

Expand All @@ -67,39 +72,39 @@ protected void configure() {

/**
* @param initScript path of the initialization script file
* @return {@link YugabyteYCQLContainer} instance
* @return {@link YugabyteDBYCQLContainer} instance
*/
public YugabyteYCQLContainer withInitScript(String initScript) {
public YugabyteDBYCQLContainer withInitScript(String initScript) {
this.initScript = initScript;
return this;
}

/**
* Setting this would create the keyspace
* @param keyspace keyspace
* @return {@link YugabyteYCQLContainer} instance
* @return {@link YugabyteDBYCQLContainer} instance
*/
public YugabyteYCQLContainer withKeyspaceName(final String keyspace) {
public YugabyteDBYCQLContainer withKeyspaceName(final String keyspace) {
this.keyspace = keyspace;
return this;
}

/**
* Setting this would create the custom user role
* @param username user name
* @return {@link YugabyteYCQLContainer} instance
* @return {@link YugabyteDBYCQLContainer} instance
*/
public YugabyteYCQLContainer withUsername(final String username) {
public YugabyteDBYCQLContainer withUsername(final String username) {
this.username = username;
return this;
}

/**
* Setting this along with {@link #withUsername(String)} would enable authentication
* @param password password
* @return {@link YugabyteYCQLContainer} instance
* @return {@link YugabyteDBYCQLContainer} instance
*/
public YugabyteYCQLContainer withPassword(final String password) {
public YugabyteDBYCQLContainer withPassword(final String password) {
this.password = password;
return this;
}
Expand All @@ -111,7 +116,7 @@ public YugabyteYCQLContainer withPassword(final String password) {
@Override
protected void containerIsStarted(InspectContainerResponse containerInfo) {
if (initScript != null) {
ScriptUtils.runInitScript(new YugabyteYCQLDelegate(getSessionBuilder()), initScript);
ScriptUtils.runInitScript(new YugabyteDBYCQLDelegate(getSessionBuilder()), initScript);
}
}

Expand Down
Expand Up @@ -3,17 +3,10 @@
import java.time.Duration;
import java.util.Set;

import org.testcontainers.containers.strategy.YugabyteYSQLWaitStrategy;
import org.testcontainers.containers.strategy.YugabyteDBYSQLWaitStrategy;
import org.testcontainers.utility.DockerImageName;

import static java.util.Collections.singleton;
import static org.testcontainers.containers.YugabyteContainerConstants.DEFAULT_IMAGE_NAME;
import static org.testcontainers.containers.YugabyteContainerConstants.ENTRYPOINT;
import static org.testcontainers.containers.YugabyteContainerConstants.JDBC_CONNECT_PREFIX;
import static org.testcontainers.containers.YugabyteContainerConstants.JDBC_DRIVER_CLASS;
import static org.testcontainers.containers.YugabyteContainerConstants.MASTER_DASHBOARD_PORT;
import static org.testcontainers.containers.YugabyteContainerConstants.TSERVER_DASHBOARD_PORT;
import static org.testcontainers.containers.YugabyteContainerConstants.YSQL_PORT;

/**
* YugabyteDB YSQL (Structured Query Language) API container
Expand All @@ -22,7 +15,21 @@
* @see <a href="https://docs.yugabyte.com/latest/api/ysql/">YSQL API</a>
*/

public class YugabyteYSQLContainer extends JdbcDatabaseContainer<YugabyteYSQLContainer> {
public class YugabyteDBYSQLContainer extends JdbcDatabaseContainer<YugabyteDBYSQLContainer> {

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";

Expand All @@ -33,18 +40,18 @@ public class YugabyteYSQLContainer extends JdbcDatabaseContainer<YugabyteYSQLCon
/**
* @param imageName image name
*/
public YugabyteYSQLContainer(final String imageName) {
public YugabyteDBYSQLContainer(final String imageName) {
this(DockerImageName.parse(imageName));
}

/**
* @param imageName image name
*/
public YugabyteYSQLContainer(final DockerImageName imageName) {
public YugabyteDBYSQLContainer(final DockerImageName imageName) {
super(imageName);
imageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);
withExposedPorts(YSQL_PORT, MASTER_DASHBOARD_PORT, TSERVER_DASHBOARD_PORT);
waitingFor(new YugabyteYSQLWaitStrategy(this).withStartupTimeout(Duration.ofSeconds(60)));
waitingFor(new YugabyteDBYSQLWaitStrategy(this).withStartupTimeout(Duration.ofSeconds(60)));
withCommand(ENTRYPOINT);
}

Expand Down Expand Up @@ -101,35 +108,35 @@ public String getTestQueryString() {
/**
* Setting this would create the keyspace
* @param database database name
* @return {@link YugabyteYSQLContainer} instance
* @return {@link YugabyteDBYSQLContainer} instance
*/

@Override
public YugabyteYSQLContainer withDatabaseName(final String database) {
public YugabyteDBYSQLContainer withDatabaseName(final String database) {
this.database = database;
return this;
}

/**
* Setting this would create the custom user role
* @param username user name
* @return {@link YugabyteYSQLContainer} instance
* @return {@link YugabyteDBYSQLContainer} instance
*/

@Override
public YugabyteYSQLContainer withUsername(final String username) {
public YugabyteDBYSQLContainer withUsername(final String username) {
this.username = username;
return this;
}

/**
* Setting this along with {@link #withUsername(String)} would enable authentication
* @param password password
* @return {@link YugabyteYSQLContainer} instance
* @return {@link YugabyteDBYSQLContainer} instance
*/

@Override
public YugabyteYSQLContainer withPassword(final String password) {
public YugabyteDBYSQLContainer withPassword(final String password) {
this.password = password;
return this;
}
Expand Down
@@ -1,19 +1,24 @@
package org.testcontainers.containers;

import org.testcontainers.jdbc.ConnectionUrl;

import static org.testcontainers.containers.YugabyteContainerConstants.DEFAULT_IMAGE_NAME;
import static org.testcontainers.containers.YugabyteContainerConstants.DEFAULT_TAG;
import static org.testcontainers.containers.YugabyteContainerConstants.NAME;
import static org.testcontainers.containers.YugabyteContainerConstants.PASSWORD_PARAM;
import static org.testcontainers.containers.YugabyteContainerConstants.USER_PARAM;
import org.testcontainers.utility.DockerImageName;

/**
* YugabyteDB YSQL (Structured Query Language) JDBC container provider
*
* @author srinivasa-vasu
*/
public class YugabyteYSQLContainerProvider extends JdbcDatabaseContainerProvider {
public class YugabyteDBYSQLContainerProvider extends JdbcDatabaseContainerProvider {

private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("yugabytedb/yugabyte");

private static final String DEFAULT_TAG = "2.14.0.0-b94";

private static final String NAME = "yugabyte";

private static final String USER_PARAM = "user";

private static final String PASSWORD_PARAM = "password";

@Override
public boolean supports(String databaseType) {
Expand All @@ -27,7 +32,7 @@ public JdbcDatabaseContainer newInstance() {

@Override
public JdbcDatabaseContainer newInstance(String tag) {
return new YugabyteYSQLContainer(DEFAULT_IMAGE_NAME.withTag(tag));
return new YugabyteDBYSQLContainer(DEFAULT_IMAGE_NAME.withTag(tag));
}

@Override
Expand Down
Expand Up @@ -5,18 +5,18 @@
import com.datastax.oss.driver.api.core.session.Session;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.testcontainers.containers.YugabyteYCQLContainer;
import org.testcontainers.containers.YugabyteDBYCQLContainer;
import org.testcontainers.delegate.AbstractDatabaseDelegate;

/**
* Query execution delegate class for YCQL API to delegate init-scripts statements.
*
* @author srinivasa-vasu
* @see YugabyteYCQLContainer
* @see YugabyteDBYCQLContainer
*/
@Slf4j
@RequiredArgsConstructor
public final class YugabyteYCQLDelegate extends AbstractDatabaseDelegate<Session> {
public final class YugabyteDBYCQLDelegate extends AbstractDatabaseDelegate<Session> {

private final CqlSessionBuilder builder;

Expand Down

0 comments on commit 3336c63

Please sign in to comment.