44
55import com .github .tomakehurst .wiremock .WireMockServer ;
66import io .restassured .RestAssured ;
7+ import org .junit .jupiter .api .AfterEach ;
78import org .slf4j .LoggerFactory ;
89import org .testcontainers .Testcontainers ;
910import org .testcontainers .containers .GenericContainer ;
1415import org .testcontainers .lifecycle .Startable ;
1516import org .testcontainers .utility .MountableFile ;
1617
17- abstract class AbstractContainerBaseTest {
18+ abstract class DefaultContainerStarterTest {
1819
1920 private static final GenericContainer <?> APP ;
2021 private static final GenericContainer <?> FLYWAY ;
2122 private static final GenericContainer <?> MYSQL_CONTAINER ;
23+ private static final Network NETWORK = Network .newNetwork ();
2224 protected static final WireMockServer MOCK_SERVER ;
2325
26+ /* Containers are initialized in static block to create only once in test execution */
2427 static {
25- final var network = Network .newNetwork ();
26-
2728 MOCK_SERVER = new WireMockServer (wireMockConfig ().dynamicPort ());
2829 MOCK_SERVER .start ();
2930 exposeHostMachinePortToContainersForApiIntegrations ();
3031
31- MYSQL_CONTAINER = buildMySqlContainer (network );
32+ MYSQL_CONTAINER = buildMySqlContainer ();
3233 MYSQL_CONTAINER .start ();
3334
34- FLYWAY = buildFlywayContainer (network , MYSQL_CONTAINER );
35+ FLYWAY = buildFlywayContainer (MYSQL_CONTAINER );
3536 FLYWAY .start ();
3637
37- APP = buildAppContainer (network , MYSQL_CONTAINER , FLYWAY );
38+ APP = buildAppContainer (MYSQL_CONTAINER , FLYWAY );
3839 APP .start ();
3940
4041 initRestAssured ();
4142 }
4243
43- private static GenericContainer <?> buildMySqlContainer (final Network network ) {
44+ private static GenericContainer <?> buildMySqlContainer () {
4445 return new MySQLContainer <>("mysql:5.7.22" )
45- .withNetwork (network )
46+ .withNetwork (NETWORK )
4647 .withNetworkAliases ("testdb" );
4748 }
4849
49- private static GenericContainer <?> buildFlywayContainer (final Network network , final Startable ... dependsOn ) {
50+ private static GenericContainer <?> buildFlywayContainer (final Startable ... dependsOn ) {
5051 return new GenericContainer <>("flyway/flyway" )
5152 .dependsOn (dependsOn )
52- .withNetwork (network )
53+ .withNetwork (NETWORK )
5354 .withCopyFileToContainer (MountableFile .forHostPath ("../resources/flyway/db" ), "/flyway/sql" )
5455 .withCommand ("-url=jdbc:mysql://testdb?useSSL=false -schemas=test -user=test -password=test -connectRetries=60 migrate" )
5556 .waitingFor (Wait .forLogMessage ("(?s).*No migration necessary(?s).*|(?s).*Successfully applied(?s).*" , 1 ))
5657 .withLogConsumer (new Slf4jLogConsumer (LoggerFactory .getLogger ("FLYWAY" )));
5758 }
5859
59- private static GenericContainer <?> buildAppContainer (final Network network , final Startable ... dependsOn ) {
60+ private static GenericContainer <?> buildAppContainer (final Startable ... dependsOn ) {
6061 return new GenericContainer <>("app-test:integration" )
6162 .dependsOn (dependsOn )
62- .withNetwork (network )
63+ .withNetwork (NETWORK )
6364 .withEnv ("RANDOM_DATA_API_URL" , "http://host.testcontainers.internal:" + MOCK_SERVER .port ())
6465 .withEnv ("MYSQL_USER" , "test" )
6566 .withEnv ("MYSQL_PASSWORD" , "test" )
@@ -80,4 +81,10 @@ private static void exposeHostMachinePortToContainersForApiIntegrations() {
8081 Testcontainers .exposeHostPorts (MOCK_SERVER .port ());
8182 }
8283
84+ @ AfterEach
85+ void tearDown () {
86+ MOCK_SERVER .resetAll ();
87+ /* add here others resets needed after each test */
88+ }
89+
8390}
0 commit comments