Skip to content

Commit 304150d

Browse files
Merge caller JDBC Properties in JdbcDatabaseContainer#createConnection
Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 3878311 commit 304150d

2 files changed

Lines changed: 102 additions & 1 deletion

File tree

modules/jdbc/src/main/java/org/testcontainers/containers/JdbcDatabaseContainer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,10 @@ public Connection createConnection(String queryString) throws SQLException, NoDr
263263
*/
264264
public Connection createConnection(String queryString, Properties info)
265265
throws SQLException, NoDriverFoundException {
266-
Properties properties = new Properties(info);
266+
Properties properties = new Properties();
267+
if (info != null) {
268+
properties.putAll(info);
269+
}
267270
properties.put("user", this.getUsername());
268271
properties.put("password", this.getPassword());
269272
final String url = constructUrlForConnection(queryString);
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package org.testcontainers.containers;
2+
3+
import lombok.NonNull;
4+
import org.junit.jupiter.api.Test;
5+
import org.slf4j.Logger;
6+
import org.testcontainers.utility.DockerImageName;
7+
8+
import java.sql.Connection;
9+
import java.sql.Driver;
10+
import java.util.Properties;
11+
import java.util.stream.Collectors;
12+
13+
import static org.assertj.core.api.Assertions.assertThat;
14+
import static org.mockito.ArgumentMatchers.any;
15+
import static org.mockito.ArgumentMatchers.anyString;
16+
import static org.mockito.Mockito.mock;
17+
import static org.mockito.Mockito.when;
18+
19+
class JdbcDatabaseContainerCreateConnectionTest {
20+
21+
@Test
22+
void createConnectionMergesCallerInfoIntoDriverProperties() throws Exception {
23+
Driver driver = mock(Driver.class);
24+
Connection connection = mock(Connection.class);
25+
when(driver.connect(anyString(), any(Properties.class))).thenAnswer(invocation -> {
26+
Properties p = invocation.getArgument(1);
27+
assertThat(
28+
p.entrySet()
29+
.stream()
30+
.map(e -> (String) e.getKey())
31+
.collect(Collectors.toSet())
32+
).contains("rewriteBatchedStatements");
33+
assertThat(p.getProperty("rewriteBatchedStatements")).isEqualTo("true");
34+
assertThat(p.getProperty("user")).isEqualTo("u");
35+
assertThat(p.getProperty("password")).isEqualTo("secret");
36+
return connection;
37+
});
38+
39+
TestContainer container = new TestContainer(driver);
40+
Properties info = new Properties();
41+
info.setProperty("rewriteBatchedStatements", "true");
42+
43+
assertThat(container.createConnection("", info)).isSameAs(connection);
44+
}
45+
46+
static class TestContainer extends JdbcDatabaseContainer<TestContainer> {
47+
48+
private final Driver testDriver;
49+
50+
TestContainer(Driver testDriver) {
51+
super(DockerImageName.parse("mysql:5.7"));
52+
this.testDriver = testDriver;
53+
}
54+
55+
@Override
56+
public String getDriverClassName() {
57+
return "ignored";
58+
}
59+
60+
@Override
61+
public String getJdbcUrl() {
62+
return "jdbc:mock://localhost/db";
63+
}
64+
65+
@Override
66+
public String getUsername() {
67+
return "u";
68+
}
69+
70+
@Override
71+
public String getPassword() {
72+
return "secret";
73+
}
74+
75+
@Override
76+
protected String getTestQueryString() {
77+
return "SELECT 1";
78+
}
79+
80+
@Override
81+
public Driver getJdbcDriverInstance() {
82+
return testDriver;
83+
}
84+
85+
@Override
86+
public boolean isRunning() {
87+
return true;
88+
}
89+
90+
@Override
91+
protected Logger logger() {
92+
return mock(Logger.class);
93+
}
94+
95+
@Override
96+
public void setDockerImageName(@NonNull String dockerImageName) {}
97+
}
98+
}

0 commit comments

Comments
 (0)