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,