Skip to content

Commit ca2d159

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

2 files changed

Lines changed: 96 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: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
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+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
import static org.mockito.ArgumentMatchers.any;
14+
import static org.mockito.ArgumentMatchers.anyString;
15+
import static org.mockito.Mockito.mock;
16+
import static org.mockito.Mockito.when;
17+
18+
class JdbcDatabaseContainerCreateConnectionTest {
19+
20+
@Test
21+
void createConnectionMergesCallerInfoIntoDriverProperties() throws Exception {
22+
Driver driver = mock(Driver.class);
23+
Connection connection = mock(Connection.class);
24+
when(driver.connect(anyString(), any(Properties.class))).thenAnswer(invocation -> {
25+
Properties p = invocation.getArgument(1);
26+
assertThat(p.stringPropertyNames()).contains("rewriteBatchedStatements");
27+
assertThat(p.getProperty("rewriteBatchedStatements")).isEqualTo("true");
28+
assertThat(p.getProperty("user")).isEqualTo("u");
29+
assertThat(p.getProperty("password")).isEqualTo("secret");
30+
return connection;
31+
});
32+
33+
TestContainer container = new TestContainer(driver);
34+
Properties info = new Properties();
35+
info.setProperty("rewriteBatchedStatements", "true");
36+
37+
assertThat(container.createConnection("", info)).isSameAs(connection);
38+
}
39+
40+
static class TestContainer extends JdbcDatabaseContainer<TestContainer> {
41+
42+
private final Driver testDriver;
43+
44+
TestContainer(Driver testDriver) {
45+
super(DockerImageName.parse("mysql:5.7"));
46+
this.testDriver = testDriver;
47+
}
48+
49+
@Override
50+
public String getDriverClassName() {
51+
return "ignored";
52+
}
53+
54+
@Override
55+
public String getJdbcUrl() {
56+
return "jdbc:mock://localhost/db";
57+
}
58+
59+
@Override
60+
public String getUsername() {
61+
return "u";
62+
}
63+
64+
@Override
65+
public String getPassword() {
66+
return "secret";
67+
}
68+
69+
@Override
70+
protected String getTestQueryString() {
71+
return "SELECT 1";
72+
}
73+
74+
@Override
75+
public Driver getJdbcDriverInstance() {
76+
return testDriver;
77+
}
78+
79+
@Override
80+
public boolean isRunning() {
81+
return true;
82+
}
83+
84+
@Override
85+
protected Logger logger() {
86+
return mock(Logger.class);
87+
}
88+
89+
@Override
90+
public void setDockerImageName(@NonNull String dockerImageName) {}
91+
}
92+
}

0 commit comments

Comments
 (0)