Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,21 @@ public JdbcDatabaseContainer(final DockerImageName dockerImageName) {
public abstract String getJdbcUrl();

/**
* @return the database name
* @return a R2DBC URL that may be used to connect to the dockerized DB
*/
public String getR2dbcUrl() {
String jdbcUrl = getJdbcUrl();
if (!jdbcUrl.startsWith("jdbc:")) {
throw new IllegalStateException("JDBC URL does not start with 'jdbc:': " + jdbcUrl);
}
return "r2dbc:" + jdbcUrl.substring(5);
}



/**
* @return the database name
*/
public String getDatabaseName() {
throw new UnsupportedOperationException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,32 @@ void anExceptionIsThrownIfJdbcIsNotAvailable() {
assertThatExceptionOfType(IllegalStateException.class).isThrownBy(jdbcContainer::waitUntilContainerStarted);
}

@Test
void getR2dbcUrlReturnsR2dbcPrefixedUrl() {
JdbcDatabaseContainer<?> jdbcContainer = new JdbcDatabaseContainerStub("mysql:latest") {
@Override
public String getJdbcUrl() {
return "jdbc:mysql://localhost:3306/test";
}
};

String r2dbcUrl = jdbcContainer.getR2dbcUrl();
assert r2dbcUrl.equals("r2dbc:mysql://localhost:3306/test");
}

@Test
void getR2dbcUrlThrowsExceptionIfJdbcPrefixMissing() {
JdbcDatabaseContainer<?> jdbcContainer = new JdbcDatabaseContainerStub("mysql:latest") {
@Override
public String getJdbcUrl() {
return "mysql://localhost:3306/test";
}
};

assertThatExceptionOfType(IllegalStateException.class)
.isThrownBy(jdbcContainer::getR2dbcUrl);
}

static class JdbcDatabaseContainerStub extends JdbcDatabaseContainer {

public JdbcDatabaseContainerStub(@NonNull String dockerImageName) {
Expand Down