From c2fc2c2b0335155c9387b551f9f70a8d04fba54e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Barto=C5=A1?= Date: Mon, 18 Sep 2023 17:28:25 +0200 Subject: [PATCH] Keystore location does not work for Windows (#23209) * Keystore location does not work for Windows Fixes #22185 * Enable Quarkus UT for Windows Closes #23208 --- .github/workflows/ci.yml | 5 ++++- .../mappers/ConfigKeystorePropertyMappers.java | 10 +++++----- .../configuration/test/ConfigurationTest.java | 12 ++++++++++-- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1feeb30f771..b4ec5a0ab9b 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 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 ec20345cb61..711c384a25b 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 org.keycloak.config.ConfigKeystoreOptions; 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 @@ final class ConfigKeystorePropertyMappers { 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 a5f554b8008..161936e8070 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 @@ package org.keycloak.quarkus.runtime.configuration.test; 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 class ConfigurationTest { 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();