Skip to content

Commit 41ab2e5

Browse files
authored
Merge pull request #18882 from gsmet/2.0.3-backports-4
2.0.3 backports 4
2 parents 520f708 + 483fdb3 commit 41ab2e5

File tree

14 files changed

+199
-5
lines changed

14 files changed

+199
-5
lines changed

bom/application/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@
152152
<azure-functions-java-library.version>1.4.2</azure-functions-java-library.version>
153153
<kotlin.version>1.4.32</kotlin.version>
154154
<kotlin.coroutine.version>1.4.3</kotlin.coroutine.version>
155-
<dekorate.version>2.2.2</dekorate.version>
155+
<dekorate.version>2.3.0</dekorate.version>
156156
<maven-artifact-transfer.version>0.10.0</maven-artifact-transfer.version>
157157
<maven-invoker.version>3.0.1</maven-invoker.version>
158158
<awaitility.version>4.1.0</awaitility.version>

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,23 @@ public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult
324324
for (TestRunListener listener : listeners) {
325325
listener.testComplete(result);
326326
}
327+
} else if (testExecutionResult.getStatus() == TestExecutionResult.Status.FAILED) {
328+
//if a parent fails we fail the children
329+
Set<TestIdentifier> children = testPlan.getChildren(testIdentifier);
330+
for (TestIdentifier child : children) {
331+
UniqueId childId = UniqueId.parse(child.getUniqueId());
332+
result = new TestResult(child.getDisplayName(), testClass.getName(),
333+
childId,
334+
testExecutionResult,
335+
logHandler.captureOutput(), child.isTest(), runId);
336+
results.put(childId, result);
337+
if (child.isTest()) {
338+
for (TestRunListener listener : listeners) {
339+
listener.testStarted(child, testClass.getName());
340+
listener.testComplete(result);
341+
}
342+
}
343+
}
327344
}
328345
}
329346
if (testExecutionResult.getStatus() == TestExecutionResult.Status.FAILED) {

extensions/opentelemetry/opentelemetry/deployment/pom.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@
4343
<artifactId>quarkus-junit5-internal</artifactId>
4444
<scope>test</scope>
4545
</dependency>
46+
<dependency>
47+
<groupId>io.quarkus</groupId>
48+
<artifactId>quarkus-junit5</artifactId>
49+
<scope>test</scope>
50+
</dependency>
4651
<dependency>
4752
<groupId>io.rest-assured</groupId>
4853
<artifactId>rest-assured</artifactId>
@@ -64,6 +69,12 @@
6469
<artifactId>quarkus-vertx-http-deployment</artifactId>
6570
<scope>test</scope>
6671
</dependency>
72+
<dependency>
73+
<groupId>io.quarkus</groupId>
74+
<artifactId>quarkus-vertx-http-deployment</artifactId>
75+
<scope>test</scope>
76+
<type>test-jar</type>
77+
</dependency>
6778
<dependency>
6879
<groupId>io.quarkus</groupId>
6980
<artifactId>quarkus-smallrye-health-deployment</artifactId>

extensions/opentelemetry/opentelemetry/deployment/src/main/java/io/quarkus/opentelemetry/deployment/OpenTelemetryProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void createOpenTelemetry(OpenTelemetryConfig openTelemetryConfig,
6262
OpenTelemetryRecorder recorder,
6363
Optional<TracerProviderBuildItem> tracerProviderBuildItem,
6464
LaunchModeBuildItem launchMode) {
65-
if (launchMode.getLaunchMode() == LaunchMode.DEVELOPMENT) {
65+
if (launchMode.getLaunchMode() == LaunchMode.DEVELOPMENT || launchMode.getLaunchMode() == LaunchMode.TEST) {
6666
recorder.resetGlobalOpenTelemetryForDevMode();
6767
}
6868

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package io.quarkus.opentelemetry.deployment;
2+
3+
import static org.hamcrest.Matchers.is;
4+
5+
import org.jboss.shrinkwrap.api.ShrinkWrap;
6+
import org.jboss.shrinkwrap.api.asset.StringAsset;
7+
import org.jboss.shrinkwrap.api.spec.JavaArchive;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.extension.RegisterExtension;
10+
11+
import io.quarkus.test.QuarkusDevModeTest;
12+
import io.quarkus.vertx.http.testrunner.ContinuousTestingTestUtils;
13+
import io.restassured.RestAssured;
14+
15+
public class OpenTelemetryDevModeTest {
16+
@RegisterExtension
17+
final static QuarkusDevModeTest TEST = new QuarkusDevModeTest()
18+
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
19+
.addClass(TestSpanExporter.class)
20+
.addClass(TracerRouter.class)
21+
.add(new StringAsset(ContinuousTestingTestUtils.appProperties("")), "application.properties"));
22+
23+
@Test
24+
void testDevMode() {
25+
RestAssured.when().get("/tracer").then()
26+
.statusCode(200)
27+
.body(is("Hello Tracer!"));
28+
29+
TEST.modifySourceFile(TracerRouter.class, s -> s.replace("Hello", "Goodbye"));
30+
31+
RestAssured.when().get("/tracer").then()
32+
.statusCode(200)
33+
.body(is("Goodbye Tracer!"));
34+
}
35+
}

extensions/opentelemetry/opentelemetry/deployment/src/test/java/io/quarkus/opentelemetry/deployment/TestSpanExporter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
import io.opentelemetry.sdk.common.CompletableResultCode;
1111
import io.opentelemetry.sdk.trace.data.SpanData;
1212
import io.opentelemetry.sdk.trace.export.SpanExporter;
13+
import io.quarkus.arc.Unremovable;
1314

15+
@Unremovable
1416
@ApplicationScoped
1517
public class TestSpanExporter implements SpanExporter {
1618
private final List<SpanData> finishedSpanItems = new ArrayList<>();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.quarkus.opentelemetry.deployment;
2+
3+
import static org.hamcrest.Matchers.is;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
import io.quarkus.test.junit.QuarkusTest;
8+
import io.restassured.RestAssured;
9+
10+
/**
11+
* Test for continuos testing with OpenTelemetry
12+
*/
13+
@QuarkusTest
14+
public class TracerRouterUT {
15+
16+
@Test
17+
public void testTracer() {
18+
RestAssured.when().get("/tracer").then()
19+
.statusCode(200)
20+
.body(is("Hello Tracer!"));
21+
}
22+
}

extensions/smallrye-context-propagation/deployment/src/main/java/io/quarkus/smallrye/context/deployment/SmallRyeContextPropagationProcessor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.quarkus.deployment.annotations.Record;
2020
import io.quarkus.deployment.builditem.ExecutorBuildItem;
2121
import io.quarkus.deployment.builditem.FeatureBuildItem;
22+
import io.quarkus.deployment.builditem.ShutdownContextBuildItem;
2223
import io.quarkus.deployment.util.ServiceUtil;
2324
import io.quarkus.smallrye.context.runtime.SmallRyeContextPropagationProvider;
2425
import io.quarkus.smallrye.context.runtime.SmallRyeContextPropagationRecorder;
@@ -67,11 +68,12 @@ void buildStatic(SmallRyeContextPropagationRecorder recorder)
6768
@Record(ExecutionTime.RUNTIME_INIT)
6869
void build(SmallRyeContextPropagationRecorder recorder,
6970
ExecutorBuildItem executorBuildItem,
71+
ShutdownContextBuildItem shutdownContextBuildItem,
7072
BuildProducer<FeatureBuildItem> feature,
7173
BuildProducer<SyntheticBeanBuildItem> syntheticBeans) {
7274
feature.produce(new FeatureBuildItem(Feature.SMALLRYE_CONTEXT_PROPAGATION));
7375

74-
recorder.configureRuntime(executorBuildItem.getExecutorProxy());
76+
recorder.configureRuntime(executorBuildItem.getExecutorProxy(), shutdownContextBuildItem);
7577

7678
// Synthetic bean for ManagedExecutor
7779
syntheticBeans.produce(

extensions/smallrye-context-propagation/runtime/src/main/java/io/quarkus/smallrye/context/runtime/SmallRyeContextPropagationRecorder.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.eclipse.microprofile.context.spi.ThreadContextProvider;
1111

1212
import io.quarkus.arc.Arc;
13+
import io.quarkus.runtime.ShutdownContext;
1314
import io.quarkus.runtime.annotations.Recorder;
1415
import io.smallrye.context.SmallRyeContextManager;
1516
import io.smallrye.context.SmallRyeContextManagerProvider;
@@ -40,7 +41,7 @@ public void configureStaticInit(List<ThreadContextProvider> discoveredProviders,
4041
builder.withContextManagerExtensions(discoveredExtensions.toArray(new ContextManagerExtension[0]));
4142
}
4243

43-
public void configureRuntime(ExecutorService executorService) {
44+
public void configureRuntime(ExecutorService executorService, ShutdownContext shutdownContext) {
4445
// associate the static init manager to the runtime CL
4546
ContextManagerProvider contextManagerProvider = ContextManagerProvider.instance();
4647
// finish building our manager
@@ -49,6 +50,12 @@ public void configureRuntime(ExecutorService executorService) {
4950
SmallRyeContextManager contextManager = builder.build();
5051

5152
contextManagerProvider.registerContextManager(contextManager, Thread.currentThread().getContextClassLoader());
53+
shutdownContext.addShutdownTask(new Runnable() {
54+
@Override
55+
public void run() {
56+
contextManagerProvider.releaseContextManager(contextManager);
57+
}
58+
});
5259
}
5360

5461
public Supplier<Object> initializeManagedExecutor(ExecutorService executorService) {

independent-projects/resteasy-reactive/client/runtime/src/main/java/org/jboss/resteasy/reactive/client/impl/UniInvoker.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.jboss.resteasy.reactive.client.impl;
22

33
import io.smallrye.mutiny.Uni;
4+
import java.util.concurrent.CompletionStage;
5+
import java.util.function.Supplier;
46
import javax.ws.rs.client.Entity;
57
import javax.ws.rs.core.GenericType;
68
import javax.ws.rs.core.Response;
@@ -16,7 +18,12 @@ public UniInvoker(InvocationBuilderImpl invocationBuilder) {
1618
@Override
1719
public <R> Uni<R> method(String name, Entity<?> entity, GenericType<R> responseType) {
1820
AsyncInvokerImpl invoker = (AsyncInvokerImpl) invocationBuilder.rx();
19-
return Uni.createFrom().completionStage(invoker.method(name, entity, responseType));
21+
return Uni.createFrom().completionStage(new Supplier<CompletionStage<R>>() {
22+
@Override
23+
public CompletionStage<R> get() {
24+
return invoker.method(name, entity, responseType);
25+
}
26+
});
2027
}
2128

2229
@Override

0 commit comments

Comments
 (0)