Database suppliers refactoring WIP (#34574)
Signed-off-by: stianst <stianst@gmail.com>
This commit is contained in:
parent
612e2caae1
commit
d6b01015c4
44 changed files with 785 additions and 296 deletions
80
test-framework/bom/pom.xml
Executable file
80
test-framework/bom/pom.xml
Executable file
|
@ -0,0 +1,80 @@
|
||||||
|
<?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.test</groupId>
|
||||||
|
<version>999.0.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>keycloak-test-framework-bom</artifactId>
|
||||||
|
<name>Keycloak Test Framework - BOM</name>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<description>BOM for Keycloak Test Framework</description>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-ui</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-mariadb</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-mssql</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-mysql</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-oracle</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-postgres</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
</project>
|
|
@ -44,30 +44,6 @@
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-junit5</artifactId>
|
<artifactId>keycloak-junit5</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.testcontainers</groupId>
|
|
||||||
<artifactId>junit-jupiter</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.testcontainers</groupId>
|
|
||||||
<artifactId>postgresql</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.testcontainers</groupId>
|
|
||||||
<artifactId>mariadb</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.testcontainers</groupId>
|
|
||||||
<artifactId>mysql</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.testcontainers</groupId>
|
|
||||||
<artifactId>mssqlserver</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.testcontainers</groupId>
|
|
||||||
<artifactId>oracle-free</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<!-- Temporary dependency until we figure out how we want to support OAuth -->
|
<!-- Temporary dependency until we figure out how we want to support OAuth -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.nimbusds</groupId>
|
<groupId>com.nimbusds</groupId>
|
||||||
|
|
|
@ -3,11 +3,6 @@ package org.keycloak.test.framework;
|
||||||
import org.keycloak.test.framework.admin.KeycloakAdminClientSupplier;
|
import org.keycloak.test.framework.admin.KeycloakAdminClientSupplier;
|
||||||
import org.keycloak.test.framework.database.DevFileDatabaseSupplier;
|
import org.keycloak.test.framework.database.DevFileDatabaseSupplier;
|
||||||
import org.keycloak.test.framework.database.DevMemDatabaseSupplier;
|
import org.keycloak.test.framework.database.DevMemDatabaseSupplier;
|
||||||
import org.keycloak.test.framework.database.MSSQLServerDatabaseSupplier;
|
|
||||||
import org.keycloak.test.framework.database.MariaDBDatabaseSupplier;
|
|
||||||
import org.keycloak.test.framework.database.MySQLDatabaseSupplier;
|
|
||||||
import org.keycloak.test.framework.database.OracleDatabaseSupplier;
|
|
||||||
import org.keycloak.test.framework.database.PostgresDatabaseSupplier;
|
|
||||||
import org.keycloak.test.framework.database.TestDatabase;
|
import org.keycloak.test.framework.database.TestDatabase;
|
||||||
import org.keycloak.test.framework.events.EventsSupplier;
|
import org.keycloak.test.framework.events.EventsSupplier;
|
||||||
import org.keycloak.test.framework.events.SysLogServerSupplier;
|
import org.keycloak.test.framework.events.SysLogServerSupplier;
|
||||||
|
@ -38,11 +33,6 @@ public class CoreTestFrameworkExtension implements TestFrameworkExtension {
|
||||||
new RemoteKeycloakTestServerSupplier(),
|
new RemoteKeycloakTestServerSupplier(),
|
||||||
new DevMemDatabaseSupplier(),
|
new DevMemDatabaseSupplier(),
|
||||||
new DevFileDatabaseSupplier(),
|
new DevFileDatabaseSupplier(),
|
||||||
new MySQLDatabaseSupplier(),
|
|
||||||
new PostgresDatabaseSupplier(),
|
|
||||||
new MariaDBDatabaseSupplier(),
|
|
||||||
new MSSQLServerDatabaseSupplier(),
|
|
||||||
new OracleDatabaseSupplier(),
|
|
||||||
new OAuthClientSupplier(),
|
new OAuthClientSupplier(),
|
||||||
new SysLogServerSupplier(),
|
new SysLogServerSupplier(),
|
||||||
new EventsSupplier()
|
new EventsSupplier()
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import org.jboss.logging.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.testcontainers.containers.JdbcDatabaseContainer;
|
||||||
|
import org.testcontainers.containers.output.Slf4jLogConsumer;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public abstract class AbstractContainerTestDatabase implements TestDatabase {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = Logger.getLogger(AbstractContainerTestDatabase.class);
|
||||||
|
|
||||||
|
private JdbcDatabaseContainer<?> container;
|
||||||
|
|
||||||
|
@SuppressWarnings("resource")
|
||||||
|
public void start() {
|
||||||
|
container = createContainer();
|
||||||
|
container.withStartupTimeout(Duration.ofMinutes(30))
|
||||||
|
.withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger(AbstractContainerTestDatabase.class)))
|
||||||
|
.start();
|
||||||
|
try {
|
||||||
|
String postStartCommand = getPostStartCommand();
|
||||||
|
if (postStartCommand != null) {
|
||||||
|
LOGGER.tracev("Running post start command: {0}", postStartCommand);
|
||||||
|
String result = container.execInContainer("bash", "-c", postStartCommand).getStdout();
|
||||||
|
LOGGER.tracev(result);
|
||||||
|
}
|
||||||
|
} catch (IOException | InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
container.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String> serverConfig() {
|
||||||
|
return Map.of(
|
||||||
|
"db", getKeycloakDatabaseName(),
|
||||||
|
"db-url", container.getJdbcUrl(),
|
||||||
|
"db-username", container.getUsername(),
|
||||||
|
"db-password", container.getPassword()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract JdbcDatabaseContainer<?> createContainer();
|
||||||
|
|
||||||
|
public String getPostStartCommand() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract String getKeycloakDatabaseName();
|
||||||
|
|
||||||
|
}
|
|
@ -8,9 +8,6 @@ import org.keycloak.test.framework.injection.Supplier;
|
||||||
|
|
||||||
public abstract class AbstractDatabaseSupplier implements Supplier<TestDatabase, InjectTestDatabase> {
|
public abstract class AbstractDatabaseSupplier implements Supplier<TestDatabase, InjectTestDatabase> {
|
||||||
|
|
||||||
protected static final String DEFAULT_DB_USERNAME = "keycloak";
|
|
||||||
protected static final String DEFAULT_DB_PASSWORD = "Password1!";
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<InjectTestDatabase> getAnnotationClass() {
|
public Class<InjectTestDatabase> getAnnotationClass() {
|
||||||
return InjectTestDatabase.class;
|
return InjectTestDatabase.class;
|
||||||
|
|
|
@ -1,17 +1,34 @@
|
||||||
package org.keycloak.test.framework.database;
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class DevFileDatabaseSupplier extends AbstractDatabaseSupplier {
|
public class DevFileDatabaseSupplier extends AbstractDatabaseSupplier {
|
||||||
|
|
||||||
public static final String VENDOR = "dev-file";
|
@Override
|
||||||
|
public String getAlias() {
|
||||||
|
return "dev-file";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
TestDatabase getTestDatabase() {
|
TestDatabase getTestDatabase() {
|
||||||
DatabaseConfig databaseConfig = new DatabaseConfig().vendor(VENDOR);
|
return new DevFileTestDatabase();
|
||||||
return new TestDatabase(databaseConfig);
|
}
|
||||||
|
|
||||||
|
private static class DevFileTestDatabase implements TestDatabase {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getAlias() {
|
public void stop() {
|
||||||
return VENDOR;
|
// TODO Should we clean-up H2 database here?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String> serverConfig() {
|
||||||
|
return Map.of("db", "dev-file");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,33 @@
|
||||||
package org.keycloak.test.framework.database;
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class DevMemDatabaseSupplier extends AbstractDatabaseSupplier {
|
public class DevMemDatabaseSupplier extends AbstractDatabaseSupplier {
|
||||||
|
|
||||||
public static final String VENDOR = "dev-mem";
|
@Override
|
||||||
|
public String getAlias() {
|
||||||
|
return "dev-mem";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
TestDatabase getTestDatabase() {
|
TestDatabase getTestDatabase() {
|
||||||
DatabaseConfig databaseConfig = new DatabaseConfig().vendor(VENDOR);
|
return new DevMemTestDatabase();
|
||||||
return new TestDatabase(databaseConfig);
|
}
|
||||||
|
|
||||||
|
private static class DevMemTestDatabase implements TestDatabase {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getAlias() {
|
public void stop() {
|
||||||
return VENDOR;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String> serverConfig() {
|
||||||
|
return Map.of("db", "dev-mem");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
package org.keycloak.test.framework.database;
|
|
||||||
|
|
||||||
public class MSSQLServerDatabaseSupplier extends AbstractDatabaseSupplier {
|
|
||||||
public static final String VENDOR = "mssql";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
TestDatabase getTestDatabase() {
|
|
||||||
DatabaseConfig databaseConfig = new DatabaseConfig()
|
|
||||||
.vendor(VENDOR)
|
|
||||||
.containerImage("mcr.microsoft.com/mssql/server:latest");
|
|
||||||
return new TestDatabase(databaseConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getAlias() {
|
|
||||||
return VENDOR;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
package org.keycloak.test.framework.database;
|
|
||||||
|
|
||||||
public class MariaDBDatabaseSupplier extends AbstractDatabaseSupplier {
|
|
||||||
public static final String VENDOR = "mariadb";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
TestDatabase getTestDatabase() {
|
|
||||||
DatabaseConfig databaseConfig = new DatabaseConfig()
|
|
||||||
.vendor(VENDOR)
|
|
||||||
.username(DEFAULT_DB_USERNAME)
|
|
||||||
.password(DEFAULT_DB_PASSWORD)
|
|
||||||
.containerImage("mariadb:latest");
|
|
||||||
return new TestDatabase(databaseConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getAlias() {
|
|
||||||
return VENDOR;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
package org.keycloak.test.framework.database;
|
|
||||||
|
|
||||||
public class MySQLDatabaseSupplier extends AbstractDatabaseSupplier {
|
|
||||||
|
|
||||||
public static final String VENDOR = "mysql";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
TestDatabase getTestDatabase() {
|
|
||||||
DatabaseConfig databaseConfig = new DatabaseConfig()
|
|
||||||
.vendor(VENDOR)
|
|
||||||
.username(DEFAULT_DB_USERNAME)
|
|
||||||
.password(DEFAULT_DB_PASSWORD)
|
|
||||||
.containerImage("mysql:latest");
|
|
||||||
return new TestDatabase(databaseConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getAlias() {
|
|
||||||
return VENDOR;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
package org.keycloak.test.framework.database;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class OracleDatabaseSupplier extends AbstractDatabaseSupplier {
|
|
||||||
|
|
||||||
public static final String VENDOR = "oracle";
|
|
||||||
private static final String CONTAINER_IMAGE = "docker.io/miquelsi/oracle-19c:19.3";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
TestDatabase getTestDatabase() {
|
|
||||||
Map<String, String> env = new HashMap<>();
|
|
||||||
env.put("ORACLE_SID", "keycloak");
|
|
||||||
env.put("ORACLE_PWD", "sa");
|
|
||||||
DatabaseConfig databaseConfig = new DatabaseConfig()
|
|
||||||
.vendor(VENDOR)
|
|
||||||
.username(DEFAULT_DB_USERNAME)
|
|
||||||
.password(DEFAULT_DB_PASSWORD)
|
|
||||||
.postStartCommand("(echo 'alter session set \"_ORACLE_SCRIPT\"=true;' && echo 'CREATE USER " +
|
|
||||||
DEFAULT_DB_USERNAME + " IDENTIFIED BY \"" +
|
|
||||||
DEFAULT_DB_PASSWORD + "\";' && echo 'GRANT CONNECT,RESOURCE,DBA,GRANT ANY PRIVILEGE,UNLIMITED TABLESPACE TO " +
|
|
||||||
DEFAULT_DB_USERNAME + ";') | sqlplus -L SYS/" + env.get("ORACLE_PWD") + "@localhost/" + env.get("ORACLE_SID") + " AS SYSDBA")
|
|
||||||
.containerImage(CONTAINER_IMAGE)
|
|
||||||
.env(env);
|
|
||||||
|
|
||||||
return new TestDatabase(databaseConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getAlias() {
|
|
||||||
return VENDOR;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
package org.keycloak.test.framework.database;
|
|
||||||
|
|
||||||
public class PostgresDatabaseSupplier extends AbstractDatabaseSupplier {
|
|
||||||
|
|
||||||
public static final String VENDOR = "postgres";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
TestDatabase getTestDatabase() {
|
|
||||||
DatabaseConfig databaseConfig = new DatabaseConfig()
|
|
||||||
.vendor(VENDOR)
|
|
||||||
.username(DEFAULT_DB_USERNAME)
|
|
||||||
.password(DEFAULT_DB_PASSWORD)
|
|
||||||
.containerImage("postgres:latest");
|
|
||||||
return new TestDatabase(databaseConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getAlias() {
|
|
||||||
return VENDOR;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,109 +1,13 @@
|
||||||
package org.keycloak.test.framework.database;
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.testcontainers.containers.GenericContainer;
|
|
||||||
import org.testcontainers.containers.JdbcDatabaseContainer;
|
|
||||||
import org.testcontainers.containers.MSSQLServerContainer;
|
|
||||||
import org.testcontainers.containers.MariaDBContainer;
|
|
||||||
import org.testcontainers.containers.MySQLContainer;
|
|
||||||
import org.testcontainers.containers.PostgreSQLContainer;
|
|
||||||
import org.testcontainers.containers.output.Slf4jLogConsumer;
|
|
||||||
import org.testcontainers.oracle.OracleContainer;
|
|
||||||
import org.testcontainers.utility.DockerImageName;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.time.Duration;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class TestDatabase {
|
public interface TestDatabase {
|
||||||
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(TestDatabase.class);
|
void start();
|
||||||
|
|
||||||
private final DatabaseConfig databaseConfig;
|
void stop();
|
||||||
|
|
||||||
private GenericContainer<?> container;
|
Map<String, String> serverConfig();
|
||||||
|
|
||||||
public TestDatabase(DatabaseConfig databaseConfig) {
|
|
||||||
this.databaseConfig = databaseConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void start() {
|
|
||||||
if (databaseConfig.getContainerImage() != null) {
|
|
||||||
container = createContainer();
|
|
||||||
container.withStartupTimeout(Duration.ofMinutes(30))
|
|
||||||
.withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger(TestDatabase.class)))
|
|
||||||
.withEnv(databaseConfig.getEnv())
|
|
||||||
.start();
|
|
||||||
try {
|
|
||||||
if (databaseConfig.getPostStartCommand() != null) {
|
|
||||||
LOGGER.tracev("Running post start command: " + databaseConfig.getPostStartCommand());
|
|
||||||
String result = container.execInContainer("bash", "-c", databaseConfig.getPostStartCommand()).getStdout();
|
|
||||||
LOGGER.tracev(result);
|
|
||||||
}
|
|
||||||
} catch (IOException | InterruptedException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
databaseConfig.url(getJdbcUrl());
|
|
||||||
if (container instanceof MSSQLServerContainer) {
|
|
||||||
databaseConfig.username(((JdbcDatabaseContainer<?>) container).getUsername());
|
|
||||||
databaseConfig.password(((JdbcDatabaseContainer<?>) container).getPassword());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void stop() {
|
|
||||||
if (databaseConfig.getContainerImage() != null) {
|
|
||||||
container.stop();
|
|
||||||
container = null;
|
|
||||||
} else if ("dev-mem".equals(databaseConfig.getVendor())) {
|
|
||||||
// TODO Stop in-mem H2 database
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, String> getServerConfig() {
|
|
||||||
return databaseConfig.toConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getJdbcUrl() {
|
|
||||||
return ((JdbcDatabaseContainer<?>)container).getJdbcUrl();
|
|
||||||
}
|
|
||||||
|
|
||||||
private JdbcDatabaseContainer<?> configureJdbcContainer(JdbcDatabaseContainer<?> jdbcDatabaseContainer) {
|
|
||||||
if (jdbcDatabaseContainer instanceof MSSQLServerContainer) {
|
|
||||||
return jdbcDatabaseContainer;
|
|
||||||
}
|
|
||||||
|
|
||||||
return jdbcDatabaseContainer
|
|
||||||
.withDatabaseName("keycloak")
|
|
||||||
.withUsername(databaseConfig.getUsername())
|
|
||||||
.withPassword(databaseConfig.getPassword());
|
|
||||||
}
|
|
||||||
|
|
||||||
private GenericContainer<?> createContainer() {
|
|
||||||
return switch (databaseConfig.getVendor()) {
|
|
||||||
case PostgresDatabaseSupplier.VENDOR -> {
|
|
||||||
DockerImageName POSTGRES = DockerImageName.parse(databaseConfig.getContainerImage());
|
|
||||||
yield configureJdbcContainer(new PostgreSQLContainer<>(POSTGRES));
|
|
||||||
}
|
|
||||||
case MariaDBDatabaseSupplier.VENDOR -> {
|
|
||||||
DockerImageName MARIADB = DockerImageName.parse(databaseConfig.getContainerImage());
|
|
||||||
yield configureJdbcContainer(new MariaDBContainer<>(MARIADB));
|
|
||||||
}
|
|
||||||
case MySQLDatabaseSupplier.VENDOR -> {
|
|
||||||
DockerImageName MYSQL = DockerImageName.parse(databaseConfig.getContainerImage());
|
|
||||||
yield configureJdbcContainer(new MySQLContainer<>(MYSQL));
|
|
||||||
}
|
|
||||||
case MSSQLServerDatabaseSupplier.VENDOR -> {
|
|
||||||
DockerImageName MSSQL = DockerImageName.parse(databaseConfig.getContainerImage());
|
|
||||||
yield configureJdbcContainer(new MSSQLServerContainer<>(MSSQL));
|
|
||||||
}
|
|
||||||
case OracleDatabaseSupplier.VENDOR -> {
|
|
||||||
DockerImageName ORACLE = DockerImageName.parse(databaseConfig.getContainerImage());
|
|
||||||
yield configureJdbcContainer(new OracleContainer(ORACLE));
|
|
||||||
}
|
|
||||||
default -> throw new RuntimeException("Unsupported database: " + databaseConfig.getVendor());
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package org.keycloak.test.framework.server;
|
||||||
|
|
||||||
import org.keycloak.test.framework.annotations.KeycloakIntegrationTest;
|
import org.keycloak.test.framework.annotations.KeycloakIntegrationTest;
|
||||||
import org.keycloak.test.framework.config.Config;
|
import org.keycloak.test.framework.config.Config;
|
||||||
|
import org.keycloak.test.framework.database.AbstractContainerTestDatabase;
|
||||||
import org.keycloak.test.framework.database.TestDatabase;
|
import org.keycloak.test.framework.database.TestDatabase;
|
||||||
import org.keycloak.test.framework.events.SysLogServer;
|
import org.keycloak.test.framework.events.SysLogServer;
|
||||||
import org.keycloak.test.framework.injection.InstanceContext;
|
import org.keycloak.test.framework.injection.InstanceContext;
|
||||||
|
@ -53,7 +54,7 @@ public abstract class AbstractKeycloakTestServerSupplier implements Supplier<Key
|
||||||
|
|
||||||
if (requiresDatabase()) {
|
if (requiresDatabase()) {
|
||||||
TestDatabase testDatabase = instanceContext.getDependency(TestDatabase.class);
|
TestDatabase testDatabase = instanceContext.getDependency(TestDatabase.class);
|
||||||
testDatabase.getServerConfig().forEach((key, value) -> rawOptions.add("--" + key + "=" + value));
|
testDatabase.serverConfig().forEach((key, value) -> rawOptions.add("--" + key + "=" + value));
|
||||||
}
|
}
|
||||||
|
|
||||||
KeycloakTestServer server = getServer();
|
KeycloakTestServer server = getServer();
|
||||||
|
|
45
test-framework/db-mariadb/pom.xml
Executable file
45
test-framework/db-mariadb/pom.xml
Executable 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.test</groupId>
|
||||||
|
<version>999.0.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>keycloak-test-framework-db-mariadb</artifactId>
|
||||||
|
<name>Keycloak Test Framework - MariaDB support</name>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<description>MariaDB support for Keycloak Test Framework</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testcontainers</groupId>
|
||||||
|
<artifactId>mariadb</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,15 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
public class MariaDBDatabaseSupplier extends AbstractDatabaseSupplier {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAlias() {
|
||||||
|
return "mariadb";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
TestDatabase getTestDatabase() {
|
||||||
|
return new MariaDBTestDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import org.testcontainers.containers.JdbcDatabaseContainer;
|
||||||
|
import org.testcontainers.containers.MariaDBContainer;
|
||||||
|
|
||||||
|
class MariaDBTestDatabase extends AbstractContainerTestDatabase {
|
||||||
|
|
||||||
|
private static final String IMAGE_NAME = "mariadb:latest";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JdbcDatabaseContainer<?> createContainer() {
|
||||||
|
return new MariaDBContainer<>(IMAGE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKeycloakDatabaseName() {
|
||||||
|
return "mariadb";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import org.keycloak.test.framework.TestFrameworkExtension;
|
||||||
|
import org.keycloak.test.framework.injection.Supplier;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MariaDBTestFrameworkExtension implements TestFrameworkExtension {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Supplier<?, ?>> suppliers() {
|
||||||
|
return List.of(new MariaDBDatabaseSupplier());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
org.keycloak.test.framework.database.MariaDBTestFrameworkExtension
|
49
test-framework/db-mssql/pom.xml
Executable file
49
test-framework/db-mssql/pom.xml
Executable file
|
@ -0,0 +1,49 @@
|
||||||
|
<?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.test</groupId>
|
||||||
|
<version>999.0.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>keycloak-test-framework-db-mssql</artifactId>
|
||||||
|
<name>Keycloak Test Framework - SQL Server support</name>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<description>SQL Server support for Keycloak Test Framework</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testcontainers</groupId>
|
||||||
|
<artifactId>mssqlserver</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.microsoft.sqlserver</groupId>
|
||||||
|
<artifactId>mssql-jdbc</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,15 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
public class MSSQLServerDatabaseSupplier extends AbstractDatabaseSupplier {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAlias() {
|
||||||
|
return "mssql";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
TestDatabase getTestDatabase() {
|
||||||
|
return new MSSQLServerTestDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import org.testcontainers.containers.JdbcDatabaseContainer;
|
||||||
|
import org.testcontainers.containers.MSSQLServerContainer;
|
||||||
|
|
||||||
|
class MSSQLServerTestDatabase extends AbstractContainerTestDatabase {
|
||||||
|
|
||||||
|
private static final String IMAGE_NAME = "mcr.microsoft.com/mssql/server:latest";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JdbcDatabaseContainer<?> createContainer() {
|
||||||
|
return new MSSQLServerContainer<>(IMAGE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKeycloakDatabaseName() {
|
||||||
|
return "mssql";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import org.keycloak.test.framework.TestFrameworkExtension;
|
||||||
|
import org.keycloak.test.framework.injection.Supplier;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MSSQLServerTestFrameworkExtension implements TestFrameworkExtension {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Supplier<?, ?>> suppliers() {
|
||||||
|
return List.of(new MSSQLServerDatabaseSupplier());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
org.keycloak.test.framework.database.MSSQLServerTestFrameworkExtension
|
45
test-framework/db-mysql/pom.xml
Executable file
45
test-framework/db-mysql/pom.xml
Executable 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.test</groupId>
|
||||||
|
<version>999.0.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>keycloak-test-framework-db-mysql</artifactId>
|
||||||
|
<name>Keycloak Test Framework - MySQL support</name>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<description>MySQL support for Keycloak Test Framework</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testcontainers</groupId>
|
||||||
|
<artifactId>mysql</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,15 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
public class MySQLDatabaseSupplier extends AbstractDatabaseSupplier {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAlias() {
|
||||||
|
return "mysql";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
TestDatabase getTestDatabase() {
|
||||||
|
return new MySQLTestDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import org.testcontainers.containers.JdbcDatabaseContainer;
|
||||||
|
import org.testcontainers.containers.MySQLContainer;
|
||||||
|
|
||||||
|
class MySQLTestDatabase extends AbstractContainerTestDatabase {
|
||||||
|
|
||||||
|
private static final String IMAGE_NAME = "mysql:latest";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JdbcDatabaseContainer<?> createContainer() {
|
||||||
|
return new MySQLContainer<>(IMAGE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKeycloakDatabaseName() {
|
||||||
|
return "mysql";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import org.keycloak.test.framework.TestFrameworkExtension;
|
||||||
|
import org.keycloak.test.framework.injection.Supplier;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MySQLTestFrameworkExtension implements TestFrameworkExtension {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Supplier<?, ?>> suppliers() {
|
||||||
|
return List.of(new MySQLDatabaseSupplier());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
org.keycloak.test.framework.database.MySQLTestFrameworkExtension
|
49
test-framework/db-oracle/pom.xml
Executable file
49
test-framework/db-oracle/pom.xml
Executable file
|
@ -0,0 +1,49 @@
|
||||||
|
<?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.test</groupId>
|
||||||
|
<version>999.0.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>keycloak-test-framework-db-oracle</artifactId>
|
||||||
|
<name>Keycloak Test Framework - Oracle support</name>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<description>Oracle support for Keycloak Test Framework</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testcontainers</groupId>
|
||||||
|
<artifactId>oracle-free</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.oracle.database.jdbc</groupId>
|
||||||
|
<artifactId>ojdbc11</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,16 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
public class Oracle19DatabaseSupplier extends AbstractDatabaseSupplier {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAlias() {
|
||||||
|
return "oracle19";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
TestDatabase getTestDatabase() {
|
||||||
|
return new Oracle19TestDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import org.testcontainers.containers.JdbcDatabaseContainer;
|
||||||
|
import org.testcontainers.oracle.OracleContainer;
|
||||||
|
import org.testcontainers.utility.DockerImageName;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
class Oracle19TestDatabase extends AbstractContainerTestDatabase {
|
||||||
|
|
||||||
|
private static final DockerImageName IMAGE_NAME = DockerImageName.parse("docker.io/miquelsi/oracle-19c:19.3").asCompatibleSubstituteFor("gvenzl/oracle-free");
|
||||||
|
|
||||||
|
@SuppressWarnings("resource")
|
||||||
|
@Override
|
||||||
|
public JdbcDatabaseContainer<?> createContainer() {
|
||||||
|
return new OracleContainer(IMAGE_NAME)
|
||||||
|
.withEnv(Map.of("ORACLE_SID", "keycloak", "ORACLE_PWD", "sa"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPostStartCommand() {
|
||||||
|
return "(echo 'alter session set \"_ORACLE_SCRIPT\"=true;' && " +
|
||||||
|
"echo 'GRANT CONNECT,RESOURCE,DBA,GRANT ANY PRIVILEGE,UNLIMITED TABLESPACE TO test;')" +
|
||||||
|
" | sqlplus -L SYS/sa" + "@localhost/keycloak AS SYSDBA";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKeycloakDatabaseName() {
|
||||||
|
return "oracle";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
public class OracleDatabaseSupplier extends AbstractDatabaseSupplier {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAlias() {
|
||||||
|
return "oracle";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
TestDatabase getTestDatabase() {
|
||||||
|
return new OracleTestDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import org.testcontainers.containers.JdbcDatabaseContainer;
|
||||||
|
import org.testcontainers.oracle.OracleContainer;
|
||||||
|
|
||||||
|
class OracleTestDatabase extends AbstractContainerTestDatabase {
|
||||||
|
|
||||||
|
private static final String IMAGE_NAME = "gvenzl/oracle-free:slim-faststart";
|
||||||
|
|
||||||
|
@SuppressWarnings("resource")
|
||||||
|
@Override
|
||||||
|
public JdbcDatabaseContainer<?> createContainer() {
|
||||||
|
return new OracleContainer(IMAGE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKeycloakDatabaseName() {
|
||||||
|
return "oracle";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import org.keycloak.test.framework.TestFrameworkExtension;
|
||||||
|
import org.keycloak.test.framework.injection.Supplier;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class OracleTestFrameworkExtension implements TestFrameworkExtension {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Supplier<?, ?>> suppliers() {
|
||||||
|
return List.of(new OracleDatabaseSupplier(), new Oracle19DatabaseSupplier());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
org.keycloak.test.framework.database.OracleTestFrameworkExtension
|
45
test-framework/db-postgres/pom.xml
Executable file
45
test-framework/db-postgres/pom.xml
Executable 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.test</groupId>
|
||||||
|
<version>999.0.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>keycloak-test-framework-db-postgres</artifactId>
|
||||||
|
<name>Keycloak Test Framework - PostgreSQL support</name>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<description>PostgreSQL support for Keycloak Test Framework</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testcontainers</groupId>
|
||||||
|
<artifactId>postgresql</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,15 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
public class PostgresDatabaseSupplier extends AbstractDatabaseSupplier {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAlias() {
|
||||||
|
return "postgres";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
TestDatabase getTestDatabase() {
|
||||||
|
return new PostgresTestDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import org.testcontainers.containers.JdbcDatabaseContainer;
|
||||||
|
import org.testcontainers.containers.PostgreSQLContainer;
|
||||||
|
|
||||||
|
class PostgresTestDatabase extends AbstractContainerTestDatabase {
|
||||||
|
|
||||||
|
private static final String IMAGE_NAME = "postgres:latest";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JdbcDatabaseContainer<?> createContainer() {
|
||||||
|
return new PostgreSQLContainer<>(IMAGE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKeycloakDatabaseName() {
|
||||||
|
return "postgres";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package org.keycloak.test.framework.database;
|
||||||
|
|
||||||
|
import org.keycloak.test.framework.TestFrameworkExtension;
|
||||||
|
import org.keycloak.test.framework.injection.Supplier;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PostgresTestFrameworkExtension implements TestFrameworkExtension {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Supplier<?, ?>> suppliers() {
|
||||||
|
return List.of(new PostgresDatabaseSupplier());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
org.keycloak.test.framework.database.PostgresTestFrameworkExtension
|
|
@ -31,37 +31,51 @@
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<description>Example tests to demonstrate the new testing framework</description>
|
<description>Example tests to demonstrate the new testing framework</description>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-bom</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>import</scope>
|
||||||
|
<type>pom</type>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak.test</groupId>
|
<groupId>org.keycloak.test</groupId>
|
||||||
<artifactId>keycloak-test-framework-core</artifactId>
|
<artifactId>keycloak-test-framework-core</artifactId>
|
||||||
<version>${project.version}</version>
|
</dependency>
|
||||||
<scope>test</scope>
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-mariadb</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-mssql</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-mysql</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-oracle</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-postgres</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak.test</groupId>
|
<groupId>org.keycloak.test</groupId>
|
||||||
<artifactId>keycloak-test-framework-ui</artifactId>
|
<artifactId>keycloak-test-framework-ui</artifactId>
|
||||||
<version>${project.version}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.junit.platform</groupId>
|
|
||||||
<artifactId>junit-platform-suite</artifactId>
|
|
||||||
<version>1.10.2</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logmanager</groupId>
|
<groupId>org.jboss.logmanager</groupId>
|
||||||
<artifactId>jboss-logmanager</artifactId>
|
<artifactId>jboss-logmanager</artifactId>
|
||||||
</dependency>
|
<scope>test</scope>
|
||||||
<!-- JDBC Drivers -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.microsoft.sqlserver</groupId>
|
|
||||||
<artifactId>mssql-jdbc</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.oracle.database.jdbc</groupId>
|
|
||||||
<artifactId>ojdbc11</artifactId>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,13 @@
|
||||||
<description>Keycloak Test Framework Parent</description>
|
<description>Keycloak Test Framework Parent</description>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
<module>bom</module>
|
||||||
<module>core</module>
|
<module>core</module>
|
||||||
|
<module>db-mariadb</module>
|
||||||
|
<module>db-mssql</module>
|
||||||
|
<module>db-mysql</module>
|
||||||
|
<module>db-oracle</module>
|
||||||
|
<module>db-postgres</module>
|
||||||
<module>ui</module>
|
<module>ui</module>
|
||||||
<module>examples</module>
|
<module>examples</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
|
@ -31,33 +31,51 @@
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<description>New Keycloak Base Testsuite</description>
|
<description>New Keycloak Base Testsuite</description>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-bom</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>import</scope>
|
||||||
|
<type>pom</type>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak.test</groupId>
|
<groupId>org.keycloak.test</groupId>
|
||||||
<artifactId>keycloak-test-framework-core</artifactId>
|
<artifactId>keycloak-test-framework-core</artifactId>
|
||||||
<version>${project.version}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak.test</groupId>
|
<groupId>org.keycloak.test</groupId>
|
||||||
<artifactId>keycloak-test-framework-ui</artifactId>
|
<artifactId>keycloak-test-framework-ui</artifactId>
|
||||||
<version>${project.version}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.junit.platform</groupId>
|
<groupId>org.keycloak.test</groupId>
|
||||||
<artifactId>junit-platform-suite</artifactId>
|
<artifactId>keycloak-test-framework-db-mariadb</artifactId>
|
||||||
<version>1.10.2</version>
|
</dependency>
|
||||||
<scope>test</scope>
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-mssql</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-mysql</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-oracle</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.keycloak.test</groupId>
|
||||||
|
<artifactId>keycloak-test-framework-db-postgres</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.logmanager</groupId>
|
<groupId>org.jboss.logmanager</groupId>
|
||||||
<artifactId>jboss-logmanager</artifactId>
|
<artifactId>jboss-logmanager</artifactId>
|
||||||
</dependency>
|
<scope>test</scope>
|
||||||
<!-- JDBC Drivers -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.microsoft.sqlserver</groupId>
|
|
||||||
<artifactId>mssql-jdbc</artifactId>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue