Keystore location does not work for Windows (#23284)

* Keystore location does not work for Windows

Fixes #22185

* Enable Quarkus UT for Windows

Closes #23208

* Replace Windows separator with Unix separator (#20472)

* Replace Windows separator with Unix separator

Replace Windows separator with Unix separator to avoid building failure on Windows.

Closes #20471

* Use '/' directly instead of File.separate to then replace back to '/'

---------

Co-authored-by: Stian Thorgersen <stian@redhat.com>

---------

Co-authored-by: Anhanguera <1473421439@qq.com>
Co-authored-by: Stian Thorgersen <stian@redhat.com>
This commit is contained in:
Martin Bartoš
2023-09-19 12:11:34 +02:00
committed by GitHub
parent a3ec7686f5
commit 7a6b8da229
3 changed files with 21 additions and 10 deletions
+4 -1
View File
@@ -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@v3
@@ -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<String> 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<String> validatePassword(Optional<String> option, ConfigSourceInterceptorContext context) {
@@ -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") + File.separator + "data" + File.separator + "h2" + File.separator + "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();
@@ -343,13 +351,13 @@ 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:test-dir" + File.separator + "data" + File.separator + "h2" + File.separator + "keycloakdb;;test=test;test1=test1;NON_KEYWORDS=VALUE", config.getConfigValue("quarkus.datasource.jdbc.url").getValue());
assertEquals("jdbc:h2:file:test-dir/data/h2/keycloakdb;;test=test;test1=test1;NON_KEYWORDS=VALUE", config.getConfigValue("quarkus.datasource.jdbc.url").getValue());
assertEquals("xa", config.getConfigValue("quarkus.datasource.jdbc.transactions").getValue());
System.setProperty(CLI_ARGS, "");
config = createConfig();
assertEquals(H2Dialect.class.getName(), config.getConfigValue("kc.db-dialect").getValue());
assertEquals("jdbc:h2:file:test-dir" + File.separator + "data" + File.separator + "h2" + File.separator + "keycloakdb;;test=test;test1=test1;NON_KEYWORDS=VALUE", config.getConfigValue("quarkus.datasource.jdbc.url").getValue());
assertEquals("jdbc:h2:file:test-dir/data/h2/keycloakdb;;test=test;test1=test1;NON_KEYWORDS=VALUE", config.getConfigValue("quarkus.datasource.jdbc.url").getValue());
System.setProperty("kc.db-url-properties", "?test=test&test1=test1");
System.setProperty(CLI_ARGS, "--db=mariadb");