Skip to content

Commit 29780d9

Browse files
authored
fixing possible NPE in Apache Camel instrumentation (open-telemetry#2250)
1 parent 9592229 commit 29780d9

File tree

3 files changed

+71
-3
lines changed

3 files changed

+71
-3
lines changed

instrumentation/apache-camel-2.20/javaagent-unittests/apache-camel-2.20-javaagent-unittests.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ dependencies {
44
testImplementation project(':instrumentation:apache-camel-2.20:javaagent')
55
testImplementation group: 'org.apache.camel', name: 'camel-core', version: '2.20.1'
66
testImplementation group: 'org.apache.camel', name: 'camel-aws', version: '2.20.1'
7+
testImplementation group: 'org.apache.camel', name: 'camel-http', version: '2.20.1'
78

9+
testImplementation deps.opentelemetryTraceProps
810
testImplementation deps.opentelemetryExtAws
911
testImplementation group: 'org.assertj', name: 'assertj-core', version: '3.18.1'
1012
}

instrumentation/apache-camel-2.20/javaagent-unittests/src/test/groovy/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelPropagationUtilTest.java

+66-1
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,86 @@
77

88
import static org.assertj.core.api.Assertions.assertThat;
99

10+
import io.opentelemetry.api.GlobalOpenTelemetry;
11+
import io.opentelemetry.api.OpenTelemetry;
1012
import io.opentelemetry.api.trace.Span;
1113
import io.opentelemetry.api.trace.SpanContext;
1214
import io.opentelemetry.context.Context;
15+
import io.opentelemetry.context.propagation.ContextPropagators;
16+
import io.opentelemetry.extension.trace.propagation.JaegerPropagator;
17+
import java.net.URI;
1318
import java.util.Collections;
1419
import java.util.Map;
1520
import org.apache.camel.Endpoint;
1621
import org.apache.camel.component.aws.sqs.SqsComponent;
1722
import org.apache.camel.component.aws.sqs.SqsConfiguration;
1823
import org.apache.camel.component.aws.sqs.SqsEndpoint;
24+
import org.apache.camel.component.http.HttpComponent;
25+
import org.apache.camel.component.http.HttpEndpoint;
26+
import org.junit.jupiter.api.BeforeAll;
1927
import org.junit.jupiter.api.Test;
2028

2129
public class CamelPropagationUtilTest {
2230

31+
@BeforeAll
32+
public static void setUp() {
33+
GlobalOpenTelemetry.set(
34+
OpenTelemetry.getPropagating(ContextPropagators.create(JaegerPropagator.getInstance())));
35+
}
36+
37+
@Test
38+
public void shouldExtractHttpParentForHttpEndpoint() throws Exception {
39+
40+
// given
41+
Endpoint endpoint = new HttpEndpoint("", new HttpComponent(), URI.create(""));
42+
Map<String, Object> exchangeHeaders =
43+
Collections.singletonMap(
44+
"uber-trace-id", "1f7f8dab3f0043b1b9cf0a75caf57510:a13825abcb764bd3:0:1");
45+
46+
// when
47+
Context parent = CamelPropagationUtil.extractParent(exchangeHeaders, endpoint);
48+
49+
// then
50+
Span parentSpan = Span.fromContext(parent);
51+
SpanContext parentSpanContext = parentSpan.getSpanContext();
52+
assertThat(parentSpanContext.getTraceId()).isEqualTo("1f7f8dab3f0043b1b9cf0a75caf57510");
53+
assertThat(parentSpanContext.getSpanId()).isEqualTo("a13825abcb764bd3");
54+
}
55+
56+
@Test
57+
public void shouldNotFailExtractingNullHttpParentForHttpEndpoint() throws Exception {
58+
59+
// given
60+
Endpoint endpoint = new HttpEndpoint("", new HttpComponent(), URI.create(""));
61+
Map<String, Object> exchangeHeaders = Collections.singletonMap("uber-trace-id", null);
62+
63+
// when
64+
Context parent = CamelPropagationUtil.extractParent(exchangeHeaders, endpoint);
65+
66+
// then
67+
Span parentSpan = Span.fromContext(parent);
68+
SpanContext parentSpanContext = parentSpan.getSpanContext();
69+
assertThat(parentSpanContext.isValid()).isEqualTo(false);
70+
}
71+
72+
@Test
73+
public void shouldNotFailExtractingNullAwsParentForSqsEndpoint() {
74+
75+
// given
76+
Endpoint endpoint = new SqsEndpoint("", new SqsComponent(), new SqsConfiguration());
77+
Map<String, Object> exchangeHeaders = Collections.singletonMap("AWSTraceHeader", null);
78+
79+
// when
80+
Context parent = CamelPropagationUtil.extractParent(exchangeHeaders, endpoint);
81+
82+
// then
83+
Span parentSpan = Span.fromContext(parent);
84+
SpanContext parentSpanContext = parentSpan.getSpanContext();
85+
assertThat(parentSpanContext.isValid()).isEqualTo(false);
86+
}
87+
2388
@Test
24-
public void shouldExtractAwsParent() {
89+
public void shouldExtractAwsParentForSqsEndpoint() {
2590

2691
// given
2792
Endpoint endpoint = new SqsEndpoint("", new SqsComponent(), new SqsConfiguration());

instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelPropagationUtil.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,9 @@ public Iterable<String> keys(Map<String, Object> map) {
5858
}
5959

6060
@Override
61-
public String get(Map<String, Object> map, String s) {
62-
return (map.containsKey(s) ? map.get(s).toString() : null);
61+
public String get(Map<String, Object> map, String key) {
62+
Object value = map.get(key);
63+
return (value == null ? null : value.toString());
6364
}
6465
}
6566

0 commit comments

Comments
 (0)