Fix bug, add tests
This commit is contained in:
parent
a57821ed80
commit
a266cdcba9
6 changed files with 168 additions and 34 deletions
5
quarkus/dist/src/main/content/bin/kc.bat
vendored
5
quarkus/dist/src/main/content/bin/kc.bat
vendored
|
@ -149,6 +149,11 @@ if not errorlevel == 1 (
|
|||
set IS_HELP_SHORT=true
|
||||
)
|
||||
|
||||
if "%PRINT_ENV%" == "true" (
|
||||
echo "Using JAVA_OPTS: %JAVA_OPTS%"
|
||||
echo "Using JAVA_RUN_OPTS: %JAVA_RUN_OPTS%"
|
||||
)
|
||||
|
||||
set START_SERVER=true
|
||||
|
||||
if "!CONFIG_ARGS:%OPTIMIZED_OPTION%=!"=="!CONFIG_ARGS!" if "!CONFIG_ARGS:%BUILD_OPTION%=!"=="!CONFIG_ARGS!" if "!CONFIG_ARGS:%HELP_LONG_OPTION%=!"=="!CONFIG_ARGS!" if "%IS_HELP_SHORT%" == "false" (
|
||||
|
|
7
quarkus/dist/src/main/content/bin/kc.sh
vendored
7
quarkus/dist/src/main/content/bin/kc.sh
vendored
|
@ -92,7 +92,7 @@ fi
|
|||
|
||||
# See also https://github.com/wildfly/wildfly-core/blob/7e5624cf92ebe4b64a4793a8c0b2a340c0d6d363/core-feature-pack/common/src/main/resources/content/bin/common.sh#L57-L60
|
||||
if [ "x$JAVA_ADD_OPENS" = "x" ]; then
|
||||
JAVA_OPTS="--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED"
|
||||
JAVA_ADD_OPENS="--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED"
|
||||
else
|
||||
echo "JAVA_ADD_OPENS already set in environment; overriding default settings with values: $JAVA_ADD_OPENS"
|
||||
fi
|
||||
|
@ -115,6 +115,11 @@ fi
|
|||
|
||||
JAVA_RUN_OPTS="$JAVA_OPTS $SERVER_OPTS -cp $CLASSPATH_OPTS io.quarkus.bootstrap.runner.QuarkusEntryPoint ${CONFIG_ARGS#?}"
|
||||
|
||||
if [ "$PRINT_ENV" = "true" ]; then
|
||||
echo "Using JAVA_OPTS: $JAVA_OPTS"
|
||||
echo "Using JAVA_RUN_OPTS: $JAVA_RUN_OPTS"
|
||||
fi
|
||||
|
||||
if [[ (! $CONFIG_ARGS = *"--optimized"*) ]] && [[ ! "$CONFIG_ARGS" == " build"* ]] && [[ ! "$CONFIG_ARGS" == *"-h" ]] && [[ ! "$CONFIG_ARGS" == *"--help"* ]]; then
|
||||
eval "'$JAVA'" -Dkc.config.build-and-exit=true $JAVA_RUN_OPTS
|
||||
EXIT_CODE=$?
|
||||
|
|
|
@ -17,15 +17,27 @@
|
|||
|
||||
package org.keycloak.it.junit5.extension;
|
||||
|
||||
import static org.keycloak.it.junit5.extension.DistributionTest.ReInstall.BEFORE_ALL;
|
||||
import static org.keycloak.it.junit5.extension.DistributionType.RAW;
|
||||
import static org.keycloak.quarkus.runtime.Environment.forceTestLaunchMode;
|
||||
import static org.keycloak.quarkus.runtime.cli.command.Main.CONFIG_FILE_LONG_NAME;
|
||||
import static org.keycloak.quarkus.runtime.cli.command.Main.CONFIG_FILE_SHORT_NAME;
|
||||
import io.quarkus.deployment.util.FileUtil;
|
||||
import io.quarkus.runtime.configuration.QuarkusConfigFactory;
|
||||
import io.quarkus.test.junit.QuarkusMainTestExtension;
|
||||
import io.quarkus.test.junit.main.Launch;
|
||||
import io.quarkus.test.junit.main.LaunchResult;
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
import org.junit.jupiter.api.extension.ParameterContext;
|
||||
import org.junit.jupiter.api.extension.ParameterResolutionException;
|
||||
import org.junit.jupiter.api.extension.ReflectiveInvocationContext;
|
||||
import org.keycloak.it.utils.KeycloakDistribution;
|
||||
import org.keycloak.it.utils.RawDistRootPath;
|
||||
import org.keycloak.it.utils.RawKeycloakDistribution;
|
||||
import org.keycloak.quarkus.runtime.Environment;
|
||||
import org.keycloak.quarkus.runtime.cli.command.Start;
|
||||
import org.keycloak.quarkus.runtime.cli.command.StartDev;
|
||||
import org.keycloak.quarkus.runtime.configuration.KeycloakPropertiesConfigSource;
|
||||
import org.keycloak.quarkus.runtime.configuration.test.TestConfigArgsConfigSource;
|
||||
import org.keycloak.quarkus.runtime.integration.QuarkusPlatform;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
|
@ -35,25 +47,11 @@ import java.util.regex.Pattern;
|
|||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import io.quarkus.deployment.util.FileUtil;
|
||||
import io.quarkus.runtime.configuration.QuarkusConfigFactory;
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
import org.junit.jupiter.api.extension.ParameterContext;
|
||||
import org.junit.jupiter.api.extension.ParameterResolutionException;
|
||||
import org.junit.jupiter.api.extension.ReflectiveInvocationContext;
|
||||
import org.keycloak.it.utils.RawDistRootPath;
|
||||
import org.keycloak.it.utils.KeycloakDistribution;
|
||||
import org.keycloak.it.utils.RawKeycloakDistribution;
|
||||
import org.keycloak.quarkus.runtime.Environment;
|
||||
import org.keycloak.quarkus.runtime.cli.command.Start;
|
||||
import org.keycloak.quarkus.runtime.cli.command.StartDev;
|
||||
|
||||
import io.quarkus.test.junit.QuarkusMainTestExtension;
|
||||
import io.quarkus.test.junit.main.Launch;
|
||||
import io.quarkus.test.junit.main.LaunchResult;
|
||||
import org.keycloak.quarkus.runtime.configuration.KeycloakPropertiesConfigSource;
|
||||
import org.keycloak.quarkus.runtime.configuration.test.TestConfigArgsConfigSource;
|
||||
import org.keycloak.quarkus.runtime.integration.QuarkusPlatform;
|
||||
import static org.keycloak.it.junit5.extension.DistributionTest.ReInstall.BEFORE_ALL;
|
||||
import static org.keycloak.it.junit5.extension.DistributionType.RAW;
|
||||
import static org.keycloak.quarkus.runtime.Environment.forceTestLaunchMode;
|
||||
import static org.keycloak.quarkus.runtime.cli.command.Main.CONFIG_FILE_LONG_NAME;
|
||||
import static org.keycloak.quarkus.runtime.cli.command.Main.CONFIG_FILE_SHORT_NAME;
|
||||
|
||||
public class CLITestExtension extends QuarkusMainTestExtension {
|
||||
|
||||
|
@ -103,6 +101,9 @@ public class CLITestExtension extends QuarkusMainTestExtension {
|
|||
onBeforeStartDistribution(context.getRequiredTestClass().getAnnotation(BeforeStartDistribution.class));
|
||||
onBeforeStartDistribution(context.getRequiredTestMethod().getAnnotation(BeforeStartDistribution.class));
|
||||
|
||||
configureEnvVars(context.getRequiredTestClass().getAnnotation(WithEnvVars.class));
|
||||
configureEnvVars(context.getRequiredTestMethod().getAnnotation(WithEnvVars.class));
|
||||
|
||||
if (launch != null) {
|
||||
result = dist.run(Stream.concat(List.of(launch.value()).stream(), List.of(distConfig.defaultOptions()).stream()).collect(Collectors.toList()));
|
||||
}
|
||||
|
@ -333,6 +334,16 @@ public class CLITestExtension extends QuarkusMainTestExtension {
|
|||
setProperty("quarkus.devservices.enabled", Boolean.TRUE.toString());
|
||||
}
|
||||
|
||||
private void configureEnvVars(WithEnvVars envVars) {
|
||||
if (envVars == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i=0; i<envVars.value().length; i=i+2) {
|
||||
dist.setEnvVar(envVars.value()[i], envVars.value()[i+1]);
|
||||
}
|
||||
}
|
||||
|
||||
private void setProperty(String name, String value) {
|
||||
System.setProperty(name, value);
|
||||
testSysProps.add(name);
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright 2021 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.keycloak.it.junit5.extension;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* {@link WithEnvVars} is used to set environment variables before starting the server
|
||||
*/
|
||||
@Target({ ElementType.TYPE, ElementType.METHOD })
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface WithEnvVars {
|
||||
|
||||
/**
|
||||
* List of environment variables to be set as key-value pairs, e.g. {"JAVA_OPTS", -Xms64m", "DEBUG_PORT", "5005"}
|
||||
*/
|
||||
String[] value() default {};
|
||||
|
||||
}
|
76
quarkus/tests/integration/src/test/java/org/keycloak/it/cli/dist/JavaOptsScriptTest.java
vendored
Normal file
76
quarkus/tests/integration/src/test/java/org/keycloak/it/cli/dist/JavaOptsScriptTest.java
vendored
Normal file
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* Copyright 2021 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.keycloak.it.cli.dist;
|
||||
|
||||
import io.quarkus.test.junit.main.Launch;
|
||||
import io.quarkus.test.junit.main.LaunchResult;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.keycloak.it.junit5.extension.DistributionTest;
|
||||
import org.keycloak.it.junit5.extension.RawDistOnly;
|
||||
import org.keycloak.it.junit5.extension.WithEnvVars;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.containsString;
|
||||
import static org.hamcrest.CoreMatchers.not;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.matchesPattern;
|
||||
|
||||
@DistributionTest
|
||||
@RawDistOnly(reason = "No need to test script again on container")
|
||||
@WithEnvVars({"PRINT_ENV", "true"})
|
||||
public class JavaOptsScriptTest {
|
||||
|
||||
private static final String DEFAULT_OPTS = "(?:-\\S+ )*-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8(?: -\\S+)*";
|
||||
|
||||
@Test
|
||||
@Launch({ "start-dev" })
|
||||
void testDefaultJavaOpts(LaunchResult result) {
|
||||
String output = result.getOutput();
|
||||
assertThat(output, matchesPattern("(?s).*Using JAVA_OPTS: " + DEFAULT_OPTS + ".*"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Launch({ "start-dev" })
|
||||
@WithEnvVars({ "JAVA_OPTS", "-Dfoo=bar"})
|
||||
void testJavaOpts(LaunchResult result) {
|
||||
String output = result.getOutput();
|
||||
assertThat(output, containsString("JAVA_OPTS already set in environment; overriding default settings with values: -Dfoo=bar"));
|
||||
assertThat(output, containsString("Using JAVA_OPTS: -Dfoo=bar"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Launch({ "start-dev" })
|
||||
@WithEnvVars({ "JAVA_OPTS_APPEND", "-Dfoo=bar"})
|
||||
void testJavaOptsAppend(LaunchResult result) {
|
||||
String output = result.getOutput();
|
||||
assertThat(output, containsString("Appending additional Java properties to JAVA_OPTS: -Dfoo=bar"));
|
||||
assertThat(output, matchesPattern("(?s).*Using JAVA_OPTS: " + DEFAULT_OPTS + " -Dfoo=bar\\n.*"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
@Launch({ "start-dev" })
|
||||
@WithEnvVars({ "JAVA_ADD_OPENS", "-Dfoo=bar"})
|
||||
void testJavaAddOpens(LaunchResult result) {
|
||||
String output = result.getOutput();
|
||||
assertThat(output, containsString("JAVA_ADD_OPENS already set in environment; overriding default settings with values: -Dfoo=bar"));
|
||||
assertThat(output, not(containsString("--add-opens")));
|
||||
assertThat(output, matchesPattern("(?s).*Using JAVA_OPTS: " + DEFAULT_OPTS + " -Dfoo=bar.*"));
|
||||
}
|
||||
|
||||
}
|
|
@ -17,15 +17,14 @@
|
|||
|
||||
package org.keycloak.it.storage.database.dist;
|
||||
|
||||
import io.quarkus.test.junit.main.Launch;
|
||||
import io.quarkus.test.junit.main.LaunchResult;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.keycloak.it.junit5.extension.CLIResult;
|
||||
import org.keycloak.it.junit5.extension.DistributionTest;
|
||||
import org.keycloak.it.junit5.extension.LegacyStore;
|
||||
import org.keycloak.it.junit5.extension.WithDatabase;
|
||||
import org.keycloak.it.utils.KeycloakDistribution;
|
||||
|
||||
import io.quarkus.test.junit.main.Launch;
|
||||
import io.quarkus.test.junit.main.LaunchResult;
|
||||
import org.keycloak.it.junit5.extension.WithEnvVars;
|
||||
|
||||
@DistributionTest
|
||||
@WithDatabase(alias = "postgres")
|
||||
|
@ -40,10 +39,11 @@ public class DatabaseOptionsDistTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
void testEnvVarPrecedenceOverConfFile(KeycloakDistribution distribution) {
|
||||
distribution.setEnvVar("KC_DB_USERNAME", "bad");
|
||||
CLIResult result = distribution.run("start-dev");
|
||||
result.assertMessage("FATAL: password authentication failed for user \"bad\"");
|
||||
@Launch({ "start-dev" })
|
||||
@WithEnvVars({ "KC_DB_USERNAME", "bad" })
|
||||
void testEnvVarPrecedenceOverConfFile(LaunchResult result) {
|
||||
CLIResult cliResult = (CLIResult) result;
|
||||
cliResult.assertMessage("FATAL: password authentication failed for user \"bad\"");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue