From 051297946dc0686da81f13c0354e706d3535a529 Mon Sep 17 00:00:00 2001 From: Ozan Gunalp Date: Fri, 22 Sep 2023 12:57:21 +0200 Subject: [PATCH 1/2] Remove randomness from VT messaging tests Re-enable VT JMS test --- .../quarkus/it/vthreads/amqp/PriceConsumer.java | 8 ++------ .../it/vthreads/amqp/WireMockExtension.java | 2 +- .../virtual-threads/jms-virtual-threads/pom.xml | 15 ++------------- .../io/quarkus/it/vthreads/jms/PriceConsumer.java | 11 +++-------- .../virtual-threads/kafka-virtual-threads/pom.xml | 3 ++- .../quarkus/it/vthreads/kafka/PriceConsumer.java | 8 ++------ .../src/main/resources/application.properties | 2 +- .../it/vthreads/kafka/WireMockExtension.java | 2 +- 8 files changed, 14 insertions(+), 37 deletions(-) diff --git a/integration-tests/virtual-threads/amqp-virtual-threads/src/main/java/io/quarkus/it/vthreads/amqp/PriceConsumer.java b/integration-tests/virtual-threads/amqp-virtual-threads/src/main/java/io/quarkus/it/vthreads/amqp/PriceConsumer.java index 97379b28a7a2d..540015bfc892e 100644 --- a/integration-tests/virtual-threads/amqp-virtual-threads/src/main/java/io/quarkus/it/vthreads/amqp/PriceConsumer.java +++ b/integration-tests/virtual-threads/amqp-virtual-threads/src/main/java/io/quarkus/it/vthreads/amqp/PriceConsumer.java @@ -28,9 +28,7 @@ public CompletionStage consume(Message msg) { assertThatItRunsOnVirtualThread(); assertThatItRunsOnADuplicatedContext(); double price = msg.getPayload(); - if (price > 90.0) { - alertService.alertMessage(price); - } + alertService.alertMessage(price); return msg.ack().thenAccept(x -> { assertThatItRunsOnADuplicatedContext(); // While the ack always runs on event loop thread @@ -43,9 +41,7 @@ public CompletionStage consume(Message msg) { public void consume(double price) { assertThatItRunsOnVirtualThread(); assertThatItRunsOnADuplicatedContext(); - if (price > 90.0) { - alertService.alert(price); - } + alertService.alert(price); } Random r = new Random(); diff --git a/integration-tests/virtual-threads/amqp-virtual-threads/src/test/java/io/quarkus/it/vthreads/amqp/WireMockExtension.java b/integration-tests/virtual-threads/amqp-virtual-threads/src/test/java/io/quarkus/it/vthreads/amqp/WireMockExtension.java index 8d3499c6d2856..beb5f2a4aa554 100644 --- a/integration-tests/virtual-threads/amqp-virtual-threads/src/test/java/io/quarkus/it/vthreads/amqp/WireMockExtension.java +++ b/integration-tests/virtual-threads/amqp-virtual-threads/src/test/java/io/quarkus/it/vthreads/amqp/WireMockExtension.java @@ -24,7 +24,7 @@ public Map start() { wireMockServer.stubFor(post(urlEqualTo("/price/alert-message")) .willReturn(aResponse().withBody("ok"))); - return Map.of("price-alert/mp-rest/url", wireMockServer.baseUrl()); + return Map.of("quarkus.rest-client.price-alert.url", wireMockServer.baseUrl()); } @Override diff --git a/integration-tests/virtual-threads/jms-virtual-threads/pom.xml b/integration-tests/virtual-threads/jms-virtual-threads/pom.xml index f31f186aac14d..8b96a092b993e 100644 --- a/integration-tests/virtual-threads/jms-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/jms-virtual-threads/pom.xml @@ -33,10 +33,11 @@ io.quarkus quarkus-smallrye-reactive-messaging + io.smallrye.reactive smallrye-reactive-messaging-jms - 4.9.0 + 4.10.1 io.quarkus @@ -144,18 +145,6 @@ org.apache.maven.plugins maven-surefire-plugin - - - true - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - true - diff --git a/integration-tests/virtual-threads/jms-virtual-threads/src/main/java/io/quarkus/it/vthreads/jms/PriceConsumer.java b/integration-tests/virtual-threads/jms-virtual-threads/src/main/java/io/quarkus/it/vthreads/jms/PriceConsumer.java index 336974a7c66d8..b74f7dfd7baec 100644 --- a/integration-tests/virtual-threads/jms-virtual-threads/src/main/java/io/quarkus/it/vthreads/jms/PriceConsumer.java +++ b/integration-tests/virtual-threads/jms-virtual-threads/src/main/java/io/quarkus/it/vthreads/jms/PriceConsumer.java @@ -1,6 +1,5 @@ package io.quarkus.it.vthreads.jms; -import static io.quarkus.it.vthreads.jms.AssertHelper.assertThatItDoesNotRunOnVirtualThread; import static io.quarkus.it.vthreads.jms.AssertHelper.assertThatItRunsOnVirtualThread; import java.util.Random; @@ -27,19 +26,15 @@ public class PriceConsumer { public CompletionStage consume(Message msg) { assertThatItRunsOnVirtualThread(); double price = msg.getPayload(); - if (price > 90.0) { - alertService.alertMessage(price); - } - return msg.ack().thenAccept(x -> assertThatItDoesNotRunOnVirtualThread()); + alertService.alertMessage(price); + return msg.ack(); } @Incoming("prices") @RunOnVirtualThread public void consume(double price) { assertThatItRunsOnVirtualThread(); - if (price > 90.0) { - alertService.alert(price); - } + alertService.alert(price); } Random r = new Random(); diff --git a/integration-tests/virtual-threads/kafka-virtual-threads/pom.xml b/integration-tests/virtual-threads/kafka-virtual-threads/pom.xml index a9fac7750e8ab..6e8e10ae29f62 100644 --- a/integration-tests/virtual-threads/kafka-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/kafka-virtual-threads/pom.xml @@ -81,7 +81,8 @@ * - + + io.quarkus quarkus-rest-client-reactive-deployment ${project.version} diff --git a/integration-tests/virtual-threads/kafka-virtual-threads/src/main/java/io/quarkus/it/vthreads/kafka/PriceConsumer.java b/integration-tests/virtual-threads/kafka-virtual-threads/src/main/java/io/quarkus/it/vthreads/kafka/PriceConsumer.java index 8bdf6b7d522c5..f305a3a5f86fc 100644 --- a/integration-tests/virtual-threads/kafka-virtual-threads/src/main/java/io/quarkus/it/vthreads/kafka/PriceConsumer.java +++ b/integration-tests/virtual-threads/kafka-virtual-threads/src/main/java/io/quarkus/it/vthreads/kafka/PriceConsumer.java @@ -28,9 +28,7 @@ public CompletionStage consume(Message msg) { assertThatItRunsOnVirtualThread(); assertThatItRunsOnADuplicatedContext(); double price = msg.getPayload(); - if (price > 90.0) { - alertService.alertMessage(price); - } + alertService.alertMessage(price); return msg.ack().thenAccept(x -> { assertThatItRunsOnADuplicatedContext(); // While the ack always runs on event loop thread @@ -43,9 +41,7 @@ public CompletionStage consume(Message msg) { public void consume(double price) { assertThatItRunsOnVirtualThread(); assertThatItRunsOnADuplicatedContext(); - if (price > 90.0) { - alertService.alert(price); - } + alertService.alert(price); } Random r = new Random(); diff --git a/integration-tests/virtual-threads/kafka-virtual-threads/src/main/resources/application.properties b/integration-tests/virtual-threads/kafka-virtual-threads/src/main/resources/application.properties index f4a4265ca9756..c361e848bc491 100644 --- a/integration-tests/virtual-threads/kafka-virtual-threads/src/main/resources/application.properties +++ b/integration-tests/virtual-threads/kafka-virtual-threads/src/main/resources/application.properties @@ -1,4 +1,4 @@ -price-alert/mp-rest/url=${test.url} +quarkus.rest-client.price-alert.url=${test.url} mp.messaging.incoming.prices.broadcast=true mp.messaging.incoming.prices.auto.offset.reset=earliest mp.messaging.outgoing.prices-out.topic=prices diff --git a/integration-tests/virtual-threads/kafka-virtual-threads/src/test/java/io/quarkus/it/vthreads/kafka/WireMockExtension.java b/integration-tests/virtual-threads/kafka-virtual-threads/src/test/java/io/quarkus/it/vthreads/kafka/WireMockExtension.java index d081410fb3bb9..1bc68ca338390 100644 --- a/integration-tests/virtual-threads/kafka-virtual-threads/src/test/java/io/quarkus/it/vthreads/kafka/WireMockExtension.java +++ b/integration-tests/virtual-threads/kafka-virtual-threads/src/test/java/io/quarkus/it/vthreads/kafka/WireMockExtension.java @@ -24,7 +24,7 @@ public Map start() { wireMockServer.stubFor(post(urlEqualTo("/price/alert-message")) .willReturn(aResponse().withBody("ok"))); - return Map.of("price-alert/mp-rest/url", wireMockServer.baseUrl()); + return Map.of("quarkus.rest-client.price-alert.url", wireMockServer.baseUrl()); } @Override From eff619c165ce75c306ca99b86e0b21760aaae51d Mon Sep 17 00:00:00 2001 From: Ozan Gunalp Date: Mon, 2 Oct 2023 13:20:42 +0200 Subject: [PATCH 2/2] Use junit5-virtual-threads lib to check against pinning in VT integration tests --- .../amqp-virtual-threads/pom.xml | 5 ++ .../it/vthreads/amqp/NoPinningVerify.java | 76 ------------------- .../it/vthreads/amqp/VirtualThreadTest.java | 4 + .../grpc-virtual-threads/pom.xml | 5 ++ .../example/streaming/NoPinningVerify.java | 76 ------------------- .../streaming/VertxVirtualThreadTest.java | 4 + .../example/streaming/VirtualThreadTest.java | 4 + .../jms-virtual-threads/pom.xml | 5 ++ .../it/vthreads/jms/NoPinningVerify.java | 76 ------------------- .../it/vthreads/jms/VirtualThreadTest.java | 4 + .../kafka-virtual-threads/pom.xml | 5 ++ .../it/vthreads/kafka/NoPinningVerify.java | 76 ------------------- .../it/vthreads/kafka/VirtualThreadTest.java | 4 + .../mailer-virtual-threads/pom.xml | 5 ++ .../quarkus/virtual/mail/NoPinningVerify.java | 76 ------------------- .../virtual/mail/RunOnVirtualThreadTest.java | 4 + integration-tests/virtual-threads/pom.xml | 13 ---- .../quartz-virtual-threads/pom.xml | 5 ++ .../quarkus/virtual/mail/NoPinningVerify.java | 76 ------------------- .../virtual/mail/RunOnVirtualThreadTest.java | 4 + .../redis-virtual-threads/pom.xml | 5 ++ .../virtual/redis/NoPinningVerify.java | 76 ------------------- .../virtual/redis/RunOnVirtualThreadTest.java | 4 + .../pom.xml | 5 ++ .../quarkus/virtual/rest/NoPinningVerify.java | 76 ------------------- .../virtual/rest/RunOnVirtualThreadTest.java | 4 + .../resteasy-reactive-virtual-threads/pom.xml | 5 ++ .../quarkus/virtual/rr/NoPinningVerify.java | 76 ------------------- .../virtual/rr/RunOnVirtualThreadTest.java | 4 + .../scheduler-virtual-threads/pom.xml | 5 ++ .../quarkus/virtual/mail/NoPinningVerify.java | 76 ------------------- .../virtual/mail/RunOnVirtualThreadTest.java | 4 + .../vertx-event-bus-virtual-threads/pom.xml | 5 ++ .../virtual/vertx/NoPinningVerify.java | 76 ------------------- .../virtual/vertx/RunOnVirtualThreadTest.java | 4 + .../virtual-threads-disabled/pom.xml | 5 ++ .../virtual/disabled/NoPinningVerify.java | 76 ------------------- .../RunOnVirtualThreadDisabledTest.java | 4 + 38 files changed, 112 insertions(+), 925 deletions(-) delete mode 100644 integration-tests/virtual-threads/amqp-virtual-threads/src/test/java/io/quarkus/it/vthreads/amqp/NoPinningVerify.java delete mode 100644 integration-tests/virtual-threads/grpc-virtual-threads/src/test/java/io/quarkus/grpc/example/streaming/NoPinningVerify.java delete mode 100644 integration-tests/virtual-threads/jms-virtual-threads/src/test/java/io/quarkus/it/vthreads/jms/NoPinningVerify.java delete mode 100644 integration-tests/virtual-threads/kafka-virtual-threads/src/test/java/io/quarkus/it/vthreads/kafka/NoPinningVerify.java delete mode 100644 integration-tests/virtual-threads/mailer-virtual-threads/src/test/java/io/quarkus/virtual/mail/NoPinningVerify.java delete mode 100644 integration-tests/virtual-threads/quartz-virtual-threads/src/test/java/io/quarkus/virtual/mail/NoPinningVerify.java delete mode 100644 integration-tests/virtual-threads/redis-virtual-threads/src/test/java/io/quarkus/virtual/redis/NoPinningVerify.java delete mode 100644 integration-tests/virtual-threads/rest-client-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rest/NoPinningVerify.java delete mode 100644 integration-tests/virtual-threads/resteasy-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rr/NoPinningVerify.java delete mode 100644 integration-tests/virtual-threads/scheduler-virtual-threads/src/test/java/io/quarkus/virtual/mail/NoPinningVerify.java delete mode 100644 integration-tests/virtual-threads/vertx-event-bus-virtual-threads/src/test/java/io/quarkus/virtual/vertx/NoPinningVerify.java delete mode 100644 integration-tests/virtual-threads/virtual-threads-disabled/src/test/java/io/quarkus/virtual/disabled/NoPinningVerify.java diff --git a/integration-tests/virtual-threads/amqp-virtual-threads/pom.xml b/integration-tests/virtual-threads/amqp-virtual-threads/pom.xml index d05b0088e1546..5e207e911d5b7 100644 --- a/integration-tests/virtual-threads/amqp-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/amqp-virtual-threads/pom.xml @@ -32,6 +32,11 @@ quarkus-junit5 test + + io.quarkus.junit5 + junit5-virtual-threads + test + io.rest-assured rest-assured diff --git a/integration-tests/virtual-threads/amqp-virtual-threads/src/test/java/io/quarkus/it/vthreads/amqp/NoPinningVerify.java b/integration-tests/virtual-threads/amqp-virtual-threads/src/test/java/io/quarkus/it/vthreads/amqp/NoPinningVerify.java deleted file mode 100644 index 0db11972e439b..0000000000000 --- a/integration-tests/virtual-threads/amqp-virtual-threads/src/test/java/io/quarkus/it/vthreads/amqp/NoPinningVerify.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.quarkus.it.vthreads.amqp; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * An integration test reading the output of the unit test to verify that no tests where pinning the carrier thread. - * It reads the reports generated by surefire. - */ -public class NoPinningVerify { - - @Test - void verify() throws IOException, ParserConfigurationException, SAXException { - var reports = new File("target", "surefire-reports"); - Assertions.assertTrue(reports.isDirectory(), - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - var list = reports.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("TEST") && name.endsWith("Test.xml"); - } - }); - Assertions.assertNotNull(list, - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - - for (File report : list) { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(report); - var suite = document.getFirstChild(); - var cases = getChildren(suite.getChildNodes(), "testcase"); - for (Node c : cases) { - verify(report, c); - } - } - - } - - private void verify(File file, Node ca) { - var fullname = ca.getAttributes().getNamedItem("classname").getTextContent() + "." - + ca.getAttributes().getNamedItem("name").getTextContent(); - var output = getChildren(ca.getChildNodes(), "system-out"); - if (output.isEmpty()) { - return; - } - var sout = output.get(0).getTextContent(); - if (sout.contains("VThreadContinuation.onPinned")) { - throw new AssertionError("The test case " + fullname + " pinned the carrier thread, check " + file.getAbsolutePath() - + " for details (or the log of the test)"); - } - - } - - private List getChildren(NodeList nodes, String name) { - List list = new ArrayList<>(); - for (int i = 0; i < nodes.getLength(); i++) { - var node = nodes.item(i); - if (node.getNodeName().equalsIgnoreCase(name)) { - list.add(node); - } - } - return list; - } - -} diff --git a/integration-tests/virtual-threads/amqp-virtual-threads/src/test/java/io/quarkus/it/vthreads/amqp/VirtualThreadTest.java b/integration-tests/virtual-threads/amqp-virtual-threads/src/test/java/io/quarkus/it/vthreads/amqp/VirtualThreadTest.java index 4d44358a66087..f78312ba795d5 100644 --- a/integration-tests/virtual-threads/amqp-virtual-threads/src/test/java/io/quarkus/it/vthreads/amqp/VirtualThreadTest.java +++ b/integration-tests/virtual-threads/amqp-virtual-threads/src/test/java/io/quarkus/it/vthreads/amqp/VirtualThreadTest.java @@ -13,9 +13,13 @@ import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; @QuarkusTest @QuarkusTestResource(WireMockExtension.class) +@VirtualThreadUnit +@ShouldNotPin public class VirtualThreadTest { public static final int EXPECTED_CALLS = 10; diff --git a/integration-tests/virtual-threads/grpc-virtual-threads/pom.xml b/integration-tests/virtual-threads/grpc-virtual-threads/pom.xml index 266391bf2da6a..ba8052cf73552 100644 --- a/integration-tests/virtual-threads/grpc-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/grpc-virtual-threads/pom.xml @@ -28,6 +28,11 @@ quarkus-junit5 test + + io.quarkus.junit5 + junit5-virtual-threads + test + io.rest-assured rest-assured diff --git a/integration-tests/virtual-threads/grpc-virtual-threads/src/test/java/io/quarkus/grpc/example/streaming/NoPinningVerify.java b/integration-tests/virtual-threads/grpc-virtual-threads/src/test/java/io/quarkus/grpc/example/streaming/NoPinningVerify.java deleted file mode 100644 index 7e3dc8bbea963..0000000000000 --- a/integration-tests/virtual-threads/grpc-virtual-threads/src/test/java/io/quarkus/grpc/example/streaming/NoPinningVerify.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.quarkus.grpc.example.streaming; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * An integration test reading the output of the unit test to verify that no tests where pinning the carrier thread. - * It reads the reports generated by surefire. - */ -public class NoPinningVerify { - - @Test - void verify() throws IOException, ParserConfigurationException, SAXException { - var reports = new File("target", "surefire-reports"); - Assertions.assertTrue(reports.isDirectory(), - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - var list = reports.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("TEST") && name.endsWith("Test.xml"); - } - }); - Assertions.assertNotNull(list, - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - - for (File report : list) { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(report); - var suite = document.getFirstChild(); - var cases = getChildren(suite.getChildNodes(), "testcase"); - for (Node c : cases) { - verify(report, c); - } - } - - } - - private void verify(File file, Node ca) { - var fullname = ca.getAttributes().getNamedItem("classname").getTextContent() + "." - + ca.getAttributes().getNamedItem("name").getTextContent(); - var output = getChildren(ca.getChildNodes(), "system-out"); - if (output.isEmpty()) { - return; - } - var sout = output.get(0).getTextContent(); - if (sout.contains("VThreadContinuation.onPinned")) { - throw new AssertionError("The test case " + fullname + " pinned the carrier thread, check " + file.getAbsolutePath() - + " for details (or the log of the test)"); - } - - } - - private List getChildren(NodeList nodes, String name) { - List list = new ArrayList<>(); - for (int i = 0; i < nodes.getLength(); i++) { - var node = nodes.item(i); - if (node.getNodeName().equalsIgnoreCase(name)) { - list.add(node); - } - } - return list; - } - -} diff --git a/integration-tests/virtual-threads/grpc-virtual-threads/src/test/java/io/quarkus/grpc/example/streaming/VertxVirtualThreadTest.java b/integration-tests/virtual-threads/grpc-virtual-threads/src/test/java/io/quarkus/grpc/example/streaming/VertxVirtualThreadTest.java index c2799cc70f2f8..f480f0139b76e 100644 --- a/integration-tests/virtual-threads/grpc-virtual-threads/src/test/java/io/quarkus/grpc/example/streaming/VertxVirtualThreadTest.java +++ b/integration-tests/virtual-threads/grpc-virtual-threads/src/test/java/io/quarkus/grpc/example/streaming/VertxVirtualThreadTest.java @@ -3,8 +3,12 @@ import io.quarkus.grpc.test.utils.VertxGRPCTestProfile; import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.junit.TestProfile; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; @QuarkusTest @TestProfile(VertxGRPCTestProfile.class) +@VirtualThreadUnit +@ShouldNotPin public class VertxVirtualThreadTest extends VirtualThreadTestBase { } diff --git a/integration-tests/virtual-threads/grpc-virtual-threads/src/test/java/io/quarkus/grpc/example/streaming/VirtualThreadTest.java b/integration-tests/virtual-threads/grpc-virtual-threads/src/test/java/io/quarkus/grpc/example/streaming/VirtualThreadTest.java index a8f5412fe7e71..b5c773153a0c9 100644 --- a/integration-tests/virtual-threads/grpc-virtual-threads/src/test/java/io/quarkus/grpc/example/streaming/VirtualThreadTest.java +++ b/integration-tests/virtual-threads/grpc-virtual-threads/src/test/java/io/quarkus/grpc/example/streaming/VirtualThreadTest.java @@ -1,7 +1,11 @@ package io.quarkus.grpc.example.streaming; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; @QuarkusTest +@VirtualThreadUnit +@ShouldNotPin public class VirtualThreadTest extends VirtualThreadTestBase { } diff --git a/integration-tests/virtual-threads/jms-virtual-threads/pom.xml b/integration-tests/virtual-threads/jms-virtual-threads/pom.xml index 8b96a092b993e..2c52d9aaa85b5 100644 --- a/integration-tests/virtual-threads/jms-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/jms-virtual-threads/pom.xml @@ -58,6 +58,11 @@ quarkus-junit5 test + + io.quarkus.junit5 + junit5-virtual-threads + test + io.rest-assured rest-assured diff --git a/integration-tests/virtual-threads/jms-virtual-threads/src/test/java/io/quarkus/it/vthreads/jms/NoPinningVerify.java b/integration-tests/virtual-threads/jms-virtual-threads/src/test/java/io/quarkus/it/vthreads/jms/NoPinningVerify.java deleted file mode 100644 index b32c44a8f8a15..0000000000000 --- a/integration-tests/virtual-threads/jms-virtual-threads/src/test/java/io/quarkus/it/vthreads/jms/NoPinningVerify.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.quarkus.it.vthreads.jms; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * An integration test reading the output of the unit test to verify that no tests where pinning the carrier thread. - * It reads the reports generated by surefire. - */ -public class NoPinningVerify { - - @Test - void verify() throws IOException, ParserConfigurationException, SAXException { - var reports = new File("target", "surefire-reports"); - Assertions.assertTrue(reports.isDirectory(), - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - var list = reports.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("TEST") && name.endsWith("Test.xml"); - } - }); - Assertions.assertNotNull(list, - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - - for (File report : list) { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(report); - var suite = document.getFirstChild(); - var cases = getChildren(suite.getChildNodes(), "testcase"); - for (Node c : cases) { - verify(report, c); - } - } - - } - - private void verify(File file, Node ca) { - var fullname = ca.getAttributes().getNamedItem("classname").getTextContent() + "." - + ca.getAttributes().getNamedItem("name").getTextContent(); - var output = getChildren(ca.getChildNodes(), "system-out"); - if (output.isEmpty()) { - return; - } - var sout = output.get(0).getTextContent(); - if (sout.contains("VThreadContinuation.onPinned")) { - throw new AssertionError("The test case " + fullname + " pinned the carrier thread, check " + file.getAbsolutePath() - + " for details (or the log of the test)"); - } - - } - - private List getChildren(NodeList nodes, String name) { - List list = new ArrayList<>(); - for (int i = 0; i < nodes.getLength(); i++) { - var node = nodes.item(i); - if (node.getNodeName().equalsIgnoreCase(name)) { - list.add(node); - } - } - return list; - } - -} diff --git a/integration-tests/virtual-threads/jms-virtual-threads/src/test/java/io/quarkus/it/vthreads/jms/VirtualThreadTest.java b/integration-tests/virtual-threads/jms-virtual-threads/src/test/java/io/quarkus/it/vthreads/jms/VirtualThreadTest.java index bb115b5ea1d3e..39ebce8240846 100644 --- a/integration-tests/virtual-threads/jms-virtual-threads/src/test/java/io/quarkus/it/vthreads/jms/VirtualThreadTest.java +++ b/integration-tests/virtual-threads/jms-virtual-threads/src/test/java/io/quarkus/it/vthreads/jms/VirtualThreadTest.java @@ -13,9 +13,13 @@ import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; @QuarkusTest @QuarkusTestResource(WireMockExtension.class) +@VirtualThreadUnit +@ShouldNotPin public class VirtualThreadTest { public static final int EXPECTED_CALLS = 10; diff --git a/integration-tests/virtual-threads/kafka-virtual-threads/pom.xml b/integration-tests/virtual-threads/kafka-virtual-threads/pom.xml index 6e8e10ae29f62..16c86a83ad846 100644 --- a/integration-tests/virtual-threads/kafka-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/kafka-virtual-threads/pom.xml @@ -32,6 +32,11 @@ quarkus-junit5 test + + io.quarkus.junit5 + junit5-virtual-threads + test + io.rest-assured rest-assured diff --git a/integration-tests/virtual-threads/kafka-virtual-threads/src/test/java/io/quarkus/it/vthreads/kafka/NoPinningVerify.java b/integration-tests/virtual-threads/kafka-virtual-threads/src/test/java/io/quarkus/it/vthreads/kafka/NoPinningVerify.java deleted file mode 100644 index 69ade96c85ab9..0000000000000 --- a/integration-tests/virtual-threads/kafka-virtual-threads/src/test/java/io/quarkus/it/vthreads/kafka/NoPinningVerify.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.quarkus.it.vthreads.kafka; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * An integration test reading the output of the unit test to verify that no tests where pinning the carrier thread. - * It reads the reports generated by surefire. - */ -public class NoPinningVerify { - - @Test - void verify() throws IOException, ParserConfigurationException, SAXException { - var reports = new File("target", "surefire-reports"); - Assertions.assertTrue(reports.isDirectory(), - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - var list = reports.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("TEST") && name.endsWith("Test.xml"); - } - }); - Assertions.assertNotNull(list, - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - - for (File report : list) { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(report); - var suite = document.getFirstChild(); - var cases = getChildren(suite.getChildNodes(), "testcase"); - for (Node c : cases) { - verify(report, c); - } - } - - } - - private void verify(File file, Node ca) { - var fullname = ca.getAttributes().getNamedItem("classname").getTextContent() + "." - + ca.getAttributes().getNamedItem("name").getTextContent(); - var output = getChildren(ca.getChildNodes(), "system-out"); - if (output.isEmpty()) { - return; - } - var sout = output.get(0).getTextContent(); - if (sout.contains("VThreadContinuation.onPinned")) { - throw new AssertionError("The test case " + fullname + " pinned the carrier thread, check " + file.getAbsolutePath() - + " for details (or the log of the test)"); - } - - } - - private List getChildren(NodeList nodes, String name) { - List list = new ArrayList<>(); - for (int i = 0; i < nodes.getLength(); i++) { - var node = nodes.item(i); - if (node.getNodeName().equalsIgnoreCase(name)) { - list.add(node); - } - } - return list; - } - -} diff --git a/integration-tests/virtual-threads/kafka-virtual-threads/src/test/java/io/quarkus/it/vthreads/kafka/VirtualThreadTest.java b/integration-tests/virtual-threads/kafka-virtual-threads/src/test/java/io/quarkus/it/vthreads/kafka/VirtualThreadTest.java index 547055b00a1f1..ca5060e18aec1 100644 --- a/integration-tests/virtual-threads/kafka-virtual-threads/src/test/java/io/quarkus/it/vthreads/kafka/VirtualThreadTest.java +++ b/integration-tests/virtual-threads/kafka-virtual-threads/src/test/java/io/quarkus/it/vthreads/kafka/VirtualThreadTest.java @@ -13,9 +13,13 @@ import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; @QuarkusTest @QuarkusTestResource(WireMockExtension.class) +@VirtualThreadUnit +@ShouldNotPin public class VirtualThreadTest { public static final int EXPECTED_CALLS = 10; diff --git a/integration-tests/virtual-threads/mailer-virtual-threads/pom.xml b/integration-tests/virtual-threads/mailer-virtual-threads/pom.xml index e567f6a56f49e..9ed5f6e17c566 100644 --- a/integration-tests/virtual-threads/mailer-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/mailer-virtual-threads/pom.xml @@ -28,6 +28,11 @@ quarkus-junit5 test + + io.quarkus.junit5 + junit5-virtual-threads + test + io.rest-assured rest-assured diff --git a/integration-tests/virtual-threads/mailer-virtual-threads/src/test/java/io/quarkus/virtual/mail/NoPinningVerify.java b/integration-tests/virtual-threads/mailer-virtual-threads/src/test/java/io/quarkus/virtual/mail/NoPinningVerify.java deleted file mode 100644 index 99ce0563fdbb4..0000000000000 --- a/integration-tests/virtual-threads/mailer-virtual-threads/src/test/java/io/quarkus/virtual/mail/NoPinningVerify.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.quarkus.virtual.mail; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * An integration test reading the output of the unit test to verify that no tests where pinning the carrier thread. - * It reads the reports generated by surefire. - */ -public class NoPinningVerify { - - @Test - void verify() throws IOException, ParserConfigurationException, SAXException { - var reports = new File("target", "surefire-reports"); - Assertions.assertTrue(reports.isDirectory(), - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - var list = reports.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("TEST") && name.endsWith("Test.xml"); - } - }); - Assertions.assertNotNull(list, - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - - for (File report : list) { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(report); - var suite = document.getFirstChild(); - var cases = getChildren(suite.getChildNodes(), "testcase"); - for (Node c : cases) { - verify(report, c); - } - } - - } - - private void verify(File file, Node ca) { - var fullname = ca.getAttributes().getNamedItem("classname").getTextContent() + "." - + ca.getAttributes().getNamedItem("name").getTextContent(); - var output = getChildren(ca.getChildNodes(), "system-out"); - if (output.isEmpty()) { - return; - } - var sout = output.get(0).getTextContent(); - if (sout.contains("VThreadContinuation.onPinned")) { - throw new AssertionError("The test case " + fullname + " pinned the carrier thread, check " + file.getAbsolutePath() - + " for details (or the log of the test)"); - } - - } - - private List getChildren(NodeList nodes, String name) { - List list = new ArrayList<>(); - for (int i = 0; i < nodes.getLength(); i++) { - var node = nodes.item(i); - if (node.getNodeName().equalsIgnoreCase(name)) { - list.add(node); - } - } - return list; - } - -} diff --git a/integration-tests/virtual-threads/mailer-virtual-threads/src/test/java/io/quarkus/virtual/mail/RunOnVirtualThreadTest.java b/integration-tests/virtual-threads/mailer-virtual-threads/src/test/java/io/quarkus/virtual/mail/RunOnVirtualThreadTest.java index d179f04cea365..659dc606b7e4a 100644 --- a/integration-tests/virtual-threads/mailer-virtual-threads/src/test/java/io/quarkus/virtual/mail/RunOnVirtualThreadTest.java +++ b/integration-tests/virtual-threads/mailer-virtual-threads/src/test/java/io/quarkus/virtual/mail/RunOnVirtualThreadTest.java @@ -8,12 +8,16 @@ import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; import io.restassured.RestAssured; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; @QuarkusTest @QuarkusTestResource(MailHogResource.class) +@VirtualThreadUnit +@ShouldNotPin class RunOnVirtualThreadTest { @Test diff --git a/integration-tests/virtual-threads/pom.xml b/integration-tests/virtual-threads/pom.xml index 0e70fcb25a22f..853d39c10638b 100644 --- a/integration-tests/virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/pom.xml @@ -106,19 +106,6 @@ --enable-preview -Djdk.tracePinnedThreads -Dgradle.scan.captureTestLogging=false ${skipTests} - - - pinning-test - - test - - - - NoPinningVerify.java - - - - io.quarkus diff --git a/integration-tests/virtual-threads/quartz-virtual-threads/pom.xml b/integration-tests/virtual-threads/quartz-virtual-threads/pom.xml index ba61edfaeb22b..77a37c7b6e55b 100644 --- a/integration-tests/virtual-threads/quartz-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/quartz-virtual-threads/pom.xml @@ -28,6 +28,11 @@ quarkus-junit5 test + + io.quarkus.junit5 + junit5-virtual-threads + test + io.rest-assured rest-assured diff --git a/integration-tests/virtual-threads/quartz-virtual-threads/src/test/java/io/quarkus/virtual/mail/NoPinningVerify.java b/integration-tests/virtual-threads/quartz-virtual-threads/src/test/java/io/quarkus/virtual/mail/NoPinningVerify.java deleted file mode 100644 index 99ce0563fdbb4..0000000000000 --- a/integration-tests/virtual-threads/quartz-virtual-threads/src/test/java/io/quarkus/virtual/mail/NoPinningVerify.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.quarkus.virtual.mail; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * An integration test reading the output of the unit test to verify that no tests where pinning the carrier thread. - * It reads the reports generated by surefire. - */ -public class NoPinningVerify { - - @Test - void verify() throws IOException, ParserConfigurationException, SAXException { - var reports = new File("target", "surefire-reports"); - Assertions.assertTrue(reports.isDirectory(), - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - var list = reports.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("TEST") && name.endsWith("Test.xml"); - } - }); - Assertions.assertNotNull(list, - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - - for (File report : list) { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(report); - var suite = document.getFirstChild(); - var cases = getChildren(suite.getChildNodes(), "testcase"); - for (Node c : cases) { - verify(report, c); - } - } - - } - - private void verify(File file, Node ca) { - var fullname = ca.getAttributes().getNamedItem("classname").getTextContent() + "." - + ca.getAttributes().getNamedItem("name").getTextContent(); - var output = getChildren(ca.getChildNodes(), "system-out"); - if (output.isEmpty()) { - return; - } - var sout = output.get(0).getTextContent(); - if (sout.contains("VThreadContinuation.onPinned")) { - throw new AssertionError("The test case " + fullname + " pinned the carrier thread, check " + file.getAbsolutePath() - + " for details (or the log of the test)"); - } - - } - - private List getChildren(NodeList nodes, String name) { - List list = new ArrayList<>(); - for (int i = 0; i < nodes.getLength(); i++) { - var node = nodes.item(i); - if (node.getNodeName().equalsIgnoreCase(name)) { - list.add(node); - } - } - return list; - } - -} diff --git a/integration-tests/virtual-threads/quartz-virtual-threads/src/test/java/io/quarkus/virtual/mail/RunOnVirtualThreadTest.java b/integration-tests/virtual-threads/quartz-virtual-threads/src/test/java/io/quarkus/virtual/mail/RunOnVirtualThreadTest.java index 7f2bec0ae9ba7..2a6244806d48b 100644 --- a/integration-tests/virtual-threads/quartz-virtual-threads/src/test/java/io/quarkus/virtual/mail/RunOnVirtualThreadTest.java +++ b/integration-tests/virtual-threads/quartz-virtual-threads/src/test/java/io/quarkus/virtual/mail/RunOnVirtualThreadTest.java @@ -8,10 +8,14 @@ import org.junit.jupiter.api.Test; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; import io.restassured.RestAssured; import io.restassured.common.mapper.TypeRef; @QuarkusTest +@VirtualThreadUnit +@ShouldNotPin class RunOnVirtualThreadTest { @Test diff --git a/integration-tests/virtual-threads/redis-virtual-threads/pom.xml b/integration-tests/virtual-threads/redis-virtual-threads/pom.xml index 0ac0cd3aef8b5..9b333098d0d45 100644 --- a/integration-tests/virtual-threads/redis-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/redis-virtual-threads/pom.xml @@ -32,6 +32,11 @@ quarkus-junit5 test + + io.quarkus.junit5 + junit5-virtual-threads + test + io.rest-assured rest-assured diff --git a/integration-tests/virtual-threads/redis-virtual-threads/src/test/java/io/quarkus/virtual/redis/NoPinningVerify.java b/integration-tests/virtual-threads/redis-virtual-threads/src/test/java/io/quarkus/virtual/redis/NoPinningVerify.java deleted file mode 100644 index 6490e39a4d387..0000000000000 --- a/integration-tests/virtual-threads/redis-virtual-threads/src/test/java/io/quarkus/virtual/redis/NoPinningVerify.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.quarkus.virtual.redis; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * An integration test reading the output of the unit test to verify that no tests where pinning the carrier thread. - * It reads the reports generated by surefire. - */ -public class NoPinningVerify { - - @Test - void verify() throws IOException, ParserConfigurationException, SAXException { - var reports = new File("target", "surefire-reports"); - Assertions.assertTrue(reports.isDirectory(), - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - var list = reports.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("TEST") && name.endsWith("Test.xml"); - } - }); - Assertions.assertNotNull(list, - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - - for (File report : list) { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(report); - var suite = document.getFirstChild(); - var cases = getChildren(suite.getChildNodes(), "testcase"); - for (Node c : cases) { - verify(report, c); - } - } - - } - - private void verify(File file, Node ca) { - var fullname = ca.getAttributes().getNamedItem("classname").getTextContent() + "." - + ca.getAttributes().getNamedItem("name").getTextContent(); - var output = getChildren(ca.getChildNodes(), "system-out"); - if (output.isEmpty()) { - return; - } - var sout = output.get(0).getTextContent(); - if (sout.contains("VThreadContinuation.onPinned")) { - throw new AssertionError("The test case " + fullname + " pinned the carrier thread, check " + file.getAbsolutePath() - + " for details (or the log of the test)"); - } - - } - - private List getChildren(NodeList nodes, String name) { - List list = new ArrayList<>(); - for (int i = 0; i < nodes.getLength(); i++) { - var node = nodes.item(i); - if (node.getNodeName().equalsIgnoreCase(name)) { - list.add(node); - } - } - return list; - } - -} diff --git a/integration-tests/virtual-threads/redis-virtual-threads/src/test/java/io/quarkus/virtual/redis/RunOnVirtualThreadTest.java b/integration-tests/virtual-threads/redis-virtual-threads/src/test/java/io/quarkus/virtual/redis/RunOnVirtualThreadTest.java index 0b45efdd598d8..e0c7d648457f1 100644 --- a/integration-tests/virtual-threads/redis-virtual-threads/src/test/java/io/quarkus/virtual/redis/RunOnVirtualThreadTest.java +++ b/integration-tests/virtual-threads/redis-virtual-threads/src/test/java/io/quarkus/virtual/redis/RunOnVirtualThreadTest.java @@ -6,9 +6,13 @@ import org.junit.jupiter.api.Test; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; import io.restassured.RestAssured; @QuarkusTest +@VirtualThreadUnit +@ShouldNotPin class RunOnVirtualThreadTest { @Test diff --git a/integration-tests/virtual-threads/rest-client-reactive-virtual-threads/pom.xml b/integration-tests/virtual-threads/rest-client-reactive-virtual-threads/pom.xml index 263ea8ad3342d..d5a26f855ea21 100644 --- a/integration-tests/virtual-threads/rest-client-reactive-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/rest-client-reactive-virtual-threads/pom.xml @@ -28,6 +28,11 @@ quarkus-junit5 test + + io.quarkus.junit5 + junit5-virtual-threads + test + io.rest-assured rest-assured diff --git a/integration-tests/virtual-threads/rest-client-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rest/NoPinningVerify.java b/integration-tests/virtual-threads/rest-client-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rest/NoPinningVerify.java deleted file mode 100644 index 2eb1d2963110d..0000000000000 --- a/integration-tests/virtual-threads/rest-client-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rest/NoPinningVerify.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.quarkus.virtual.rest; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * An integration test reading the output of the unit test to verify that no tests where pinning the carrier thread. - * It reads the reports generated by surefire. - */ -public class NoPinningVerify { - - @Test - void verify() throws IOException, ParserConfigurationException, SAXException { - var reports = new File("target", "surefire-reports"); - Assertions.assertTrue(reports.isDirectory(), - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - var list = reports.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("TEST") && name.endsWith("Test.xml"); - } - }); - Assertions.assertNotNull(list, - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - - for (File report : list) { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(report); - var suite = document.getFirstChild(); - var cases = getChildren(suite.getChildNodes(), "testcase"); - for (Node c : cases) { - verify(report, c); - } - } - - } - - private void verify(File file, Node ca) { - var fullname = ca.getAttributes().getNamedItem("classname").getTextContent() + "." - + ca.getAttributes().getNamedItem("name").getTextContent(); - var output = getChildren(ca.getChildNodes(), "system-out"); - if (output.isEmpty()) { - return; - } - var sout = output.get(0).getTextContent(); - if (sout.contains("VThreadContinuation.onPinned")) { - throw new AssertionError("The test case " + fullname + " pinned the carrier thread, check " + file.getAbsolutePath() - + " for details (or the log of the test)"); - } - - } - - private List getChildren(NodeList nodes, String name) { - List list = new ArrayList<>(); - for (int i = 0; i < nodes.getLength(); i++) { - var node = nodes.item(i); - if (node.getNodeName().equalsIgnoreCase(name)) { - list.add(node); - } - } - return list; - } - -} diff --git a/integration-tests/virtual-threads/rest-client-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rest/RunOnVirtualThreadTest.java b/integration-tests/virtual-threads/rest-client-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rest/RunOnVirtualThreadTest.java index a1b5318ba225a..8ff0ccff1f41c 100644 --- a/integration-tests/virtual-threads/rest-client-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rest/RunOnVirtualThreadTest.java +++ b/integration-tests/virtual-threads/rest-client-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rest/RunOnVirtualThreadTest.java @@ -5,9 +5,13 @@ import org.junit.jupiter.api.Test; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; import io.restassured.RestAssured; @QuarkusTest +@VirtualThreadUnit +@ShouldNotPin class RunOnVirtualThreadTest { @Test diff --git a/integration-tests/virtual-threads/resteasy-reactive-virtual-threads/pom.xml b/integration-tests/virtual-threads/resteasy-reactive-virtual-threads/pom.xml index 2eff569b5e35d..f59e520c0348e 100644 --- a/integration-tests/virtual-threads/resteasy-reactive-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/resteasy-reactive-virtual-threads/pom.xml @@ -24,6 +24,11 @@ quarkus-junit5 test + + io.quarkus.junit5 + junit5-virtual-threads + test + io.rest-assured rest-assured diff --git a/integration-tests/virtual-threads/resteasy-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rr/NoPinningVerify.java b/integration-tests/virtual-threads/resteasy-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rr/NoPinningVerify.java deleted file mode 100644 index 3dc4cf6e76b2a..0000000000000 --- a/integration-tests/virtual-threads/resteasy-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rr/NoPinningVerify.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.quarkus.virtual.rr; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * An integration test reading the output of the unit test to verify that no tests where pinning the carrier thread. - * It reads the reports generated by surefire. - */ -public class NoPinningVerify { - - @Test - void verify() throws IOException, ParserConfigurationException, SAXException { - var reports = new File("target", "surefire-reports"); - Assertions.assertTrue(reports.isDirectory(), - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - var list = reports.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("TEST") && name.endsWith("Test.xml"); - } - }); - Assertions.assertNotNull(list, - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - - for (File report : list) { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(report); - var suite = document.getFirstChild(); - var cases = getChildren(suite.getChildNodes(), "testcase"); - for (Node c : cases) { - verify(report, c); - } - } - - } - - private void verify(File file, Node ca) { - var fullname = ca.getAttributes().getNamedItem("classname").getTextContent() + "." - + ca.getAttributes().getNamedItem("name").getTextContent(); - var output = getChildren(ca.getChildNodes(), "system-out"); - if (output.isEmpty()) { - return; - } - var sout = output.get(0).getTextContent(); - if (sout.contains("VThreadContinuation.onPinned")) { - throw new AssertionError("The test case " + fullname + " pinned the carrier thread, check " + file.getAbsolutePath() - + " for details (or the log of the test)"); - } - - } - - private List getChildren(NodeList nodes, String name) { - List list = new ArrayList<>(); - for (int i = 0; i < nodes.getLength(); i++) { - var node = nodes.item(i); - if (node.getNodeName().equalsIgnoreCase(name)) { - list.add(node); - } - } - return list; - } - -} diff --git a/integration-tests/virtual-threads/resteasy-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rr/RunOnVirtualThreadTest.java b/integration-tests/virtual-threads/resteasy-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rr/RunOnVirtualThreadTest.java index d4562adee1ed9..a2af77a6f9be2 100644 --- a/integration-tests/virtual-threads/resteasy-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rr/RunOnVirtualThreadTest.java +++ b/integration-tests/virtual-threads/resteasy-reactive-virtual-threads/src/test/java/io/quarkus/virtual/rr/RunOnVirtualThreadTest.java @@ -7,9 +7,13 @@ import org.junit.jupiter.api.Test; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; import io.restassured.RestAssured; @QuarkusTest +@VirtualThreadUnit +@ShouldNotPin class RunOnVirtualThreadTest { @Test diff --git a/integration-tests/virtual-threads/scheduler-virtual-threads/pom.xml b/integration-tests/virtual-threads/scheduler-virtual-threads/pom.xml index 0811268cd06e2..0d7b25e3c866a 100644 --- a/integration-tests/virtual-threads/scheduler-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/scheduler-virtual-threads/pom.xml @@ -28,6 +28,11 @@ quarkus-junit5 test + + io.quarkus.junit5 + junit5-virtual-threads + test + io.rest-assured rest-assured diff --git a/integration-tests/virtual-threads/scheduler-virtual-threads/src/test/java/io/quarkus/virtual/mail/NoPinningVerify.java b/integration-tests/virtual-threads/scheduler-virtual-threads/src/test/java/io/quarkus/virtual/mail/NoPinningVerify.java deleted file mode 100644 index 99ce0563fdbb4..0000000000000 --- a/integration-tests/virtual-threads/scheduler-virtual-threads/src/test/java/io/quarkus/virtual/mail/NoPinningVerify.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.quarkus.virtual.mail; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * An integration test reading the output of the unit test to verify that no tests where pinning the carrier thread. - * It reads the reports generated by surefire. - */ -public class NoPinningVerify { - - @Test - void verify() throws IOException, ParserConfigurationException, SAXException { - var reports = new File("target", "surefire-reports"); - Assertions.assertTrue(reports.isDirectory(), - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - var list = reports.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("TEST") && name.endsWith("Test.xml"); - } - }); - Assertions.assertNotNull(list, - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - - for (File report : list) { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(report); - var suite = document.getFirstChild(); - var cases = getChildren(suite.getChildNodes(), "testcase"); - for (Node c : cases) { - verify(report, c); - } - } - - } - - private void verify(File file, Node ca) { - var fullname = ca.getAttributes().getNamedItem("classname").getTextContent() + "." - + ca.getAttributes().getNamedItem("name").getTextContent(); - var output = getChildren(ca.getChildNodes(), "system-out"); - if (output.isEmpty()) { - return; - } - var sout = output.get(0).getTextContent(); - if (sout.contains("VThreadContinuation.onPinned")) { - throw new AssertionError("The test case " + fullname + " pinned the carrier thread, check " + file.getAbsolutePath() - + " for details (or the log of the test)"); - } - - } - - private List getChildren(NodeList nodes, String name) { - List list = new ArrayList<>(); - for (int i = 0; i < nodes.getLength(); i++) { - var node = nodes.item(i); - if (node.getNodeName().equalsIgnoreCase(name)) { - list.add(node); - } - } - return list; - } - -} diff --git a/integration-tests/virtual-threads/scheduler-virtual-threads/src/test/java/io/quarkus/virtual/mail/RunOnVirtualThreadTest.java b/integration-tests/virtual-threads/scheduler-virtual-threads/src/test/java/io/quarkus/virtual/mail/RunOnVirtualThreadTest.java index 7f2bec0ae9ba7..2a6244806d48b 100644 --- a/integration-tests/virtual-threads/scheduler-virtual-threads/src/test/java/io/quarkus/virtual/mail/RunOnVirtualThreadTest.java +++ b/integration-tests/virtual-threads/scheduler-virtual-threads/src/test/java/io/quarkus/virtual/mail/RunOnVirtualThreadTest.java @@ -8,10 +8,14 @@ import org.junit.jupiter.api.Test; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; import io.restassured.RestAssured; import io.restassured.common.mapper.TypeRef; @QuarkusTest +@VirtualThreadUnit +@ShouldNotPin class RunOnVirtualThreadTest { @Test diff --git a/integration-tests/virtual-threads/vertx-event-bus-virtual-threads/pom.xml b/integration-tests/virtual-threads/vertx-event-bus-virtual-threads/pom.xml index 52ce0825438bf..57617bea7d8fb 100644 --- a/integration-tests/virtual-threads/vertx-event-bus-virtual-threads/pom.xml +++ b/integration-tests/virtual-threads/vertx-event-bus-virtual-threads/pom.xml @@ -24,6 +24,11 @@ quarkus-junit5 test + + io.quarkus.junit5 + junit5-virtual-threads + test + io.rest-assured rest-assured diff --git a/integration-tests/virtual-threads/vertx-event-bus-virtual-threads/src/test/java/io/quarkus/virtual/vertx/NoPinningVerify.java b/integration-tests/virtual-threads/vertx-event-bus-virtual-threads/src/test/java/io/quarkus/virtual/vertx/NoPinningVerify.java deleted file mode 100644 index 84f96f5700fd5..0000000000000 --- a/integration-tests/virtual-threads/vertx-event-bus-virtual-threads/src/test/java/io/quarkus/virtual/vertx/NoPinningVerify.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.quarkus.virtual.vertx; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * An integration test reading the output of the unit test to verify that no tests where pinning the carrier thread. - * It reads the reports generated by surefire. - */ -public class NoPinningVerify { - - @Test - void verify() throws IOException, ParserConfigurationException, SAXException { - var reports = new File("target", "surefire-reports"); - Assertions.assertTrue(reports.isDirectory(), - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - var list = reports.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("TEST") && name.endsWith("Test.xml"); - } - }); - Assertions.assertNotNull(list, - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - - for (File report : list) { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(report); - var suite = document.getFirstChild(); - var cases = getChildren(suite.getChildNodes(), "testcase"); - for (Node c : cases) { - verify(report, c); - } - } - - } - - private void verify(File file, Node ca) { - var fullname = ca.getAttributes().getNamedItem("classname").getTextContent() + "." - + ca.getAttributes().getNamedItem("name").getTextContent(); - var output = getChildren(ca.getChildNodes(), "system-out"); - if (output.isEmpty()) { - return; - } - var sout = output.get(0).getTextContent(); - if (sout.contains("VThreadContinuation.onPinned")) { - throw new AssertionError("The test case " + fullname + " pinned the carrier thread, check " + file.getAbsolutePath() - + " for details (or the log of the test)"); - } - - } - - private List getChildren(NodeList nodes, String name) { - List list = new ArrayList<>(); - for (int i = 0; i < nodes.getLength(); i++) { - var node = nodes.item(i); - if (node.getNodeName().equalsIgnoreCase(name)) { - list.add(node); - } - } - return list; - } - -} diff --git a/integration-tests/virtual-threads/vertx-event-bus-virtual-threads/src/test/java/io/quarkus/virtual/vertx/RunOnVirtualThreadTest.java b/integration-tests/virtual-threads/vertx-event-bus-virtual-threads/src/test/java/io/quarkus/virtual/vertx/RunOnVirtualThreadTest.java index 05c3b0516d786..d9dc0285247e6 100644 --- a/integration-tests/virtual-threads/vertx-event-bus-virtual-threads/src/test/java/io/quarkus/virtual/vertx/RunOnVirtualThreadTest.java +++ b/integration-tests/virtual-threads/vertx-event-bus-virtual-threads/src/test/java/io/quarkus/virtual/vertx/RunOnVirtualThreadTest.java @@ -6,9 +6,13 @@ import org.junit.jupiter.api.Test; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; import io.restassured.RestAssured; @QuarkusTest +@VirtualThreadUnit +@ShouldNotPin class RunOnVirtualThreadTest { @Test diff --git a/integration-tests/virtual-threads/virtual-threads-disabled/pom.xml b/integration-tests/virtual-threads/virtual-threads-disabled/pom.xml index 87aff3d36f75c..cf83eb35efc5d 100644 --- a/integration-tests/virtual-threads/virtual-threads-disabled/pom.xml +++ b/integration-tests/virtual-threads/virtual-threads-disabled/pom.xml @@ -24,6 +24,11 @@ quarkus-junit5 test + + io.quarkus.junit5 + junit5-virtual-threads + test + io.rest-assured rest-assured diff --git a/integration-tests/virtual-threads/virtual-threads-disabled/src/test/java/io/quarkus/virtual/disabled/NoPinningVerify.java b/integration-tests/virtual-threads/virtual-threads-disabled/src/test/java/io/quarkus/virtual/disabled/NoPinningVerify.java deleted file mode 100644 index cb1aeee98ce59..0000000000000 --- a/integration-tests/virtual-threads/virtual-threads-disabled/src/test/java/io/quarkus/virtual/disabled/NoPinningVerify.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.quarkus.virtual.disabled; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** - * An integration test reading the output of the unit test to verify that no tests where pinning the carrier thread. - * It reads the reports generated by surefire. - */ -public class NoPinningVerify { - - @Test - void verify() throws IOException, ParserConfigurationException, SAXException { - var reports = new File("target", "surefire-reports"); - Assertions.assertTrue(reports.isDirectory(), - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - var list = reports.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.startsWith("TEST") && name.endsWith("Test.xml"); - } - }); - Assertions.assertNotNull(list, - "Unable to find " + reports.getAbsolutePath() + ", did you run the tests with Maven before?"); - - for (File report : list) { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(report); - var suite = document.getFirstChild(); - var cases = getChildren(suite.getChildNodes(), "testcase"); - for (Node c : cases) { - verify(report, c); - } - } - - } - - private void verify(File file, Node ca) { - var fullname = ca.getAttributes().getNamedItem("classname").getTextContent() + "." - + ca.getAttributes().getNamedItem("name").getTextContent(); - var output = getChildren(ca.getChildNodes(), "system-out"); - if (output.isEmpty()) { - return; - } - var sout = output.get(0).getTextContent(); - if (sout.contains("VThreadContinuation.onPinned")) { - throw new AssertionError("The test case " + fullname + " pinned the carrier thread, check " + file.getAbsolutePath() - + " for details (or the log of the test)"); - } - - } - - private List getChildren(NodeList nodes, String name) { - List list = new ArrayList<>(); - for (int i = 0; i < nodes.getLength(); i++) { - var node = nodes.item(i); - if (node.getNodeName().equalsIgnoreCase(name)) { - list.add(node); - } - } - return list; - } - -} diff --git a/integration-tests/virtual-threads/virtual-threads-disabled/src/test/java/io/quarkus/virtual/disabled/RunOnVirtualThreadDisabledTest.java b/integration-tests/virtual-threads/virtual-threads-disabled/src/test/java/io/quarkus/virtual/disabled/RunOnVirtualThreadDisabledTest.java index 4a60c8922bc2f..8fef3565fc1f3 100644 --- a/integration-tests/virtual-threads/virtual-threads-disabled/src/test/java/io/quarkus/virtual/disabled/RunOnVirtualThreadDisabledTest.java +++ b/integration-tests/virtual-threads/virtual-threads-disabled/src/test/java/io/quarkus/virtual/disabled/RunOnVirtualThreadDisabledTest.java @@ -7,9 +7,13 @@ import org.junit.jupiter.api.Test; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit5.virtual.ShouldNotPin; +import io.quarkus.test.junit5.virtual.VirtualThreadUnit; import io.restassured.RestAssured; @QuarkusTest +@VirtualThreadUnit +@ShouldNotPin class RunOnVirtualThreadDisabledTest { @Test