Skip to content

Commit b235baa

Browse files
authored
Merge pull request #45100 from radcortez/fix-45083
Use `TestConfig` to load test config instead of property names
2 parents 805c3f3 + 8f5e156 commit b235baa

File tree

9 files changed

+54
-51
lines changed

9 files changed

+54
-51
lines changed

core/deployment/src/main/java/io/quarkus/deployment/dev/testing/TestConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ public interface TestConfig {
185185
* When the artifact is a {@code container}, this string is passed right after the {@code docker run} command.
186186
* When the artifact is a {@code native binary}, this string is passed right after the native binary name.
187187
*/
188-
Optional<List<String>> argLine();
188+
Optional<@WithConverter(TrimmedStringConverter.class) List<String>> argLine();
189189

190190
/**
191191
* Additional environment variables to be set in the process that {@code @QuarkusIntegrationTest} launches.

test-framework/common/src/main/java/io/quarkus/test/common/LauncherUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public final class LauncherUtil {
3434
private LauncherUtil() {
3535
}
3636

37+
@Deprecated(forRemoval = true, since = "3.17")
3738
public static Config installAndGetSomeConfig() {
3839
return ConfigProvider.getConfig();
3940
}
@@ -227,7 +228,6 @@ static void updateConfigForPort(Integer effectivePort) {
227228
if (effectivePort != null) {
228229
System.setProperty("quarkus.http.port", effectivePort.toString()); //set the port as a system property in order to have it applied to Config
229230
System.setProperty("quarkus.http.test-port", effectivePort.toString()); // needed for RestAssuredManager
230-
installAndGetSomeConfig(); // reinitialize the configuration to make sure the actual port is used
231231
System.clearProperty("test.url"); // make sure the old value does not interfere with setting the new one
232232
System.setProperty("test.url", TestHTTPResourceManager.getUri());
233233
}

test-framework/common/src/main/java/io/quarkus/test/common/TestConfigUtil.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public final class TestConfigUtil {
1818
private TestConfigUtil() {
1919
}
2020

21+
@Deprecated(forRemoval = true, since = "3.17")
2122
public static List<String> argLineValue(Config config) {
2223
String strValue = config.getOptionalValue("quarkus.test.arg-line", String.class)
2324
.orElse(config.getOptionalValue("quarkus.test.argLine", String.class) // legacy value
@@ -37,17 +38,20 @@ public static List<String> argLineValue(Config config) {
3738
return result;
3839
}
3940

41+
@Deprecated(forRemoval = true, since = "3.17")
4042
public static Map<String, String> env(Config config) {
4143
return ((SmallRyeConfig) config).getOptionalValues("quarkus.test.env", String.class, String.class)
4244
.orElse(Collections.emptyMap());
4345
}
4446

47+
@Deprecated(forRemoval = true, since = "3.17")
4548
public static Duration waitTimeValue(Config config) {
4649
return config.getOptionalValue("quarkus.test.wait-time", Duration.class)
4750
.orElseGet(() -> config.getOptionalValue("quarkus.test.jar-wait-time", Duration.class) // legacy value
4851
.orElseGet(() -> Duration.ofSeconds(DEFAULT_WAIT_TIME_SECONDS)));
4952
}
5053

54+
@Deprecated(forRemoval = true, since = "3.17")
5155
public static String integrationTestProfile(Config config) {
5256
return config.getOptionalValue("quarkus.test.integration-test-profile", String.class)
5357
.orElseGet(() -> config.getOptionalValue("quarkus.test.native-image-profile", String.class)

test-framework/junit5/src/main/java/io/quarkus/test/junit/IntegrationTestUtil.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import jakarta.inject.Inject;
3030

3131
import org.apache.commons.lang3.RandomStringUtils;
32-
import org.eclipse.microprofile.config.Config;
32+
import org.eclipse.microprofile.config.ConfigProvider;
3333
import org.eclipse.microprofile.config.inject.ConfigProperty;
3434
import org.jboss.jandex.Index;
3535
import org.junit.jupiter.api.extension.ExtensionContext;
@@ -49,7 +49,6 @@
4949
import io.quarkus.runtime.LaunchMode;
5050
import io.quarkus.runtime.logging.LoggingSetupRecorder;
5151
import io.quarkus.test.common.ArtifactLauncher;
52-
import io.quarkus.test.common.LauncherUtil;
5352
import io.quarkus.test.common.PathTestHelper;
5453
import io.quarkus.test.common.TestClassIndexer;
5554
import io.quarkus.test.common.TestResourceManager;
@@ -276,9 +275,8 @@ public void accept(String s, String s2) {
276275
} catch (Exception e) {
277276
// use the network the use has specified or else just generate one if none is configured
278277

279-
Config config = LauncherUtil.installAndGetSomeConfig();
280-
Optional<String> networkIdOpt = config
281-
.getOptionalValue("quarkus.test.container.network", String.class);
278+
Optional<String> networkIdOpt = ConfigProvider.getConfig().getOptionalValue("quarkus.test.container.network",
279+
String.class);
282280
if (networkIdOpt.isPresent()) {
283281
networkId = networkIdOpt.get();
284282
} else {

test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusIntegrationTestExtension.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.io.File;
2020
import java.lang.reflect.Field;
2121
import java.nio.file.Path;
22-
import java.time.Duration;
2322
import java.util.Collections;
2423
import java.util.HashMap;
2524
import java.util.List;
@@ -31,7 +30,7 @@
3130
import java.util.function.Function;
3231
import java.util.stream.Collectors;
3332

34-
import org.eclipse.microprofile.config.Config;
33+
import org.eclipse.microprofile.config.ConfigProvider;
3534
import org.junit.jupiter.api.extension.AfterAllCallback;
3635
import org.junit.jupiter.api.extension.AfterEachCallback;
3736
import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
@@ -44,11 +43,11 @@
4443

4544
import io.quarkus.bootstrap.app.CuratedApplication;
4645
import io.quarkus.bootstrap.logging.InitialConfigurator;
46+
import io.quarkus.deployment.dev.testing.TestConfig;
4747
import io.quarkus.runtime.logging.JBossVersion;
4848
import io.quarkus.runtime.test.TestHttpEndpointProvider;
4949
import io.quarkus.test.common.ArtifactLauncher;
5050
import io.quarkus.test.common.DevServicesContext;
51-
import io.quarkus.test.common.LauncherUtil;
5251
import io.quarkus.test.common.PropertyTestUtil;
5352
import io.quarkus.test.common.RestAssuredURLManager;
5453
import io.quarkus.test.common.RunCommandLauncher;
@@ -58,6 +57,7 @@
5857
import io.quarkus.test.common.TestScopeManager;
5958
import io.quarkus.test.junit.callback.QuarkusTestMethodContext;
6059
import io.quarkus.test.junit.launcher.ArtifactLauncherProvider;
60+
import io.smallrye.config.SmallRyeConfig;
6161

6262
public class QuarkusIntegrationTestExtension extends AbstractQuarkusTestWithContextExtension
6363
implements BeforeTestExecutionCallback, AfterTestExecutionCallback, BeforeEachCallback, AfterEachCallback,
@@ -193,10 +193,10 @@ private QuarkusTestExtensionState doProcessStart(Properties quarkusArtifactPrope
193193

194194
String artifactType = getArtifactType(quarkusArtifactProperties);
195195

196-
Config config = LauncherUtil.installAndGetSomeConfig();
197-
String testProfile = TestConfigUtil.integrationTestProfile(config);
196+
SmallRyeConfig config = ConfigProvider.getConfig().unwrap(SmallRyeConfig.class);
197+
TestConfig testConfig = config.getConfigMapping(TestConfig.class);
198198
boolean isDockerLaunch = isContainer(artifactType)
199-
|| (isJar(artifactType) && "test-with-native-agent".equals(testProfile));
199+
|| (isJar(artifactType) && "test-with-native-agent".equals(testConfig.integrationTestProfile()));
200200

201201
ArtifactLauncher.InitContext.DevServicesLaunchResult devServicesLaunchResult = handleDevServices(context,
202202
isDockerLaunch);
@@ -269,20 +269,19 @@ public void close() throws Throwable {
269269
});
270270
additionalProperties.putAll(resourceManagerProps);
271271

272-
ArtifactLauncher<?> launcher = null;
272+
ArtifactLauncher<?> launcher;
273273
String testHost = System.getProperty("quarkus.http.test-host");
274274
if ((testHost != null) && !testHost.isEmpty()) {
275275
launcher = new TestHostLauncher();
276276
} else {
277-
Duration waitDuration = TestConfigUtil.waitTimeValue(config);
278277
String target = TestConfigUtil.runTarget(config);
279278
// try to execute a run command published by an extension if it exists. We do this so that extensions that have a custom run don't have to create any special artifact type
280279
launcher = RunCommandLauncher.tryLauncher(devServicesLaunchResult.getCuratedApplication().getQuarkusBootstrap(),
281-
target, waitDuration);
280+
target, testConfig.waitTime());
282281
if (launcher == null) {
283282
ServiceLoader<ArtifactLauncherProvider> loader = ServiceLoader.load(ArtifactLauncherProvider.class);
284283
for (ArtifactLauncherProvider launcherProvider : loader) {
285-
if (launcherProvider.supportsArtifactType(artifactType, testProfile)) {
284+
if (launcherProvider.supportsArtifactType(artifactType, testConfig.integrationTestProfile())) {
286285
launcher = launcherProvider.create(
287286
new DefaultArtifactLauncherCreateContext(quarkusArtifactProperties, context,
288287
requiredTestClass,
@@ -378,7 +377,7 @@ private void throwBootFailureException() {
378377

379378
private boolean isCallbacksEnabledForIntegrationTests() {
380379
return Optional.ofNullable(System.getProperty(ENABLED_CALLBACKS_PROPERTY)).map(Boolean::parseBoolean)
381-
.or(() -> LauncherUtil.installAndGetSomeConfig().getOptionalValue(ENABLED_CALLBACKS_PROPERTY, Boolean.class))
380+
.or(() -> ConfigProvider.getConfig().getOptionalValue(ENABLED_CALLBACKS_PROPERTY, Boolean.class))
382381
.orElse(false);
383382
}
384383

test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusMainIntegrationTestExtension.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import java.util.Properties;
1818
import java.util.ServiceLoader;
1919

20-
import org.eclipse.microprofile.config.Config;
20+
import org.eclipse.microprofile.config.ConfigProvider;
2121
import org.junit.jupiter.api.Assertions;
2222
import org.junit.jupiter.api.extension.AfterEachCallback;
2323
import org.junit.jupiter.api.extension.BeforeEachCallback;
@@ -26,16 +26,16 @@
2626
import org.junit.jupiter.api.extension.ParameterResolutionException;
2727
import org.junit.jupiter.api.extension.ParameterResolver;
2828

29+
import io.quarkus.deployment.dev.testing.TestConfig;
2930
import io.quarkus.runtime.logging.JBossVersion;
3031
import io.quarkus.test.common.ArtifactLauncher;
31-
import io.quarkus.test.common.LauncherUtil;
32-
import io.quarkus.test.common.TestConfigUtil;
3332
import io.quarkus.test.common.TestResourceManager;
3433
import io.quarkus.test.junit.launcher.ArtifactLauncherProvider;
3534
import io.quarkus.test.junit.main.Launch;
3635
import io.quarkus.test.junit.main.LaunchResult;
3736
import io.quarkus.test.junit.main.QuarkusMainLauncher;
3837
import io.quarkus.test.junit.util.CloseAdaptor;
38+
import io.smallrye.config.SmallRyeConfig;
3939

4040
public class QuarkusMainIntegrationTestExtension extends AbstractQuarkusTestWithContextExtension
4141
implements BeforeEachCallback, AfterEachCallback, ParameterResolver {
@@ -157,13 +157,13 @@ private ArtifactLauncher.LaunchResult doProcessStart(ExtensionContext context, S
157157

158158
testResourceManager.inject(context.getRequiredTestInstance());
159159

160-
Config config = LauncherUtil.installAndGetSomeConfig();
161-
String testProfile = TestConfigUtil.integrationTestProfile(config);
160+
SmallRyeConfig config = ConfigProvider.getConfig().unwrap(SmallRyeConfig.class);
161+
TestConfig testConfig = config.getConfigMapping(TestConfig.class);
162162

163163
ArtifactLauncher<?> launcher = null;
164164
ServiceLoader<ArtifactLauncherProvider> loader = ServiceLoader.load(ArtifactLauncherProvider.class);
165165
for (ArtifactLauncherProvider launcherProvider : loader) {
166-
if (launcherProvider.supportsArtifactType(artifactType, testProfile)) {
166+
if (launcherProvider.supportsArtifactType(artifactType, testConfig.integrationTestProfile())) {
167167
launcher = launcherProvider.create(
168168
new DefaultArtifactLauncherCreateContext(quarkusArtifactProperties, context, requiredTestClass,
169169
devServicesLaunchResult));

test-framework/junit5/src/main/java/io/quarkus/test/junit/launcher/DockerContainerLauncherProvider.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@
1717
import java.util.OptionalInt;
1818
import java.util.ServiceLoader;
1919

20+
import org.eclipse.microprofile.config.ConfigProvider;
21+
22+
import io.quarkus.deployment.dev.testing.TestConfig;
2023
import io.quarkus.deployment.images.ContainerImages;
2124
import io.quarkus.deployment.util.FileUtil;
2225
import io.quarkus.test.common.ArtifactLauncher;
2326
import io.quarkus.test.common.DefaultDockerContainerLauncher;
2427
import io.quarkus.test.common.DockerContainerArtifactLauncher;
25-
import io.quarkus.test.common.LauncherUtil;
26-
import io.quarkus.test.common.TestConfigUtil;
2728
import io.smallrye.config.SmallRyeConfig;
2829

2930
public class DockerContainerLauncherProvider implements ArtifactLauncherProvider {
@@ -38,6 +39,7 @@ public DockerContainerArtifactLauncher create(CreateContext context) {
3839
String containerImage = context.quarkusArtifactProperties().getProperty("metadata.container-image");
3940
boolean pullRequired = Boolean
4041
.parseBoolean(context.quarkusArtifactProperties().getProperty("metadata.pull-required", "false"));
42+
SmallRyeConfig config = ConfigProvider.getConfig().unwrap(SmallRyeConfig.class);
4143
if ((containerImage != null) && !containerImage.isEmpty()) {
4244
DockerContainerArtifactLauncher launcher;
4345
ServiceLoader<DockerContainerArtifactLauncher> loader = ServiceLoader.load(DockerContainerArtifactLauncher.class);
@@ -47,7 +49,6 @@ public DockerContainerArtifactLauncher create(CreateContext context) {
4749
} else {
4850
launcher = new DefaultDockerContainerLauncher();
4951
}
50-
SmallRyeConfig config = (SmallRyeConfig) LauncherUtil.installAndGetSomeConfig();
5152
launcherInit(context, launcher, config, containerImage, pullRequired, Optional.empty(), volumeMounts(config),
5253
Collections.emptyList());
5354
return launcher;
@@ -59,10 +60,8 @@ public DockerContainerArtifactLauncher create(CreateContext context) {
5960
// adding a volume mapping pointing to the build output directory,
6061
// and then instructing the java process to run the run jar,
6162
// along with the native image agent arguments and any other additional parameters.
62-
SmallRyeConfig config = (SmallRyeConfig) LauncherUtil.installAndGetSomeConfig();
63-
String testProfile = TestConfigUtil.integrationTestProfile(config);
64-
65-
if ("test-with-native-agent".equals(testProfile)) {
63+
TestConfig testConfig = config.getConfigMapping(TestConfig.class);
64+
if ("test-with-native-agent".equals(testConfig.integrationTestProfile())) {
6665
DockerContainerArtifactLauncher launcher = new DefaultDockerContainerLauncher();
6766
Optional<String> entryPoint = Optional.of("java");
6867
Map<String, String> volumeMounts = new HashMap<>(volumeMounts(config));
@@ -83,13 +82,14 @@ public DockerContainerArtifactLauncher create(CreateContext context) {
8382
private void launcherInit(CreateContext context, DockerContainerArtifactLauncher launcher, SmallRyeConfig config,
8483
String containerImage, boolean pullRequired, Optional<String> entryPoint, Map<String, String> volumeMounts,
8584
List<String> programArgs) {
85+
TestConfig testConfig = config.getConfigMapping(TestConfig.class);
8686
launcher.init(new DefaultDockerInitContext(
8787
config.getValue("quarkus.http.test-port", OptionalInt.class).orElse(DEFAULT_PORT),
8888
config.getValue("quarkus.http.test-ssl-port", OptionalInt.class).orElse(DEFAULT_HTTPS_PORT),
89-
TestConfigUtil.waitTimeValue(config),
90-
TestConfigUtil.integrationTestProfile(config),
91-
TestConfigUtil.argLineValue(config),
92-
TestConfigUtil.env(config),
89+
testConfig.waitTime(),
90+
testConfig.integrationTestProfile(),
91+
testConfig.argLine().orElse(List.of()),
92+
testConfig.env(),
9393
context.devServicesLaunchResult(),
9494
containerImage,
9595
pullRequired,

test-framework/junit5/src/main/java/io/quarkus/test/junit/launcher/JarLauncherProvider.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
import java.util.OptionalInt;
1313
import java.util.ServiceLoader;
1414

15-
import org.eclipse.microprofile.config.Config;
15+
import org.eclipse.microprofile.config.ConfigProvider;
1616

17+
import io.quarkus.deployment.dev.testing.TestConfig;
1718
import io.quarkus.test.common.ArtifactLauncher;
1819
import io.quarkus.test.common.DefaultJarLauncher;
1920
import io.quarkus.test.common.JarArtifactLauncher;
20-
import io.quarkus.test.common.LauncherUtil;
21-
import io.quarkus.test.common.TestConfigUtil;
21+
import io.smallrye.config.SmallRyeConfig;
2222

2323
public class JarLauncherProvider implements ArtifactLauncherProvider {
2424

@@ -40,14 +40,15 @@ public JarArtifactLauncher create(CreateContext context) {
4040
launcher = new DefaultJarLauncher();
4141
}
4242

43-
Config config = LauncherUtil.installAndGetSomeConfig();
43+
SmallRyeConfig config = ConfigProvider.getConfig().unwrap(SmallRyeConfig.class);
44+
TestConfig testConfig = config.getConfigMapping(TestConfig.class);
4445
launcher.init(new DefaultJarInitContext(
4546
config.getValue("quarkus.http.test-port", OptionalInt.class).orElse(DEFAULT_PORT),
4647
config.getValue("quarkus.http.test-ssl-port", OptionalInt.class).orElse(DEFAULT_HTTPS_PORT),
47-
TestConfigUtil.waitTimeValue(config),
48-
TestConfigUtil.integrationTestProfile(config),
49-
TestConfigUtil.argLineValue(config),
50-
TestConfigUtil.env(config),
48+
testConfig.waitTime(),
49+
testConfig.integrationTestProfile(),
50+
testConfig.argLine().orElse(List.of()),
51+
testConfig.env(),
5152
context.devServicesLaunchResult(),
5253
context.buildOutputDirectory().resolve(pathStr)));
5354
return launcher;

test-framework/junit5/src/main/java/io/quarkus/test/junit/launcher/NativeImageLauncherProvider.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@
1111
import java.util.OptionalInt;
1212
import java.util.ServiceLoader;
1313

14-
import org.eclipse.microprofile.config.Config;
14+
import org.eclipse.microprofile.config.ConfigProvider;
1515

16+
import io.quarkus.deployment.dev.testing.TestConfig;
1617
import io.quarkus.test.common.ArtifactLauncher;
1718
import io.quarkus.test.common.DefaultNativeImageLauncher;
18-
import io.quarkus.test.common.LauncherUtil;
1919
import io.quarkus.test.common.NativeImageLauncher;
20-
import io.quarkus.test.common.TestConfigUtil;
20+
import io.smallrye.config.SmallRyeConfig;
2121

2222
public class NativeImageLauncherProvider implements ArtifactLauncherProvider {
2323
@Override
@@ -38,14 +38,15 @@ public NativeImageLauncher create(CreateContext context) {
3838
launcher = new DefaultNativeImageLauncher();
3939
}
4040

41-
Config config = LauncherUtil.installAndGetSomeConfig();
41+
SmallRyeConfig config = ConfigProvider.getConfig().unwrap(SmallRyeConfig.class);
42+
TestConfig testConfig = config.getConfigMapping(TestConfig.class);
4243
launcher.init(new NativeImageLauncherProvider.DefaultNativeImageInitContext(
4344
config.getValue("quarkus.http.test-port", OptionalInt.class).orElse(DEFAULT_PORT),
4445
config.getValue("quarkus.http.test-ssl-port", OptionalInt.class).orElse(DEFAULT_HTTPS_PORT),
45-
TestConfigUtil.waitTimeValue(config),
46-
TestConfigUtil.integrationTestProfile(config),
47-
TestConfigUtil.argLineValue(config),
48-
TestConfigUtil.env(config),
46+
testConfig.waitTime(),
47+
testConfig.nativeImageProfile(),
48+
testConfig.argLine().orElse(List.of()),
49+
testConfig.env(),
4950
context.devServicesLaunchResult(),
5051
System.getProperty("native.image.path"),
5152
config.getOptionalValue("quarkus.package.output-directory", String.class).orElse(null),

0 commit comments

Comments
 (0)