Skip to content

Commit fd4b577

Browse files
committed
feat: improve sql audit store test
1 parent 60af2a4 commit fd4b577

File tree

1 file changed

+42
-24
lines changed

1 file changed

+42
-24
lines changed

community/flamingock-auditstore-sql/src/test/java/io/flamingock/community/sql/SqlAuditStoreTest.java

Lines changed: 42 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@
2525
import io.flamingock.internal.util.Trio;
2626
import io.flamingock.internal.util.constants.CommunityPersistenceConstants;
2727
import io.flamingock.targetsystem.sql.SqlTargetSystem;
28+
import org.junit.jupiter.api.AfterAll;
29+
import org.junit.jupiter.api.BeforeAll;
2830
import org.junit.jupiter.api.DisplayName;
31+
import org.junit.jupiter.api.TestInstance;
2932
import org.junit.jupiter.params.ParameterizedTest;
3033
import org.junit.jupiter.params.provider.Arguments;
3134
import org.junit.jupiter.params.provider.MethodSource;
@@ -39,13 +42,19 @@
3942
import javax.sql.DataSource;
4043
import java.sql.*;
4144
import java.util.Collections;
45+
import java.util.HashMap;
46+
import java.util.Map;
4247
import java.util.stream.Stream;
4348

4449
import static org.junit.jupiter.api.Assertions.*;
4550

51+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
4652
@Testcontainers
4753
class SqlAuditStoreTest {
4854

55+
private static final Map<String, JdbcDatabaseContainer<?>> containers = new HashMap<>();
56+
private static final Map<String, DataSource> dataSources = new HashMap<>();
57+
4958
static Stream<Arguments> dialectProvider() {
5059
return Stream.of(
5160
Arguments.of(SqlDialect.MYSQL, "mysql"),
@@ -58,6 +67,30 @@ static Stream<Arguments> dialectProvider() {
5867
);
5968
}
6069

70+
@BeforeAll
71+
void startContainers() {
72+
for (Arguments arg : dialectProvider().toArray(Arguments[]::new)) {
73+
SqlDialect dialect = (SqlDialect) arg.get()[0];
74+
String dialectName = (String) arg.get()[1];
75+
if (!"h2".equals(dialectName) && !"sqlite".equals(dialectName)) {
76+
JdbcDatabaseContainer<?> container = SqlAuditTestHelper.createContainer(dialectName);
77+
container.start();
78+
containers.put(dialectName, container);
79+
dataSources.put(dialectName, SqlAuditTestHelper.createDataSource(container));
80+
}
81+
}
82+
}
83+
84+
@AfterAll
85+
void stopContainers() {
86+
containers.values().forEach(JdbcDatabaseContainer::stop);
87+
dataSources.values().forEach(ds -> {
88+
if (ds instanceof HikariDataSource) {
89+
((HikariDataSource) ds).close();
90+
}
91+
});
92+
}
93+
6194
private TestContext setupTest(SqlDialect sqlDialect, String dialectName) throws SQLException {
6295
if ("h2".equals(dialectName)) {
6396
HikariConfig config = new HikariConfig();
@@ -109,15 +142,6 @@ private TestContext setupTest(SqlDialect sqlDialect, String dialectName) throws
109142
return new TestContext(dataSource, container, sqlDialect);
110143
}
111144

112-
private void tearDown(TestContext context) throws SQLException {
113-
if (context.dataSource instanceof HikariDataSource) {
114-
((HikariDataSource) context.dataSource).close();
115-
}
116-
if (context.container != null) {
117-
context.container.stop();
118-
}
119-
}
120-
121145
private JdbcDatabaseContainer<?> createContainer(String dialectName) {
122146
switch (dialectName) {
123147
case "mysql":
@@ -263,8 +287,8 @@ private Class<?>[] getChangeClasses(String dialectName, String scenario) {
263287
@DisplayName("When standalone runs the driver should persist the audit logs and the test data")
264288
void happyPathWithMockedPipeline(SqlDialect sqlDialect, String dialectName) throws Exception {
265289
TestContext context = setupTest(sqlDialect, dialectName);
266-
try {
267-
try (MockedStatic<Deserializer> mocked = Mockito.mockStatic(Deserializer.class)) {
290+
291+
try (MockedStatic<Deserializer> mocked = Mockito.mockStatic(Deserializer.class)) {
268292
Class<?>[] changeClasses = getChangeClasses(dialectName, "happyPath");
269293

270294
mocked.when(Deserializer::readPreviewPipelineFromFile).thenReturn(PipelineTestHelper.getPreviewPipeline(
@@ -329,18 +353,16 @@ void happyPathWithMockedPipeline(SqlDialect sqlDialect, String dialectName) thro
329353
assertEquals("Jorge", rs.getString("name"));
330354
}
331355
}
332-
} finally {
333-
tearDown(context);
334-
}
356+
335357
}
336358

337359
@ParameterizedTest
338360
@MethodSource("dialectProvider")
339361
@DisplayName("When standalone runs the driver and execution fails (with rollback method) should persist all the audit logs up to the failed one (ROLLED_BACK)")
340362
void failedWithRollback(SqlDialect sqlDialect, String dialectName) throws Exception {
341363
TestContext context = setupTest(sqlDialect, dialectName);
342-
try {
343-
try (MockedStatic<Deserializer> mocked = Mockito.mockStatic(Deserializer.class)) {
364+
365+
try (MockedStatic<Deserializer> mocked = Mockito.mockStatic(Deserializer.class)) {
344366
Class<?>[] changeClasses = getChangeClasses(dialectName, "failedWithRollback");
345367

346368
mocked.when(Deserializer::readPreviewPipelineFromFile).thenReturn(PipelineTestHelper.getPreviewPipeline(
@@ -418,18 +440,16 @@ void failedWithRollback(SqlDialect sqlDialect, String dialectName) throws Except
418440
}
419441
}
420442
}
421-
} finally {
422-
tearDown(context);
423-
}
443+
424444
}
425445

426446
@ParameterizedTest
427447
@MethodSource("dialectProvider")
428448
@DisplayName("When standalone runs the driver and execution fails (without rollback method) should persist all the audit logs up to the failed one (FAILED)")
429449
void failedWithoutRollback(SqlDialect sqlDialect, String dialectName) throws Exception {
430450
TestContext context = setupTest(sqlDialect, dialectName);
431-
try {
432-
try (MockedStatic<Deserializer> mocked = Mockito.mockStatic(Deserializer.class)) {
451+
452+
try (MockedStatic<Deserializer> mocked = Mockito.mockStatic(Deserializer.class)) {
433453
Class<?>[] changeClasses = getChangeClasses(dialectName, "failedWithoutRollback");
434454

435455
mocked.when(Deserializer::readPreviewPipelineFromFile).thenReturn(PipelineTestHelper.getPreviewPipeline(
@@ -490,9 +510,7 @@ void failedWithoutRollback(SqlDialect sqlDialect, String dialectName) throws Exc
490510
SqlAuditTestHelper.verifyIndexExists(context);
491511
verifyPartialDataState(context);
492512
}
493-
} finally {
494-
tearDown(context);
495-
}
513+
496514
}
497515

498516
private void verifyPartialDataState(TestContext context) throws SQLException {

0 commit comments

Comments
 (0)