mirror of
https://github.com/keycloak/keycloak.git
synced 2026-05-07 15:41:29 -05:00
[Test Framework] testcontainers dependency refactor. (#46131)
Signed-off-by: Lukas Hanusovsky <lhanusov@redhat.com>
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
+2
-2
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
-2
@@ -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
-13
@@ -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
|
||||
|
||||
@@ -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
-1
@@ -1,6 +1,6 @@
|
||||
package org.keycloak.testframework.database;
|
||||
|
||||
public class EnterpriseDbDatabaseSupplier extends AbstractDatabaseSupplier {
|
||||
public class EnterpriseDbDatabaseSupplier extends AbstractContainerDatabaseSupplier {
|
||||
|
||||
@Override
|
||||
public String getAlias() {
|
||||
|
||||
@@ -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
-1
@@ -1,6 +1,6 @@
|
||||
package org.keycloak.testframework.database;
|
||||
|
||||
public class MariaDBDatabaseSupplier extends AbstractDatabaseSupplier {
|
||||
public class MariaDBDatabaseSupplier extends AbstractContainerDatabaseSupplier {
|
||||
|
||||
@Override
|
||||
public String getAlias() {
|
||||
|
||||
@@ -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
-1
@@ -1,6 +1,6 @@
|
||||
package org.keycloak.testframework.database;
|
||||
|
||||
public class MSSQLServerDatabaseSupplier extends AbstractDatabaseSupplier {
|
||||
public class MSSQLServerDatabaseSupplier extends AbstractContainerDatabaseSupplier {
|
||||
|
||||
@Override
|
||||
public String getAlias() {
|
||||
|
||||
@@ -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
-1
@@ -1,6 +1,6 @@
|
||||
package org.keycloak.testframework.database;
|
||||
|
||||
public class MySQLDatabaseSupplier extends AbstractDatabaseSupplier {
|
||||
public class MySQLDatabaseSupplier extends AbstractContainerDatabaseSupplier {
|
||||
|
||||
@Override
|
||||
public String getAlias() {
|
||||
|
||||
@@ -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
-1
@@ -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() {
|
||||
|
||||
@@ -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
-1
@@ -1,6 +1,6 @@
|
||||
package org.keycloak.testframework.database;
|
||||
|
||||
public class PostgresDatabaseSupplier extends AbstractDatabaseSupplier {
|
||||
public class PostgresDatabaseSupplier extends AbstractContainerDatabaseSupplier {
|
||||
|
||||
@Override
|
||||
public String getAlias() {
|
||||
|
||||
@@ -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
-1
@@ -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() {
|
||||
|
||||
Executable
+51
@@ -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
-2
@@ -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);
|
||||
}
|
||||
|
||||
+14
@@ -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());
|
||||
}
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
org.keycloak.testframework.infinispan.InfinispanExternalServerTestFrameworkExtension
|
||||
@@ -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>
|
||||
|
||||
Executable
+45
@@ -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>
|
||||
+24
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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());
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user