11package org .testcontainers .containers ;
22
33import org .testcontainers .containers .wait .strategy .HttpWaitStrategy ;
4+ import org .testcontainers .utility .ComparableVersion ;
45import org .testcontainers .utility .DockerImageName ;
56
67import java .time .Duration ;
@@ -29,12 +30,16 @@ public class CockroachContainer extends JdbcDatabaseContainer<CockroachContainer
2930
3031 private static final int DB_PORT = 26257 ;
3132
33+ private static final String FIRST_VERSION_WITH_ENV_VARS_SUPPORT = "22.1.0" ;
34+
3235 private String databaseName = "postgres" ;
3336
3437 private String username = "root" ;
3538
3639 private String password = "" ;
3740
41+ private boolean isVersionGreaterThanOrEqualTo221 ;
42+
3843 /**
3944 * @deprecated use {@link CockroachContainer(DockerImageName)} instead
4045 */
@@ -50,6 +55,7 @@ public CockroachContainer(final String dockerImageName) {
5055 public CockroachContainer (final DockerImageName dockerImageName ) {
5156 super (dockerImageName );
5257 dockerImageName .assertCompatibleWith (DEFAULT_IMAGE_NAME );
58+ isVersionGreaterThanOrEqualTo221 = isVersionGreaterThanOrEqualTo221 (dockerImageName );
5359
5460 withExposedPorts (REST_API_PORT , DB_PORT );
5561 waitingFor (
@@ -104,22 +110,35 @@ public String getTestQueryString() {
104110
105111 @ Override
106112 public CockroachContainer withUsername (String username ) {
107- throw new UnsupportedOperationException (
108- "The CockroachDB docker image does not currently support this - please see https://github.com/cockroachdb/cockroach/issues/19826"
109- );
113+ validateIfVersionSupportsUsernameOrPasswordOrDatabase ( "username" );
114+ this . username = username ;
115+ return withEnv ( "COCKROACH_USER" , username );
110116 }
111117
112118 @ Override
113119 public CockroachContainer withPassword (String password ) {
114- throw new UnsupportedOperationException (
115- "The CockroachDB docker image does not currently support this - please see https://github.com/cockroachdb/cockroach/issues/19826"
116- );
120+ validateIfVersionSupportsUsernameOrPasswordOrDatabase ( "password" );
121+ this . password = password ;
122+ return withEnv ( "COCKROACH_PASSWORD" , password ). withCommand ( "start-single-node" );
117123 }
118124
119125 @ Override
120126 public CockroachContainer withDatabaseName (final String databaseName ) {
121- throw new UnsupportedOperationException (
122- "The CockroachDB docker image does not currently support this - please see https://github.com/cockroachdb/cockroach/issues/19826"
123- );
127+ validateIfVersionSupportsUsernameOrPasswordOrDatabase ("databaseName" );
128+ this .databaseName = databaseName ;
129+ return withEnv ("COCKROACH_DATABASE" , databaseName );
130+ }
131+
132+ private boolean isVersionGreaterThanOrEqualTo221 (DockerImageName dockerImageName ) {
133+ ComparableVersion version = new ComparableVersion (dockerImageName .getVersionPart ().replaceFirst ("v" , "" ));
134+ return version .isGreaterThanOrEqualTo (FIRST_VERSION_WITH_ENV_VARS_SUPPORT );
135+ }
136+
137+ private void validateIfVersionSupportsUsernameOrPasswordOrDatabase (String parameter ) {
138+ if (!isVersionGreaterThanOrEqualTo221 ) {
139+ throw new UnsupportedOperationException (
140+ String .format ("Setting a %s in not supported in the versions below 22.1.0" , parameter )
141+ );
142+ }
124143 }
125144}
0 commit comments