mirror of
https://github.com/keycloak/keycloak.git
synced 2026-01-05 22:39:52 -06:00
Add clustering tests to new test framework
Closes #39962 Signed-off-by: Michal Hajas <mhajas@redhat.com> Co-authored-by: Pedro Ruivo <pruivo@redhat.com>
This commit is contained in:
@@ -53,9 +53,13 @@ public abstract class AbstractContainerTestDatabase implements TestDatabase {
|
||||
|
||||
@Override
|
||||
public Map<String, String> serverConfig() {
|
||||
return serverConfig(false);
|
||||
}
|
||||
|
||||
public Map<String, String> serverConfig(boolean internal) {
|
||||
return Map.of(
|
||||
"db", getDatabaseVendor(),
|
||||
"db-url", getJdbcUrl(),
|
||||
"db-url", getJdbcUrl(internal),
|
||||
"db-username", getUsername(),
|
||||
"db-password", getPassword()
|
||||
);
|
||||
@@ -79,8 +83,13 @@ public abstract class AbstractContainerTestDatabase implements TestDatabase {
|
||||
return "keycloak";
|
||||
}
|
||||
|
||||
public String getJdbcUrl() {
|
||||
return container.getJdbcUrl();
|
||||
public String getJdbcUrl(boolean internal) {
|
||||
var url = container.getJdbcUrl();
|
||||
if (internal) {
|
||||
var ip = container.getContainerInfo().getNetworkSettings().getNetworks().values().iterator().next().getIpAddress();
|
||||
return url.replace(container.getHost() + ":" + container.getFirstMappedPort(), ip + ":" + container.getExposedPorts().get(0));
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
public abstract String getDatabaseVendor();
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
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.SupplierOrder;
|
||||
import org.keycloak.testframework.server.KeycloakServer;
|
||||
import org.keycloak.testframework.server.KeycloakServerConfigBuilder;
|
||||
import org.keycloak.testframework.server.KeycloakServerConfigInterceptor;
|
||||
|
||||
@@ -37,7 +39,17 @@ public abstract class AbstractDatabaseSupplier implements Supplier<TestDatabase,
|
||||
|
||||
@Override
|
||||
public KeycloakServerConfigBuilder intercept(KeycloakServerConfigBuilder serverConfig, InstanceContext<TestDatabase, InjectTestDatabase> instanceContext) {
|
||||
return serverConfig.options(instanceContext.getValue().serverConfig());
|
||||
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());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -21,7 +21,7 @@ public abstract class AbstractKeycloakServerSupplier implements Supplier<Keycloa
|
||||
KeycloakServerConfig serverConfig = SupplierHelpers.getInstance(annotation.config());
|
||||
|
||||
KeycloakServerConfigBuilder command = KeycloakServerConfigBuilder.startDev()
|
||||
.cache("local")
|
||||
.cache(cache())
|
||||
.bootstrapAdminClient(Config.getAdminClientId(), Config.getAdminClientSecret())
|
||||
.bootstrapAdminUser(Config.getAdminUsername(), Config.getAdminPassword());
|
||||
|
||||
@@ -74,6 +74,10 @@ public abstract class AbstractKeycloakServerSupplier implements Supplier<Keycloa
|
||||
|
||||
public abstract Logger getLogger();
|
||||
|
||||
protected String cache() {
|
||||
return "local";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int order() {
|
||||
return SupplierOrder.KEYCLOAK_SERVER;
|
||||
|
||||
Reference in New Issue
Block a user