Skip to content

Commit 1934b72

Browse files
committed
feat(java-concurrent): Add smoke test for Thread.ofVirtualThread()
1 parent af48d68 commit 1934b72

File tree

8 files changed

+83
-25
lines changed

8 files changed

+83
-25
lines changed

dd-smoke-tests/concurrent/java-21/src/main/java/datadog/smoketest/concurrent/ConcurrentApp.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public static void main(String[] args) {
1717

1818
private static FibonacciCalculator getCalculator(String name) {
1919
return switch (name) {
20+
case "virtualThreadStart" -> new VirtualThreadStartCalculator();
2021
case "virtualThreadExecute" -> new VirtualThreadExecuteCalculator();
2122
case "virtualThreadSubmitRunnable" -> new VirtualThreadSubmitRunnableCalculator();
2223
case "virtualThreadSubmitCallable" -> new VirtualThreadSubmitCallableCalculator();

dd-smoke-tests/concurrent/java-21/src/main/java/datadog/smoketest/concurrent/VirtualThreadExecuteCalculator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ public long computeFibonacci(int n) throws ExecutionException, InterruptedExcept
2020
return task.result.get();
2121
}
2222

23+
@Override
24+
public void close() {
25+
this.executor.shutdown();
26+
}
27+
2328
public class FibonacciExecuteTask implements Runnable {
2429
private final long n;
2530
private final CompletableFuture<Long> result;
@@ -46,9 +51,4 @@ public void run() {
4651
}
4752
}
4853
}
49-
50-
@Override
51-
public void close() {
52-
this.executor.shutdown();
53-
}
5454
}

dd-smoke-tests/concurrent/java-21/src/main/java/datadog/smoketest/concurrent/VirtualThreadInvokeAllCalculator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ public long computeFibonacci(int n) throws ExecutionException, InterruptedExcept
2323
return this.executor.invokeAll(of(task)).getFirst().get();
2424
}
2525

26+
@Override
27+
public void close() {
28+
this.executor.shutdown();
29+
}
30+
2631
public class FibonacciSubmitTask implements Callable<Long> {
2732
private final long n;
2833

@@ -41,9 +46,4 @@ public Long call() throws ExecutionException, InterruptedException {
4146
return futures.getFirst().get() + futures.getLast().get();
4247
}
4348
}
44-
45-
@Override
46-
public void close() {
47-
this.executor.shutdown();
48-
}
4949
}

dd-smoke-tests/concurrent/java-21/src/main/java/datadog/smoketest/concurrent/VirtualThreadInvokeAnyCalculator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ public long computeFibonacci(int n) throws ExecutionException, InterruptedExcept
2121
return this.executor.invokeAny(of(task));
2222
}
2323

24+
@Override
25+
public void close() {
26+
this.executor.shutdown();
27+
}
28+
2429
public class FibonacciSubmitTask implements Callable<Long> {
2530
private final long n;
2631

@@ -38,9 +43,4 @@ public Long call() throws ExecutionException, InterruptedException {
3843
return executor.invokeAny(of(task1)) + executor.invokeAny(of(task2));
3944
}
4045
}
41-
42-
@Override
43-
public void close() {
44-
this.executor.shutdown();
45-
}
4646
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package datadog.smoketest.concurrent;
2+
3+
import io.opentelemetry.instrumentation.annotations.WithSpan;
4+
import java.util.concurrent.CompletableFuture;
5+
import java.util.concurrent.ExecutionException;
6+
7+
public class VirtualThreadStartCalculator implements FibonacciCalculator {
8+
@Override
9+
public long computeFibonacci(int n) throws ExecutionException, InterruptedException {
10+
FibonacciExecuteTask task = new FibonacciExecuteTask(n);
11+
Thread.startVirtualThread(task);
12+
return task.result.get();
13+
}
14+
15+
@Override
16+
public void close() {
17+
}
18+
19+
public static class FibonacciExecuteTask implements Runnable {
20+
private final long n;
21+
private final CompletableFuture<Long> result;
22+
23+
public FibonacciExecuteTask(long n) {
24+
this.n = n;
25+
this.result = new CompletableFuture<>();
26+
}
27+
28+
@WithSpan("compute")
29+
public void run() {
30+
if (this.n <= 1) {
31+
this.result.complete(this.n);
32+
return;
33+
}
34+
FibonacciExecuteTask task1 = new FibonacciExecuteTask(this.n - 1);
35+
FibonacciExecuteTask task2 = new FibonacciExecuteTask(this.n - 2);
36+
Thread.startVirtualThread(task1);
37+
Thread.startVirtualThread(task2);
38+
try {
39+
this.result.complete(task1.result.get() + task2.result.get());
40+
} catch (InterruptedException | ExecutionException e) {
41+
this.result.completeExceptionally(e);
42+
}
43+
}
44+
}
45+
}

dd-smoke-tests/concurrent/java-21/src/main/java/datadog/smoketest/concurrent/VirtualThreadSubmitCallableCalculator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ public long computeFibonacci(int n) throws ExecutionException, InterruptedExcept
2020
return this.executor.submit(task).get();
2121
}
2222

23+
@Override
24+
public void close() {
25+
this.executor.shutdown();
26+
}
27+
2328
public class FibonacciSubmitTask implements Callable<Long> {
2429
private final long n;
2530

@@ -39,9 +44,4 @@ public Long call() throws ExecutionException, InterruptedException {
3944
return future1.get() + future2.get();
4045
}
4146
}
42-
43-
@Override
44-
public void close() {
45-
this.executor.shutdown();
46-
}
4747
}

dd-smoke-tests/concurrent/java-21/src/main/java/datadog/smoketest/concurrent/VirtualThreadSubmitRunnableCalculator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ public long computeFibonacci(int n) throws ExecutionException, InterruptedExcept
2020
return task.result.get();
2121
}
2222

23+
@Override
24+
public void close() {
25+
this.executor.shutdown();
26+
}
27+
2328
public class FibonacciSubmitTask implements Runnable {
2429
private final long n;
2530
private final CompletableFuture<Long> result;
@@ -46,9 +51,4 @@ public void run() {
4651
}
4752
}
4853
}
49-
50-
@Override
51-
public void close() {
52-
this.executor.shutdown();
53-
}
5454
}

dd-smoke-tests/concurrent/java-21/src/test/groovy/datadog/smoketest/concurrent/VirtualThreadTest.groovy

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
package datadog.smoketest.concurrent
22

3+
class VirtualThreadStartTest extends AbstractConcurrentTest {
4+
@Override
5+
protected List<String> getTestArguments() {
6+
return ['virtualThreadStart']
7+
}
8+
9+
def 'test Thread.startVirtualThread() runnable'() {
10+
expect:
11+
receivedCorrectTrace()
12+
}
13+
}
14+
315
class VirtualThreadExecuteTest extends AbstractConcurrentTest {
416
@Override
517
protected List<String> getTestArguments() {

0 commit comments

Comments
 (0)