[Test Framework] testcontainers dependency refactor. (#46131)

Signed-off-by: Lukas Hanusovsky <lhanusov@redhat.com>
This commit is contained in:
Lukas Hanusovsky
2026-02-11 11:07:12 +01:00
committed by GitHub
parent 49240b6eac
commit 8839c831b9
31 changed files with 177 additions and 52 deletions
+12
View File
@@ -57,6 +57,12 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-test-containers</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-db-edb</artifactId>
@@ -105,6 +111,12 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-infinispan-server</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-remote</artifactId>
+1 -1
View File
@@ -18,7 +18,7 @@
<dependencies>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-core</artifactId>
<artifactId>keycloak-test-framework-test-containers</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -25,7 +25,7 @@ import java.util.concurrent.TimeoutException;
import org.keycloak.it.utils.DockerKeycloakDistribution;
import org.keycloak.testframework.clustering.LoadBalancer;
import org.keycloak.testframework.infinispan.CacheType;
import org.keycloak.testframework.logging.JBossLogConsumer;
import org.keycloak.testframework.logging.JBossContainerLogConsumer;
import org.jboss.logging.Logger;
import org.testcontainers.images.RemoteDockerImage;
@@ -123,7 +123,7 @@ public class ClusteredKeycloakServer implements KeycloakServer {
}
private static void configureLogConsumers(DockerKeycloakDistribution container, int index, CountdownLatchLoggingConsumer clusterLatch) {
var logger = new JBossLogConsumer(Logger.getLogger("managed.keycloak." + index));
var logger = new JBossContainerLogConsumer(Logger.getLogger("managed.keycloak." + index));
container.setCustomLogConsumer(logger.andThen(clusterLatch));
}
-14
View File
@@ -73,20 +73,6 @@
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>testcontainers-infinispan</artifactId>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.maven.resolver</groupId>
<artifactId>maven-resolver-util</artifactId>
@@ -19,7 +19,6 @@ import org.keycloak.testframework.http.HttpServerSupplier;
import org.keycloak.testframework.http.SimpleHttpSupplier;
import org.keycloak.testframework.https.CertificatesSupplier;
import org.keycloak.testframework.https.ManagedCertificates;
import org.keycloak.testframework.infinispan.InfinispanExternalServerSupplier;
import org.keycloak.testframework.injection.Supplier;
import org.keycloak.testframework.realm.ClientSupplier;
import org.keycloak.testframework.realm.RealmSupplier;
@@ -52,7 +51,6 @@ public class CoreTestFrameworkExtension implements TestFrameworkExtension {
new AdminEventsSupplier(),
new HttpClientSupplier(),
new HttpServerSupplier(),
new InfinispanExternalServerSupplier(),
new SimpleHttpSupplier(),
new CertificatesSupplier(),
new CryptoHelperSupplier()
@@ -1,14 +1,12 @@
package org.keycloak.testframework.database;
import org.keycloak.testframework.annotations.InjectTestDatabase;
import org.keycloak.testframework.config.Config;
import org.keycloak.testframework.injection.InstanceContext;
import org.keycloak.testframework.injection.LifeCycle;
import org.keycloak.testframework.injection.RequestedInstance;
import org.keycloak.testframework.injection.Supplier;
import org.keycloak.testframework.injection.SupplierHelpers;
import org.keycloak.testframework.injection.SupplierOrder;
import org.keycloak.testframework.server.KeycloakServer;
import org.keycloak.testframework.server.KeycloakServerConfigBuilder;
import org.keycloak.testframework.server.KeycloakServerConfigInterceptor;
@@ -47,17 +45,7 @@ public abstract class AbstractDatabaseSupplier implements Supplier<TestDatabase,
@Override
public KeycloakServerConfigBuilder intercept(KeycloakServerConfigBuilder serverConfig, InstanceContext<TestDatabase, InjectTestDatabase> instanceContext) {
String kcServerType = Config.getSelectedSupplier(KeycloakServer.class);
TestDatabase database = instanceContext.getValue();
// If both KeycloakServer and TestDatabase run in container, we need to configure Keycloak with internal
// url that is accessible within docker network
if ("cluster".equals(kcServerType) &&
database instanceof AbstractContainerTestDatabase containerDatabase) {
return serverConfig.options(containerDatabase.serverConfig(true));
}
return serverConfig.options(database.serverConfig());
return serverConfig.options(instanceContext.getValue().serverConfig());
}
@Override
+1 -1
View File
@@ -34,7 +34,7 @@
<dependencies>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-core</artifactId>
<artifactId>keycloak-test-framework-test-containers</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
@@ -1,6 +1,6 @@
package org.keycloak.testframework.database;
public class EnterpriseDbDatabaseSupplier extends AbstractDatabaseSupplier {
public class EnterpriseDbDatabaseSupplier extends AbstractContainerDatabaseSupplier {
@Override
public String getAlias() {
+1 -1
View File
@@ -34,7 +34,7 @@
<dependencies>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-core</artifactId>
<artifactId>keycloak-test-framework-test-containers</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -1,6 +1,6 @@
package org.keycloak.testframework.database;
public class MariaDBDatabaseSupplier extends AbstractDatabaseSupplier {
public class MariaDBDatabaseSupplier extends AbstractContainerDatabaseSupplier {
@Override
public String getAlias() {
+1 -1
View File
@@ -34,7 +34,7 @@
<dependencies>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-core</artifactId>
<artifactId>keycloak-test-framework-test-containers</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -1,6 +1,6 @@
package org.keycloak.testframework.database;
public class MSSQLServerDatabaseSupplier extends AbstractDatabaseSupplier {
public class MSSQLServerDatabaseSupplier extends AbstractContainerDatabaseSupplier {
@Override
public String getAlias() {
+1 -1
View File
@@ -34,7 +34,7 @@
<dependencies>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-core</artifactId>
<artifactId>keycloak-test-framework-test-containers</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -1,6 +1,6 @@
package org.keycloak.testframework.database;
public class MySQLDatabaseSupplier extends AbstractDatabaseSupplier {
public class MySQLDatabaseSupplier extends AbstractContainerDatabaseSupplier {
@Override
public String getAlias() {
+1 -1
View File
@@ -34,7 +34,7 @@
<dependencies>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-core</artifactId>
<artifactId>keycloak-test-framework-test-containers</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -4,7 +4,7 @@ import org.keycloak.testframework.annotations.InjectTestDatabase;
import org.keycloak.testframework.injection.InstanceContext;
import org.keycloak.testframework.server.KeycloakServerConfigBuilder;
public class OracleDatabaseSupplier extends AbstractDatabaseSupplier {
public class OracleDatabaseSupplier extends AbstractContainerDatabaseSupplier {
@Override
public String getAlias() {
+1 -1
View File
@@ -34,7 +34,7 @@
<dependencies>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-core</artifactId>
<artifactId>keycloak-test-framework-test-containers</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -1,6 +1,6 @@
package org.keycloak.testframework.database;
public class PostgresDatabaseSupplier extends AbstractDatabaseSupplier {
public class PostgresDatabaseSupplier extends AbstractContainerDatabaseSupplier {
@Override
public String getAlias() {
+1 -1
View File
@@ -34,7 +34,7 @@
<dependencies>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-core</artifactId>
<artifactId>keycloak-test-framework-test-containers</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -5,7 +5,7 @@ import org.keycloak.testframework.annotations.InjectTestDatabase;
import org.keycloak.testframework.injection.InstanceContext;
import org.keycloak.testframework.server.KeycloakServerConfigBuilder;
public class TiDBDatabaseSupplier extends AbstractDatabaseSupplier {
public class TiDBDatabaseSupplier extends AbstractContainerDatabaseSupplier {
@Override
public String getAlias() {
+51
View File
@@ -0,0 +1,51 @@
<?xml version="1.0"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-test-framework-parent</artifactId>
<groupId>org.keycloak.testframework</groupId>
<version>999.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-test-framework-infinispan-server</artifactId>
<name>Keycloak Test Framework - Infinispan Server Support</name>
<packaging>jar</packaging>
<description>Infinispan Server Support for Keycloak Test Framework</description>
<dependencies>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-test-containers</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>testcontainers-infinispan</artifactId>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
@@ -2,7 +2,7 @@ package org.keycloak.testframework.infinispan;
import java.util.Map;
import org.keycloak.testframework.logging.JBossLogConsumer;
import org.keycloak.testframework.logging.JBossContainerLogConsumer;
import org.keycloak.testframework.util.ContainerImages;
import org.infinispan.testcontainers.InfinispanContainer;
@@ -23,7 +23,7 @@ public class InfinispanExternalServer extends InfinispanContainer implements Inf
super(dockerImageName);
withUser(USER);
withPassword(PASSWORD);
withLogConsumer(new JBossLogConsumer(Logger.getLogger("managed.infinispan")));
withLogConsumer(new JBossContainerLogConsumer(Logger.getLogger("managed.infinispan")));
addFixedExposedPort(11222, 11222);
}
@@ -0,0 +1,14 @@
package org.keycloak.testframework.infinispan;
import java.util.List;
import org.keycloak.testframework.TestFrameworkExtension;
import org.keycloak.testframework.injection.Supplier;
public class InfinispanExternalServerTestFrameworkExtension implements TestFrameworkExtension {
@Override
public List<Supplier<?, ?>> suppliers() {
return List.of(new InfinispanExternalServerSupplier());
}
}
@@ -0,0 +1 @@
org.keycloak.testframework.infinispan.InfinispanExternalServerTestFrameworkExtension
+2
View File
@@ -86,6 +86,7 @@
<module>bom</module>
<module>core</module>
<module>junit5-config</module>
<module>test-containers</module>
<module>db-edb</module>
<module>db-mariadb</module>
<module>db-mssql</module>
@@ -95,6 +96,7 @@
<module>db-tidb</module>
<module>email-server</module>
<module>examples</module>
<module>infinispan-server</module>
<module>oauth</module>
<module>remote</module>
<module>remote-providers</module>
+45
View File
@@ -0,0 +1,45 @@
<?xml version="1.0"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>keycloak-test-framework-parent</artifactId>
<groupId>org.keycloak.testframework</groupId>
<version>999.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>keycloak-test-framework-test-containers</artifactId>
<name>Keycloak Test Framework - Test Containers Support</name>
<packaging>jar</packaging>
<description>Test Containers Support for Keycloak Test Framework</description>
<dependencies>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers-jdbc</artifactId>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,24 @@
package org.keycloak.testframework.database;
import org.keycloak.testframework.annotations.InjectTestDatabase;
import org.keycloak.testframework.config.Config;
import org.keycloak.testframework.injection.InstanceContext;
import org.keycloak.testframework.server.KeycloakServer;
import org.keycloak.testframework.server.KeycloakServerConfigBuilder;
public abstract class AbstractContainerDatabaseSupplier extends AbstractDatabaseSupplier {
@Override
public KeycloakServerConfigBuilder intercept(KeycloakServerConfigBuilder serverConfig, InstanceContext<TestDatabase, InjectTestDatabase> instanceContext) {
serverConfig = super.intercept(serverConfig, instanceContext);
// If both KeycloakServer and TestDatabase run in container, we need to configure Keycloak with internal url that is accessible within docker network.
// Right now it's supported by the cluster server mode only.
if ("cluster".equals(Config.getSelectedSupplier(KeycloakServer.class)) &&
instanceContext.getValue() instanceof AbstractContainerTestDatabase containerDatabase) {
return serverConfig.options(containerDatabase.serverConfig(true));
} else {
return serverConfig;
}
}
}
@@ -6,7 +6,7 @@ import java.util.List;
import java.util.Map;
import org.keycloak.testframework.config.Config;
import org.keycloak.testframework.logging.JBossLogConsumer;
import org.keycloak.testframework.logging.JBossContainerLogConsumer;
import org.jboss.logging.Logger;
import org.testcontainers.containers.Container;
@@ -33,7 +33,7 @@ public abstract class AbstractContainerTestDatabase implements TestDatabase {
container = createContainer();
container = container.withStartupTimeout(Duration.ofMinutes(10))
.withLogConsumer(new JBossLogConsumer(Logger.getLogger("managed.db." + getDatabaseVendor())))
.withLogConsumer(new JBossContainerLogConsumer(Logger.getLogger("managed.db." + getDatabaseVendor())))
.withReuse(reuse)
.withInitScript(config.getInitScript());
withDatabaseAndUser(getDatabase(), getUsername(), getPassword());
@@ -5,11 +5,11 @@ import java.util.function.Consumer;
import org.jboss.logging.Logger;
import org.testcontainers.containers.output.OutputFrame;
public class JBossLogConsumer implements Consumer<OutputFrame> {
public class JBossContainerLogConsumer implements Consumer<OutputFrame> {
private final Logger logger;
public JBossLogConsumer(Logger logger) {
public JBossContainerLogConsumer(Logger logger) {
this.logger = logger;
}
+4
View File
@@ -93,6 +93,10 @@
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-email-server</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-infinispan-server</artifactId>
</dependency>
<dependency>
<groupId>org.keycloak.testframework</groupId>
<artifactId>keycloak-test-framework-oauth</artifactId>