Skip to content

Commit d95abae

Browse files
committed
Add tests for TC_DAEMON parameter
1 parent 27d7ef7 commit d95abae

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

modules/jdbc-test/src/test/java/org/testcontainers/jdbc/JDBCDriverTest.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.junit.runner.RunWith;
1010
import org.junit.runners.Parameterized;
1111
import org.junit.runners.Parameterized.Parameter;
12+
import org.testcontainers.containers.JdbcDatabaseContainer;
1213

1314
import java.sql.Connection;
1415
import java.sql.ResultSet;
@@ -18,6 +19,8 @@
1819
import static java.util.Arrays.asList;
1920
import static org.junit.Assume.assumeFalse;
2021
import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals;
22+
import static org.rnorth.visibleassertions.VisibleAssertions.assertNotNull;
23+
import static org.rnorth.visibleassertions.VisibleAssertions.assertNull;
2124
import static org.rnorth.visibleassertions.VisibleAssertions.assertTrue;
2225

2326
@RunWith(Parameterized.class)
@@ -32,6 +35,7 @@ public class JDBCDriverTest {
3235
@Parameter(3)
3336
public boolean performTestForCustomIniFile;
3437

38+
3539
@Parameterized.Parameters(name = "{index} - {0}")
3640
public static Iterable<Object[]> data() {
3741
return asList(
@@ -48,7 +52,7 @@ public static Iterable<Object[]> data() {
4852
{"jdbc:tc:mariadb://hostname/databasename?TC_INITSCRIPT=somepath/init_mariadb.sql", true, false, false},
4953
{"jdbc:tc:mariadb://hostname/databasename?TC_INITFUNCTION=org.testcontainers.jdbc.JDBCDriverTest::sampleInitFunction", true, false, false},
5054
{"jdbc:tc:mysql:5.6://hostname/databasename?TC_MY_CNF=somepath/mysql_conf_override", false, false, true},
51-
{"jdbc:tc:mariadb:10.1.16://hostname/databasename?TC_MY_CNF=somepath/mariadb_conf_override", false, false, true}
55+
{"jdbc:tc:mariadb:10.1.16://hostname/databasename?TC_MY_CNF=somepath/mariadb_conf_override", false, false, true},
5256
});
5357
}
5458

@@ -84,6 +88,27 @@ public void test() throws SQLException {
8488
}
8589
}
8690

91+
@Test
92+
public void shouldStopContainerWhenAllConnectionsClosed() throws SQLException {
93+
final String jdbcUrl = "jdbc:tc:postgresql://hostname/databasename";
94+
95+
performSimpleTest(jdbcUrl);
96+
97+
JdbcDatabaseContainer<?> container = ContainerDatabaseDriver.getContainer(jdbcUrl);
98+
assertNull("Database container instance is null as expected", container);
99+
}
100+
101+
@Test
102+
public void shouldNotStopDaemonContainerWhenAllConnectionsClosed() throws SQLException {
103+
final String jdbcUrl = "jdbc:tc:postgresql://hostname/databasename?TC_DAEMON=true";
104+
105+
performSimpleTest(jdbcUrl);
106+
107+
JdbcDatabaseContainer<?> container = ContainerDatabaseDriver.getContainer(jdbcUrl);
108+
assertNotNull("Database container instance is not null as expected", container);
109+
assertTrue("Database container is running as expected", container.isRunning());
110+
}
111+
87112
private void performSimpleTest(String jdbcUrl) throws SQLException {
88113
try (HikariDataSource dataSource = getDataSource(jdbcUrl, 1)) {
89114
boolean result = new QueryRunner(dataSource).query("SELECT 1", rs -> {

modules/jdbc/src/main/java/org/testcontainers/jdbc/ContainerDatabaseDriver.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.testcontainers.jdbc;
22

3+
import com.google.common.annotations.VisibleForTesting;
34
import com.google.common.base.Charsets;
45
import com.google.common.io.Resources;
56
import org.slf4j.LoggerFactory;
@@ -317,4 +318,16 @@ public static void killContainer(String jdbcUrl) {
317318
}
318319
}
319320
}
321+
322+
/**
323+
* Utility method to get an instance of a database container given its JDBC URL.
324+
* @param jdbcUrl the JDBC URL of the container instance to get
325+
* @return an instance of database container or <code>null</code> if no container associated with JDBC URL
326+
*/
327+
@VisibleForTesting
328+
public static JdbcDatabaseContainer getContainer(String jdbcUrl) {
329+
synchronized (jdbcUrlContainerCache) {
330+
return jdbcUrlContainerCache.get(jdbcUrl);
331+
}
332+
}
320333
}

0 commit comments

Comments
 (0)