Skip to content

Commit af38cb6

Browse files
committed
Fix NullPointerException in ContainerLessJdbcDelegate when using ScriptUtils
1 parent 6a02d00 commit af38cb6

File tree

3 files changed

+58
-12
lines changed

3 files changed

+58
-12
lines changed

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,23 @@ protected Statement createNewConnection() {
3333
throw new ConnectionCreationException("Could create JDBC statement", e);
3434
}
3535
}
36+
37+
@Override
38+
protected void closeConnectionQuietly(Statement statement) {
39+
if (statement != null) {
40+
try {
41+
statement.close();
42+
} catch (Exception e) {
43+
log.error("Could not close JDBC connection", e);
44+
}
45+
}
46+
47+
if (connection != null) {
48+
try {
49+
connection.close();
50+
} catch (Exception e) {
51+
log.error("Could not close JDBC connection", e);
52+
}
53+
}
54+
}
3655
}

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,25 +40,23 @@ protected Statement createNewConnection() {
4040

4141
@Override
4242
public void execute(
43-
String statement,
44-
String scriptPath,
45-
int lineNumber,
46-
boolean continueOnError,
47-
boolean ignoreFailedDrops
48-
) {
43+
String statement,
44+
String scriptPath,
45+
int lineNumber,
46+
boolean continueOnError,
47+
boolean ignoreFailedDrops) {
4948
try {
5049
boolean rowsAffected = getConnection().execute(statement);
5150
log.debug("{} returned as updateCount for SQL: {}", rowsAffected, statement);
5251
} catch (SQLException ex) {
5352
boolean dropStatement = statement.trim().toLowerCase().startsWith("drop");
5453
if (continueOnError || (dropStatement && ignoreFailedDrops)) {
5554
log.debug(
56-
"Failed to execute SQL script statement at line {} of resource {}: {}",
57-
lineNumber,
58-
scriptPath,
59-
statement,
60-
ex
61-
);
55+
"Failed to execute SQL script statement at line {} of resource {}: {}",
56+
lineNumber,
57+
scriptPath,
58+
statement,
59+
ex);
6260
} else {
6361
throw new ScriptUtils.ScriptStatementFailedException(statement, lineNumber, scriptPath, ex);
6462
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.testcontainers.jdbc;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.sql.Connection;
6+
import java.sql.Statement;
7+
8+
import static org.assertj.core.api.Assertions.assertThatCode;
9+
import static org.mockito.Mockito.mock;
10+
import static org.mockito.Mockito.verify;
11+
import static org.mockito.Mockito.when;
12+
13+
class ContainerLessJdbcDelegateTest {
14+
15+
@Test
16+
void closeClosesStatementAndConnectionQuietly() throws Exception {
17+
Connection connection = mock(Connection.class);
18+
Statement statement = mock(Statement.class);
19+
when(connection.createStatement()).thenReturn(statement);
20+
21+
ContainerLessJdbcDelegate delegate = new ContainerLessJdbcDelegate(connection);
22+
delegate.execute("select 1", "test.sql", 1, false, false);
23+
24+
assertThatCode(delegate::close).doesNotThrowAnyException();
25+
26+
verify(statement).close();
27+
verify(connection).close();
28+
}
29+
}

0 commit comments

Comments
 (0)