From 61fc237ef938831f9055232f3a5e7796ade9f1ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Barto=C5=A1?= Date: Wed, 13 Sep 2023 15:15:26 +0200 Subject: [PATCH 1/2] Keystore location does not work for Windows Fixes #22185 --- .../mappers/ConfigKeystorePropertyMappers.java | 10 +++++----- .../configuration/test/ConfigurationTest.java | 12 ++++++++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/configuration/mappers/ConfigKeystorePropertyMappers.java b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/configuration/mappers/ConfigKeystorePropertyMappers.java index ec20345cb61a..711c384a25bc 100644 --- a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/configuration/mappers/ConfigKeystorePropertyMappers.java +++ b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/configuration/mappers/ConfigKeystorePropertyMappers.java @@ -6,7 +6,6 @@ import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.Optional; import static org.keycloak.quarkus.runtime.configuration.mappers.PropertyMapper.fromOption; @@ -50,11 +49,12 @@ private static Optional validatePath(Optional option, ConfigSour throw new IllegalArgumentException("config-keystore-password must be specified"); } - Optional realPath = Optional.of(String.valueOf(Paths.get(path.getValue()).toAbsolutePath().normalize())); - if (!Files.exists(Path.of(realPath.get()))) { - throw new IllegalArgumentException("config-keystore path does not exist: " + realPath.get()); + final Path realPath = Path.of(path.getValue()).toAbsolutePath().normalize(); + if (!Files.exists(realPath)) { + throw new IllegalArgumentException("config-keystore path does not exist: " + realPath); } - return realPath; + + return Optional.of(realPath.toUri().toString()); } private static Optional validatePassword(Optional option, ConfigSourceInterceptorContext context) { diff --git a/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/configuration/test/ConfigurationTest.java b/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/configuration/test/ConfigurationTest.java index a5f554b80087..161936e80705 100644 --- a/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/configuration/test/ConfigurationTest.java +++ b/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/configuration/test/ConfigurationTest.java @@ -20,10 +20,11 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.keycloak.quarkus.runtime.Environment.isWindows; import static org.keycloak.quarkus.runtime.configuration.ConfigArgsConfigSource.CLI_ARGS; -import java.io.File; import java.lang.reflect.Field; +import java.nio.file.Path; import java.util.HashMap; import java.util.Map; import java.util.Properties; @@ -266,7 +267,14 @@ public void testDatabaseDefaults() { System.setProperty(CLI_ARGS, "--db=dev-file"); SmallRyeConfig config = createConfig(); assertEquals(H2Dialect.class.getName(), config.getConfigValue("kc.db-dialect").getValue()); - assertEquals("jdbc:h2:file:" + System.getProperty("user.home") + "/data/h2/keycloakdb;;AUTO_SERVER=TRUE;NON_KEYWORDS=VALUE", config.getConfigValue("quarkus.datasource.jdbc.url").getValue()); + + // JDBC location treated as file:// URI + final String userHomeUri = Path.of(System.getProperty("user.home")) + .toUri() + .toString() + .replaceFirst(isWindows() ? "file:///" : "file://", ""); + + assertEquals("jdbc:h2:file:" + userHomeUri + "data/h2/keycloakdb;;AUTO_SERVER=TRUE;NON_KEYWORDS=VALUE", config.getConfigValue("quarkus.datasource.jdbc.url").getValue()); System.setProperty(CLI_ARGS, "--db=dev-mem"); config = createConfig(); From e99571a2ada2f58e4702975a6889c9498390606f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Barto=C5=A1?= Date: Wed, 13 Sep 2023 15:07:27 +0200 Subject: [PATCH 2/2] Enable Quarkus UT for Windows Closes #23208 --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1feeb30f7716..b4ec5a0ab9b7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -126,7 +126,10 @@ jobs: name: Quarkus UT needs: build timeout-minutes: 15 - runs-on: ubuntu-latest + strategy: + matrix: + os: [ ubuntu-latest, windows-latest ] + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4