From 271fdfcf0fb8bb8993c49d48e4f1d7e6ba5c72ca Mon Sep 17 00:00:00 2001 From: Stian Thorgersen Date: Wed, 19 Nov 2025 20:45:06 +0100 Subject: [PATCH] Restore KeycloakServerConfigBuilder to use single --features and --features-disabled arguments (#44322) Signed-off-by: stianst --- .../server/KeycloakServerConfigBuilder.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/test-framework/core/src/main/java/org/keycloak/testframework/server/KeycloakServerConfigBuilder.java b/test-framework/core/src/main/java/org/keycloak/testframework/server/KeycloakServerConfigBuilder.java index 4a150eaab69..67102bbeb61 100644 --- a/test-framework/core/src/main/java/org/keycloak/testframework/server/KeycloakServerConfigBuilder.java +++ b/test-framework/core/src/main/java/org/keycloak/testframework/server/KeycloakServerConfigBuilder.java @@ -27,8 +27,8 @@ public class KeycloakServerConfigBuilder { private final String command; private final Map options = new HashMap<>(); - private final Set features = new HashSet<>(); - private final Set featuresDisabled = new HashSet<>(); + private final Set features = new HashSet<>(); + private final Set featuresDisabled = new HashSet<>(); private final LogBuilder log = new LogBuilder(); private final Set dependencies = new HashSet<>(); private final Set configFiles = new HashSet<>(); @@ -79,12 +79,12 @@ public class KeycloakServerConfigBuilder { } public KeycloakServerConfigBuilder features(Profile.Feature... features) { - this.features.addAll(List.of(features)); + this.features.addAll(toFeatureStrings(features)); return this; } public KeycloakServerConfigBuilder featuresDisabled(Profile.Feature... features) { - this.featuresDisabled.addAll(List.of(features)); + this.featuresDisabled.addAll(toFeatureStrings(features)); return this; } @@ -231,9 +231,12 @@ public class KeycloakServerConfigBuilder { for (Map.Entry e : options.entrySet()) { args.add("--" + e.getKey() + "=" + e.getValue()); } - - features.forEach(f -> args.add("--feature-%s=v%s".formatted(f.getUnversionedKey(), f.getVersion()))); - featuresDisabled.forEach(f -> args.add("--feature-%s=disabled".formatted(f.getUnversionedKey()))); + if (!features.isEmpty()) { + args.add("--features=" + String.join(",", features)); + } + if (!featuresDisabled.isEmpty()) { + args.add("--features-disabled=" + String.join(",", featuresDisabled)); + } return args; } @@ -246,6 +249,15 @@ public class KeycloakServerConfigBuilder { return configFiles; } + private Set toFeatureStrings(Profile.Feature... features) { + return Arrays.stream(features).map(f -> { + if (f.getVersion() > 1 || Profile.getFeatureVersions(f.getKey()).size() > 1) { + return f.getVersionedKey(); + } + return f.getUnversionedKey(); + }).collect(Collectors.toSet()); + } + public enum LogHandlers { CONSOLE, FILE,