Skip to content

Commit

Permalink
Refactoring: test for custom container now based on SystemUnderTest c…
Browse files Browse the repository at this point in the history
…lass and configured logging
  • Loading branch information
Edwin Steiner committed Sep 9, 2024
1 parent 3557e64 commit e9bc41a
Show file tree
Hide file tree
Showing 6 changed files with 198 additions and 86 deletions.
14 changes: 13 additions & 1 deletion container/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,19 @@
<version>1.3.2</version>
<scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.jboss.logmanager/jboss-logmanager -->
<dependency>
<groupId>org.jboss.logmanager</groupId>
<artifactId>jboss-logmanager</artifactId>
<version>3.0.6.Final</version>
<scope>test</scope>
</dependency>
<!-- logging adapter: https://quarkus.io/guides/logging#add-a-logging-adapter-to-your-application -->
<dependency>
<groupId>org.jboss.slf4j</groupId>
<artifactId>slf4j-jboss-logmanager</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down
48 changes: 48 additions & 0 deletions container/src/test/java/KeycloakCustomContainerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import org.junit.jupiter.api.*;
import org.keycloak.admin.client.Keycloak;
import org.keycloak.admin.client.KeycloakBuilder;
import org.keycloak.representations.idm.RealmRepresentation;
import org.testcontainers.junit.jupiter.Testcontainers;
import sut.SystemUnderTest;

import java.util.Optional;

@Tag("integration") // to run in verify phase of mvn
@Testcontainers
class KeycloakCustomContainerTest {

private static SystemUnderTest sut;

@BeforeAll
static void beforeAll() {
sut = SystemUnderTest.start();
}

protected SystemUnderTest sut() {
return sut;
}

@AfterAll
static void afterAll() {
sut.stop();
}

@Test
void test_startup() {
Assertions.assertTrue(sut().keycloak.isRunning());
}

@Test
void test_import_realm() {
Keycloak keycloakAdminClient = KeycloakBuilder.builder()
.serverUrl(sut().keycloak.getAuthServerUrl())
.realm("master")
.clientId("admin-cli")
.username(sut().keycloak.getAdminUsername())
.password(sut().keycloak.getAdminPassword())
.build();

Optional<RealmRepresentation> example1 = keycloakAdminClient.realms().findAll().stream().filter(realmRepresentation -> realmRepresentation.getRealm().equals("example1")).findFirst();
Assertions.assertTrue(example1.isPresent(), "Realm `example1` should exist. Realm import via keycloak-config-cli failed.");
}
}
74 changes: 0 additions & 74 deletions container/src/test/java/KeycloakCustomTestIT.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package utils;
package sut;

import dasniko.testcontainers.keycloak.ExtendableKeycloakContainer;
import org.slf4j.Logger;
Expand All @@ -11,17 +11,18 @@

