Skip to content

Commit 2e02b49

Browse files
authored
fix: providing a separate session for each file (#34210) (#34252)
closes: #34095 Signed-off-by: Steve Hawkins <[email protected]> (cherry picked from commit bd49975)
1 parent 4194f9e commit 2e02b49

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

quarkus/tests/integration/src/test/java/org/keycloak/it/cli/dist/ImportAtStartupDistTest.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717

1818
package org.keycloak.it.cli.dist;
1919

20+
import java.io.File;
2021
import java.io.IOException;
22+
import java.nio.file.Files;
2123
import java.nio.file.Path;
2224
import java.util.function.Consumer;
2325
import org.junit.jupiter.api.Test;
@@ -30,6 +32,9 @@
3032
import org.keycloak.it.utils.KeycloakDistribution;
3133
import org.keycloak.it.utils.RawKeycloakDistribution;
3234

35+
import com.fasterxml.jackson.databind.ObjectMapper;
36+
import com.fasterxml.jackson.databind.node.ObjectNode;
37+
3338
import io.quarkus.deployment.util.FileUtil;
3439
import io.quarkus.test.junit.main.Launch;
3540
import io.quarkus.test.junit.main.LaunchResult;
@@ -45,6 +50,21 @@ void testImport(LaunchResult result) {
4550
CLIResult cliResult = (CLIResult) result;
4651
cliResult.assertMessage("Realm 'quickstart-realm' imported");
4752
}
53+
54+
@Test
55+
@BeforeStartDistribution(CreateRealmConfigurationFile.class)
56+
void testMultipleImport(KeycloakDistribution dist) throws IOException {
57+
RawKeycloakDistribution rawDist = dist.unwrap(RawKeycloakDistribution.class);
58+
Path dir = rawDist.getDistPath().resolve("data").resolve("import");
59+
60+
// add another realm
61+
Files.write(dir.resolve("realm2.json"), Files.readAllLines(dir.resolve("realm.json")).stream()
62+
.map(s -> s.replace("quickstart-realm", "other-realm")).toList());
63+
64+
CLIResult cliResult = dist.run("start-dev", "--import-realm");
65+
cliResult.assertMessage("Realm 'quickstart-realm' imported");
66+
cliResult.assertMessage("Realm 'other-realm' imported");
67+
}
4868

4969
@Test
5070
@BeforeStartDistribution(CreateRealmConfigurationFileAndDir.class)
@@ -115,7 +135,7 @@ void testImportFromDirCreatedByExport(KeycloakDistribution dist) throws IOExcept
115135
result.assertMessage("Realm 'quickstart-realm' imported");
116136
result.assertNoMessage("Not importing realm master from file");
117137
}
118-
138+
119139
public static class CreateRealmConfigurationFile implements Consumer<KeycloakDistribution> {
120140

121141
@Override

services/src/main/java/org/keycloak/exportimport/ExportImportManager.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,17 @@ private Stream<Supplier<ImportProvider>> getStartupImportProviders(String dir) {
171171
}
172172

173173
return filesToImport.stream().map(file -> () -> {
174-
ExportImportConfig.setFile(file);
175-
return session.getProvider(ImportProvider.class, providerId);
174+
// we need a new session to pickup the static system property
175+
// file setting - it is picked up by the provider only at create time
176+
// this will eventually need to be consolidated with the master existance check
177+
// to prevent double parsing
178+
KeycloakSession newSession = session.getKeycloakSessionFactory().create();
179+
try {
180+
ExportImportConfig.setFile(file);
181+
return newSession.getProvider(ImportProvider.class, providerId);
182+
} finally {
183+
newSession.close();
184+
}
176185
});
177186
}
178187
return Stream.empty();

0 commit comments

Comments
 (0)