8000 Fixes using wrong db when using import or export command by DGuhr · Pull Request #12081 · keycloak/keycloak · GitHub
[go: up one dir, main page]

Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ public static Boolean isRebuild() {
}

public static Boolean isRuntimeMode() {
//always assume runtimeMode for importexport, to get persistedproperties for db loaded. see #11902
if(isImportExportMode()) {
return true;
}

return Thread.currentThread().getContextClassLoader() instanceof RunnerClassLoader;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ metrics-enabled=false
%import_export.http-enabled=true
%import_export.hostname-strict=false
%import_export.hostname-strict-https=false
%import_export.cluster=local

#logging defaults
log-console-output=default
Expand Down
5 changes: 5 additions & 0 deletions quarkus/tests/integration/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,11 @@
<artifactId>approvaltests</artifactId>
<version>${approvaltests.version}</version>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
<version>1.17.1</version>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,10 @@

package org.keycloak.it.storage.database;

import org.junit.jupiter.api.Test;
import org.keycloak.it.junit5.extension.CLIResult;
import org.keycloak.it.junit5.extension.CLITest;
import org.keycloak.it.junit5.extension.WithDatabase;

import io.quarkus.test.junit.main.Launch;
import io.quarkus.test.junit.main.LaunchResult;

@CLITest
@WithDatabase(alias = "mysql")
public class MySQLStartDatabaseTest extends AbstractStartDabataseTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,10 @@

package org.keycloak.it.storage.database;

import org.junit.jupiter.api.Test;
import org.keycloak.it.junit5.extension.CLIResult;
import org.keycloak.it.junit5.extension.CLITest;
import org.keycloak.it.junit5.extension.WithDatabase;

import io.quarkus.test.junit.main.Launch;
import io.quarkus.test.junit.main.LaunchResult;

@CLITest
@WithDatabase(alias = "oracle")
public class OracleStartDatabaseTest extends AbstractStartDabataseTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,10 @@

package org.keycloak.it.storage.database;

import org.junit.jupiter.api.Test;
import org.keycloak.it.junit5.extension.CLIResult;
import org.keycloak.it.junit5.extension.CLITest;
import org.keycloak.it.junit5.extension.WithDatabase;

import io.quarkus.test.junit.main.Launch;
import io.quarkus.test.junit.main.LaunchResult;

@CLITest
@WithDatabase(alias = "postgres")
public class PostgreSQLStartDatabaseTest extends AbstractStartDabataseTest {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
package org.keycloak.it.storage.database.dist;

import io.quarkus.test.junit.main.Launch;
import io.quarkus.test.junit.main.LaunchResult;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.keycloak.it.junit5.extension.BeforeStartDistribution;
import org.keycloak.it.junit5.extension.CLIResult;
import org.keycloak.it.junit5.extension.DistributionTest;
import org.keycloak.it.junit5.extension.RawDistOnly;
import org.keycloak.it.utils.KeycloakDistribution;
import org.testcontainers.containers.PostgreSQLContainer;

import java.util.function.Consumer;

import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertTrue;

@DistributionTest
@RawDistOnly(reason = "Containers are immutable")
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class ImportExportWithDbDistTest {

static final String DB_NAME = "keycloak";
static final String DB_PW = "keycloak";
static final String DB_USER = "keycloak";
static final int DB_EXPOSED_PORT = 5432;
static final PostgreSQLContainer<?> POSTGRES_CONTAINER;

static {
POSTGRES_CONTAINER = new PostgreSQLContainer("postgres:alpine");
POSTGRES_CONTAINER
.withDatabaseName(DB_NAME)
.withUsername(DB_USER)
.withPassword(DB_PW)
.withExposedPorts(DB_EXPOSED_PORT);
POSTGRES_CONTAINER.start();
assertTrue(POSTGRES_CONTAINER.isRunning());
}

@Test
@Launch({ "build", "--db=postgres" })
@Order(1)
void testBuildWithRightDb(LaunchResult result) {
CLIResult cliResult = (CLIResult) result;
cliResult.assertBuild();
}

@Test
@BeforeStartDistribution(UseContainerJdbcUrl.class)
@Launch({ "show-config" })
@Order(2)
void testDbUsedFromPersistedConfig(LaunchResult result) {
CLIResult cliResult = (CLIResult) result;
assertThat(cliResult.getOutput(),containsString("postgres (PersistedConfigSource)"));
}

@Test
@BeforeStartDistribution(UseContainerJdbcUrl.class)
@Launch({ "start", "--http-enabled=true", "--hostname-strict=false", "--db-username=keycloak", "--db-password=keycloak" })
@Order(2)
void testStartUp(LaunchResult result) {
CLIResult cliResult = (CLIResult) result;
cliResult.assertStarted();
}

@Test
@BeforeStartDistribution(SimulateDbCredentialsFromConfOrEnv.class)
@Launch({ "export", "--dir=."})
@Order(3)
void testExportSucceeds(LaunchResult result) {
CLIResult cliResult = (CLIResult) result;
cliResult.assertMessage("Full model export requested");
cliResult.assertMessage("Export finished successfully");
}

@Test
@Launch({ "import", "--dir=."})
@Order(4)
void testImportSucceeds(LaunchResult result) {
CLIResult cliResult = (CLIResult) result;
cliResult.assertMessage("Realm 'master' already exists. Removing it before import");
cliResult.assertMessage("Realm 'master' imported");
cliResult.assertMessage("Import finished successfully");
}

public static class UseContainerJdbcUrl implements Consumer<KeycloakDistribution> {
@Override
public void accept(KeycloakDistribution distribution) {
distribution.setProperty("db-url", POSTGRES_CONTAINER.getJdbcUrl());
}
}

public static class SimulateDbCredentialsFromConfOrEnv implements Consumer<KeycloakDistribution> {
@Override
public void accept(KeycloakDistribution distribution) {
distribution.setProperty("db-username", DB_USER);
distribution.setProperty("db-password", DB_PW);
}
}
}
0