public class KeycloakCustomContainer extends ExtendableKeycloakContainer<KeycloakCustomContainer> {

private final WaitStrategy waitStrategy;
private final long startupTimeout;
public static final String DEFAULT_DOCKER_IMAGE_NAME = "docker-registry.inventage.com:10094/com.inventage.keycloak.custom.container:latest";

private static final String DEFAULT_WAIT_LOG_REGEX = ".*KEYCLOAK SETUP FINISHED.*";
private static final long DEFAULT_STARTUP_TIMEOUT = 3;

private static final Logger LOGGER = LoggerFactory.getLogger(KeycloakCustomContainer.class);

public KeycloakCustomContainer(String dockerImageName, WaitStrategy waitStrategy, long startupTimeout) {
super(dockerImageName);
this.waitStrategy = waitStrategy;
this.startupTimeout = startupTimeout;
private final WaitStrategy waitStrategy;
private final long startupTimeout;


public KeycloakCustomContainer() {
this(DEFAULT_DOCKER_IMAGE_NAME);
}

public KeycloakCustomContainer(String dockerImageName){
Expand All @@ -40,5 +41,4 @@ protected void configure() {
setWaitStrategy(this.waitStrategy);
}


}
100 changes: 100 additions & 0 deletions container/src/test/java/sut/SystemUnderTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package sut;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testcontainers.containers.Network;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.containers.output.Slf4jLogConsumer;

import java.util.Map;

public class SystemUnderTest {

private static final Logger LOGGER = LoggerFactory.getLogger(SystemUnderTest.class);
private static final String DOCKER_IMAGE_NAME_POSTGRES = "postgres:16-alpine";
private static final String NETWORK_ALIAS_POSTGRES = "postgres";
private static final String DATABASE_NAME_POSTGRES = "postgres";
private String runningKeycloakBaseUrl;

private Network network;

public PostgreSQLContainer postgres;
public KeycloakCustomContainer keycloak;

public SystemUnderTest(String runningKeycloakBaseUrl) {
this.runningKeycloakBaseUrl = runningKeycloakBaseUrl;
}

private SystemUnderTest(Network network) {
this.network = network;
}

public String getBaseUrl() {
return runningKeycloakBaseUrl != null ? runningKeycloakBaseUrl : keycloak.getAuthServerUrl();
}

public static SystemUnderTest start() {
final SystemUnderTest sut = new SystemUnderTest(Network.newNetwork());
sut.startComponents();
return sut;
}

private void startComponents() {
startPostgres(network);
startKeycloak(postgres);
}

private PostgreSQLContainer startPostgres(Network network) {
postgres = new PostgreSQLContainer<>(DOCKER_IMAGE_NAME_POSTGRES)
.withLogConsumer(new Slf4jLogConsumer(LOGGER))
.withNetwork(network)
.withNetworkAliases(NETWORK_ALIAS_POSTGRES)
.withDatabaseName(DATABASE_NAME_POSTGRES)
.withUsername("postgres")
.withPassword("postgres");
try {
postgres.start();
return postgres;
} catch (Exception e) {
System.err.println(postgres.getLogs());
throw e;
}
}

private KeycloakCustomContainer startKeycloak(PostgreSQLContainer postgres) {
final String jdbcUrl = String.format("jdbc:postgresql://%s:5432/%s?loggerLevel=OFF", NETWORK_ALIAS_POSTGRES, DATABASE_NAME_POSTGRES);
keycloak = new KeycloakCustomContainer()
.withLogConsumer(new Slf4jLogConsumer(LOGGER))
.withNetwork(network)
.withEnv(Map.of("KC_DB", "postgres",
"KC_DB_USERNAME" , postgres.getUsername(),
"KC_DB_PASSWORD", postgres.getPassword(),
"KC_DB_URL", jdbcUrl,
"KC_LOG_LEVEL", "info"));
try {
keycloak.start();
return keycloak;
} catch (Exception e) {
System.err.println(keycloak.getLogs());
throw e;
}
}

public void stop() {
stopComponents();
}

private void stopComponents() {
stopKeycloak();
stopPostgres();
}

private void stopKeycloak() {
keycloak.start();
}

private void stopPostgres() {
postgres.stop();
}

}
30 changes: 28 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -155,12 +155,38 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.1</version>
<version>3.5.0</version>
<configuration>
<excludedGroups>integration</excludedGroups>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<!--suppress UnresolvedMavenProperty -->
<maven.home>${maven.home}</maven.home>
</systemPropertyVariables>
</configuration>
</plugin>
<!-- integration testing: https://maven.apache.org/surefire/maven-failsafe-plugin/ -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${failsafe-plugin.version}</version>
<configuration>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
</systemPropertyVariables>
<includes>
<include>**/*</include>
</includes>
<groups>integration</groups> <!-- for tests annotated with `@Tag("integration")` -->
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Expand All @@ -186,7 +212,7 @@
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.40.1</version>
<version>0.45.0</version>
<configuration>
<images>
<image>
Expand Down

0 comments on commit e9bc41a

Please sign in to comment.