diff --git a/integration-tests/test-extension/tests/pom.xml b/integration-tests/test-extension/tests/pom.xml
index 923923ac414b2..37f0c9eb05582 100644
--- a/integration-tests/test-extension/tests/pom.xml
+++ b/integration-tests/test-extension/tests/pom.xml
@@ -109,6 +109,7 @@
${project.build.directory}/recorded-classpath-entries-failsafe.txt
+ test
diff --git a/integration-tests/test-extension/tests/src/main/java/io/quarkus/it/extension/SystemPropertyTestEndpoint.java b/integration-tests/test-extension/tests/src/main/java/io/quarkus/it/extension/SystemPropertyTestEndpoint.java
new file mode 100644
index 0000000000000..b36bd688e728e
--- /dev/null
+++ b/integration-tests/test-extension/tests/src/main/java/io/quarkus/it/extension/SystemPropertyTestEndpoint.java
@@ -0,0 +1,18 @@
+package io.quarkus.it.extension;
+
+import java.io.IOException;
+
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+@WebServlet(name = "SystemPropertyTestEndpoint", urlPatterns = "/core/sysprop")
+public class SystemPropertyTestEndpoint extends HttpServlet {
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ resp.getWriter().write(System.getProperty("quarkus.dymmy", "unset"));
+ }
+
+}
diff --git a/integration-tests/test-extension/tests/src/test/java/io/quarkus/it/extension/SystemPropertyGraalITCase.java b/integration-tests/test-extension/tests/src/test/java/io/quarkus/it/extension/SystemPropertyGraalITCase.java
new file mode 100644
index 0000000000000..4268c81f0d97a
--- /dev/null
+++ b/integration-tests/test-extension/tests/src/test/java/io/quarkus/it/extension/SystemPropertyGraalITCase.java
@@ -0,0 +1,7 @@
+package io.quarkus.it.extension;
+
+import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+public class SystemPropertyGraalITCase extends SystemPropertyTestCase {
+}
diff --git a/integration-tests/test-extension/tests/src/test/java/io/quarkus/it/extension/SystemPropertyTestCase.java b/integration-tests/test-extension/tests/src/test/java/io/quarkus/it/extension/SystemPropertyTestCase.java
new file mode 100644
index 0000000000000..f616a5898cc18
--- /dev/null
+++ b/integration-tests/test-extension/tests/src/test/java/io/quarkus/it/extension/SystemPropertyTestCase.java
@@ -0,0 +1,19 @@
+package io.quarkus.it.extension;
+
+import static io.restassured.RestAssured.when;
+import static org.hamcrest.Matchers.is;
+
+import org.junit.jupiter.api.Test;
+
+import io.quarkus.test.junit.QuarkusTest;
+
+@QuarkusTest
+public class SystemPropertyTestCase {
+
+ @Test
+ public void testRuntimeInitMainResourceNoDuplicate() {
+ when().get("/core/sysprop").then()
+ .body(is("test"));
+ }
+
+}
diff --git a/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusIntegrationTestExtension.java b/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusIntegrationTestExtension.java
index a9e7a071ddc6d..0aad608c0c2a6 100644
--- a/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusIntegrationTestExtension.java
+++ b/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusIntegrationTestExtension.java
@@ -213,7 +213,17 @@ private QuarkusTestExtensionState doProcessStart(Properties quarkusArtifactPrope
populateCallbacks(requiredTestClass.getClassLoader());
}
- Map additionalProperties = new HashMap<>(testProfileAndProperties.properties);
+ Map additionalProperties = new HashMap<>();
+
+ // propagate Quarkus properties set from the build tool
+ Properties existingSysProps = System.getProperties();
+ for (String name : existingSysProps.stringPropertyNames()) {
+ if (name.startsWith("quarkus.")) {
+ additionalProperties.put(name, existingSysProps.getProperty(name));
+ }
+ }
+
+ additionalProperties.putAll(testProfileAndProperties.properties);
Map resourceManagerProps = new HashMap<>(testResourceManager.start());
//we also make the dev services config accessible from the test itself
resourceManagerProps.putAll(QuarkusIntegrationTestExtension.devServicesProps);
diff --git a/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusMainIntegrationTestExtension.java b/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusMainIntegrationTestExtension.java
index 61e70d56f0fca..beb213367a61c 100644
--- a/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusMainIntegrationTestExtension.java
+++ b/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusMainIntegrationTestExtension.java
@@ -126,7 +126,18 @@ private ArtifactLauncher.LaunchResult doProcessStart(ExtensionContext context, S
testResourceManager.init(
testProfileAndProperties.testProfile != null ? testProfileAndProperties.testProfile.getClass().getName()
: null);
- Map additionalProperties = new HashMap<>(testProfileAndProperties.properties);
+
+ Map additionalProperties = new HashMap<>();
+
+ // propagate Quarkus properties set from the build tool
+ Properties existingSysProps = System.getProperties();
+ for (String name : existingSysProps.stringPropertyNames()) {
+ if (name.startsWith("quarkus.")) {
+ additionalProperties.put(name, existingSysProps.getProperty(name));
+ }
+ }
+
+ additionalProperties.putAll(testProfileAndProperties.properties);
Map resourceManagerProps = new HashMap<>(testResourceManager.start());
//also make the dev services props accessible from the test
resourceManagerProps.putAll(QuarkusMainIntegrationTestExtension.devServicesProps);