Skip to content

Commit f4f80be

Browse files
committed
Fix IT showing that actor tracing is working.
Signed-off-by: Artur Souza <[email protected]>
1 parent 5645796 commit f4f80be

File tree

7 files changed

+90
-20
lines changed

7 files changed

+90
-20
lines changed

sdk-tests/src/test/java/io/dapr/it/DaprRun.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ private DaprRun(String testName,
106106
new Command(
107107
successMessage,
108108
buildDaprCommand(this.appName, serviceClass, ports, appProtocol),
109-
daprApiToken == null ? null : Map.of("DAPR_API_TOKEN", daprApiToken));
109+
buildEnvMap(daprApiToken));
110110
this.listCommand = new Command(
111111
this.appName,
112112
"dapr list");
@@ -340,6 +340,15 @@ private static String resolveDaprApiToken(Class serviceClass) {
340340
return DEFAULT_DAPR_API_TOKEN;
341341
}
342342

343+
private static final Map<String, String> buildEnvMap(String daprApiToken) {
344+
final Map<String, String> envMap = new HashMap<>();
345+
envMap.put("DAPR_HOST_IP", "127.0.01");
346+
if (daprApiToken != null) {
347+
envMap.put("DAPR_API_TOKEN", daprApiToken);
348+
}
349+
return Collections.unmodifiableMap(envMap);
350+
}
351+
343352
private static void assertListeningOnPort(int port) {
344353
System.out.printf("Checking port %d ...\n", port);
345354

Lines changed: 73 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,39 @@
11
package io.dapr.it.actors;
22

3+
import com.jayway.jsonpath.DocumentContext;
4+
import com.jayway.jsonpath.JsonPath;
35
import io.dapr.actors.ActorId;
46
import io.dapr.actors.client.ActorProxyBuilder;
57
import io.dapr.client.DaprClient;
68
import io.dapr.it.BaseIT;
79
import io.dapr.it.actors.app.MyActor;
810
import io.dapr.it.actors.app.MyActorService;
9-
import io.dapr.it.tracing.Validation;
1011
import io.dapr.it.tracing.http.OpenTelemetryConfig;
1112
import io.opentelemetry.api.OpenTelemetry;
1213
import io.opentelemetry.api.trace.Span;
1314
import io.opentelemetry.api.trace.SpanKind;
1415
import io.opentelemetry.api.trace.Tracer;
1516
import io.opentelemetry.context.Scope;
17+
import net.minidev.json.JSONArray;
18+
import okhttp3.HttpUrl;
19+
import okhttp3.OkHttpClient;
20+
import okhttp3.Request;
21+
import okhttp3.Response;
1622
import org.junit.jupiter.api.Test;
1723

1824
import java.util.UUID;
1925

2026
import static io.dapr.it.tracing.OpenTelemetry.createOpenTelemetry;
2127
import static io.dapr.it.tracing.OpenTelemetry.getReactorContext;
28+
import static org.junit.jupiter.api.Assertions.assertNotNull;
29+
import static org.junit.jupiter.api.Assertions.assertTrue;
2230

2331
public class ActorTracingIT extends BaseIT {
2432

2533
@Test
2634
public void testInvoke() throws Exception {
2735
var run = startDaprApp(
28-
ActorTracingIT.class.getSimpleName(),
36+
ActorTracingIT.class.getSimpleName()+"Server",
2937
MyActorService.SUCCESS_MESSAGE,
3038
MyActorService.class,
3139
true,
@@ -34,26 +42,83 @@ public void testInvoke() throws Exception {
3442
ActorTracingIT.class.getSimpleName()+"Client",
3543
60000);
3644

37-
OpenTelemetry openTelemetry = createOpenTelemetry(OpenTelemetryConfig.SERVICE_NAME);
45+
OpenTelemetry openTelemetry = createOpenTelemetry();
3846
Tracer tracer = openTelemetry.getTracer(OpenTelemetryConfig.TRACER_NAME);
3947
String spanName = UUID.randomUUID().toString();
4048
Span span = tracer.spanBuilder(spanName).setSpanKind(SpanKind.CLIENT).startSpan();
4149

4250
try (DaprClient client = run.newDaprClientBuilder().build()) {
43-
client.waitForSidecar(10000).block();
4451
MyActor myActor =
4552
new ActorProxyBuilder<>(
4653
"MyActorTest",
4754
MyActor.class,
4855
clientRun.newActorClient()).build(new ActorId("123456"));
4956
try (Scope scope = span.makeCurrent()) {
50-
myActor.say("hello world").contextWrite(getReactorContext(openTelemetry)).block();
57+
client.waitForSidecar(10000).block();
58+
myActor.say("hello world")
59+
.contextWrite(getReactorContext(openTelemetry))
60+
.block();
5161
}
62+
} finally {
63+
span.end();
5264
}
5365

54-
span.end();
55-
56-
Validation.validate(spanName, "calllocal/tracingithttp-service/say");
66+
Validation.validateGrandChild(
67+
spanName,
68+
"/dapr.proto.runtime.v1.dapr/invokeactor",
69+
"callactor/myactortest/say");
5770
}
5871

72+
private static final class Validation {
73+
74+
private static final OkHttpClient HTTP_CLIENT = new OkHttpClient();
75+
76+
/**
77+
* JSON Path for main span Id.
78+
*/
79+
public static final String JSONPATH_MAIN_SPAN_ID = "$..[?(@.name == \"%s\")]['id']";
80+
81+
/**
82+
* JSON Path for child span.
83+
*/
84+
public static final String JSONPATH_PARENT_SPAN_ID =
85+
"$..[?(@.parentId=='%s' && @.name=='%s')]['id']";
86+
87+
public static void validateGrandChild(String grandParentSpanName, String parentSpanName, String grandChildSpanName) throws Exception {
88+
// Must wait for some time to make sure Zipkin receives all spans.
89+
Thread.sleep(10000);
90+
HttpUrl.Builder urlBuilder = new HttpUrl.Builder();
91+
urlBuilder.scheme("http")
92+
.host("localhost")
93+
.port(9411)
94+
.addPathSegments("api/v2/traces")
95+
.addQueryParameter("limit", "100");
96+
Request.Builder requestBuilder = new Request.Builder()
97+
.url(urlBuilder.build());
98+
requestBuilder.method("GET", null);
99+
100+
Request request = requestBuilder.build();
101+
102+
Response response = HTTP_CLIENT.newCall(request).execute();
103+
DocumentContext documentContext = JsonPath.parse(response.body().string());
104+
String grandParentSpanId = readOne(documentContext, String.format(JSONPATH_MAIN_SPAN_ID, grandParentSpanName)).toString();
105+
assertNotNull(grandParentSpanId);
106+
107+
String parentSpanId = readOne(documentContext, String.format(JSONPATH_PARENT_SPAN_ID, grandParentSpanId, parentSpanName))
108+
.toString();
109+
assertNotNull(parentSpanId);
110+
111+
String grandChildSpanId = readOne(documentContext, String.format(JSONPATH_PARENT_SPAN_ID, parentSpanId, grandChildSpanName))
112+
.toString();
113+
assertNotNull(grandChildSpanId);
114+
}
115+
116+
private static Object readOne(DocumentContext documentContext, String path) {
117+
JSONArray arr = documentContext.read(path);
118+
assertTrue(arr.size() > 0);
119+
120+
return arr.get(0);
121+
}
122+
123+
}
59124
}

sdk-tests/src/test/java/io/dapr/it/tracing/OpenTelemetry.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,9 @@ public class OpenTelemetry {
3434

3535
/**
3636
* Creates an opentelemetry instance.
37-
* @param serviceName Name of the service in Zipkin
3837
* @return OpenTelemetry.
3938
*/
40-
public static io.opentelemetry.api.OpenTelemetry createOpenTelemetry(String serviceName) throws InterruptedException {
39+
public static io.opentelemetry.api.OpenTelemetry createOpenTelemetry() throws InterruptedException {
4140
waitForZipkin();
4241
String httpUrl = String.format("http://localhost:%d", ZIPKIN_PORT);
4342
ZipkinSpanExporter zipkinExporter = ZipkinSpanExporter.builder().setEndpoint(httpUrl + ENDPOINT_V2_SPANS).build();

sdk-tests/src/test/java/io/dapr/it/tracing/Validation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public final class Validation {
4444
public static final String JSONPATH_SLEEP_SPAN_ID =
4545
"$..[?(@.parentId=='%s' && @.duration > 1000000 && @.name=='%s')]['id']";
4646

47-
public static void validate(String spanName, String sleepSpanName) throws Exception {
47+
public static void validateSleep(String spanName, String sleepSpanName) throws Exception {
4848
// Must wait for some time to make sure Zipkin receives all spans.
4949
Thread.sleep(10000);
5050
HttpUrl.Builder urlBuilder = new HttpUrl.Builder();

sdk-tests/src/test/java/io/dapr/it/tracing/grpc/TracingIT.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.dapr.it.tracing.grpc;
22

33
import io.dapr.client.DaprClient;
4-
import io.dapr.client.DaprClientBuilder;
54
import io.dapr.client.domain.HttpExtension;
65
import io.dapr.it.AppRun;
76
import io.dapr.it.BaseIT;
@@ -42,7 +41,7 @@ public void setup() throws Exception {
4241

4342
@Test
4443
public void testInvoke() throws Exception {
45-
OpenTelemetry openTelemetry = createOpenTelemetry("service over grpc");
44+
OpenTelemetry openTelemetry = createOpenTelemetry();
4645
Tracer tracer = openTelemetry.getTracer("grpc integration test tracer");
4746
String spanName = UUID.randomUUID().toString();
4847
Span span = tracer.spanBuilder(spanName).setSpanKind(SpanKind.CLIENT).startSpan();
@@ -59,6 +58,6 @@ public void testInvoke() throws Exception {
5958

6059
span.end();
6160

62-
Validation.validate(spanName, "calllocal/tracingitgrpc-service/sleepovergrpc");
61+
Validation.validateSleep(spanName, "calllocal/tracingitgrpc-service/sleepovergrpc");
6362
}
6463
}

sdk-tests/src/test/java/io/dapr/it/tracing/http/OpenTelemetryConfig.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,9 @@ public class OpenTelemetryConfig {
2828

2929
public static final String TRACER_NAME = "integration testing tracer";
3030

31-
public static final String SERVICE_NAME = "integration testing service over http";
32-
3331
@Bean
3432
public OpenTelemetry initOpenTelemetry() throws InterruptedException {
35-
return io.dapr.it.tracing.OpenTelemetry.createOpenTelemetry(SERVICE_NAME);
33+
return io.dapr.it.tracing.OpenTelemetry.createOpenTelemetry();
3634
}
3735

3836
@Bean

sdk-tests/src/test/java/io/dapr/it/tracing/http/TracingIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void setup() throws Exception {
4141

4242
@Test
4343
public void testInvoke() throws Exception {
44-
OpenTelemetry openTelemetry = createOpenTelemetry(OpenTelemetryConfig.SERVICE_NAME);
44+
OpenTelemetry openTelemetry = createOpenTelemetry();
4545
Tracer tracer = openTelemetry.getTracer(OpenTelemetryConfig.TRACER_NAME);
4646
String spanName = UUID.randomUUID().toString();
4747
Span span = tracer.spanBuilder(spanName).setSpanKind(SpanKind.CLIENT).startSpan();
@@ -57,7 +57,7 @@ public void testInvoke() throws Exception {
5757

5858
span.end();
5959

60-
Validation.validate(spanName, "calllocal/tracingithttp-service/sleep");
60+
Validation.validateSleep(spanName, "calllocal/tracingithttp-service/sleep");
6161
}
6262

6363
}

0 commit comments

Comments
 (0)