3131import java .sql .SQLException ;
3232import java .time .Duration ;
3333import java .time .Instant ;
34+ import java .util .Collections ;
35+ import java .util .HashMap ;
36+ import java .util .List ;
37+ import java .util .Map ;
38+ import java .util .StringTokenizer ;
3439import java .util .concurrent .TimeUnit ;
3540import java .util .concurrent .TimeoutException ;
3641import java .util .regex .Matcher ;
@@ -44,6 +49,7 @@ public class RdbConnectionUtils {
4449 public static final String USERNAME = System .getProperty ("rdb.jdbc-user" , "sa" );
4550 public static final String PASSWD = System .getProperty ("rdb.jdbc-passwd" , "" );
4651 public static final String IMG = System .getProperty ("rdb.docker-image" , "" );
52+ public static final Map <String , String > ENV = parseDockerEnv (System .getProperty ("rdb.docker-env" , "" ));
4753
4854 private static final boolean RDB_AVAILABLE ;
4955 private static GenericContainer <?> rdbContainer ;
@@ -67,6 +73,7 @@ public class RdbConnectionUtils {
6773 if (RDB_AVAILABLE ) {
6874 rdbContainer = new GenericContainer <>(DockerImageName .parse (IMG ))
6975 .withPrivilegedMode (true )
76+ .withEnv (ENV )
7077 .withExposedPorts (exposedPort )
7178 .withStartupTimeout (Duration .ofMinutes (15 ));
7279 try {
@@ -148,4 +155,22 @@ private static boolean checkImageAvailability() throws TimeoutException {
148155 private static boolean checkDockerAvailability () {
149156 return DockerClientFactory .instance ().isDockerAvailable ();
150157 }
158+
159+ private static Map <String , String > parseDockerEnv (String raw ) {
160+ if (StringUtils .isEmpty (raw )) {
161+ return Collections .emptyMap ();
162+ }
163+ Map <String , String > result = new HashMap <>();
164+ StringTokenizer envTokenizer = new StringTokenizer (raw , "," );
165+ while (envTokenizer .hasMoreTokens ()) {
166+ String token = envTokenizer .nextToken ().trim ();
167+ StringTokenizer varTokenizer = new StringTokenizer (token , "=" );
168+ if (varTokenizer .countTokens () == 2 ) {
169+ result .put (varTokenizer .nextToken (), varTokenizer .nextToken ());
170+ } else {
171+ LOG .warn ("Ignoring unexpected format of docker container environment variable: {}." , token );
172+ }
173+ }
174+ return result ;
175+ }
151176}
0 commit comments