@@ -234,10 +234,10 @@ index cb19d1e568..12ed174bb2 100644
234234 assertThat(spanContext.getSpanId()).isEqualTo("00f067aa0ba902b7");
235235diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java
236236new file mode 100644
237- index 0000000000..15021e02f0
237+ index 0000000000..dc1fdeb302
238238--- /dev/null
239239+++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java
240- @@ -0,0 +1,262 @@
240+ @@ -0,0 +1,310 @@
241241+ /*
242242+ * Copyright The OpenTelemetry Authors
243243+ * SPDX-License-Identifier: Apache-2.0
@@ -276,21 +276,29 @@ index 0000000000..15021e02f0
276276+ @SystemStub final EnvironmentVariables environmentVariables = new EnvironmentVariables();
277277+ @SystemStub final SystemProperties systemProperties = new SystemProperties();
278278+
279- + private static final OpenTelemetry OTEL =
279+ + private static final OpenTelemetry OTEL_WITH_B3_PROPAGATOR =
280280+ OpenTelemetry.propagating(ContextPropagators.create(B3Propagator.injectingSingleHeader()));
281281+
282- + private static final AwsLambdaFunctionInstrumenter INSTRUMENTER =
283- + AwsLambdaFunctionInstrumenterFactory.createInstrumenter(OTEL );
282+ + private static final AwsLambdaFunctionInstrumenter INSTRUMENTER_WITH_B3_PROPAGATOR =
283+ + AwsLambdaFunctionInstrumenterFactory.createInstrumenter(OTEL_WITH_B3_PROPAGATOR );
284284+
285285+ // Only for new lambda context tests
286- + private static final OpenTelemetry OTEL_WITH_XRAY =
286+ + private static final OpenTelemetry OTEL_WITH_B3_XRAY_PROPAGATORS =
287287+ OpenTelemetry.propagating(
288288+ ContextPropagators.create(
289289+ TextMapPropagator.composite(
290290+ B3Propagator.injectingSingleHeader(), AwsXrayPropagator.getInstance())));
291+ + private static final OpenTelemetry OTEL_WITH_XRAY_B3_PROPAGATORS =
292+ + OpenTelemetry.propagating(
293+ + ContextPropagators.create(
294+ + TextMapPropagator.composite(
295+ + AwsXrayPropagator.getInstance(), B3Propagator.injectingSingleHeader())));
291296+
292- + private static final AwsLambdaFunctionInstrumenter INSTRUMENTER_WITH_XRAY =
293- + AwsLambdaFunctionInstrumenterFactory.createInstrumenter(OTEL_WITH_XRAY);
297+ + private static final AwsLambdaFunctionInstrumenter INSTRUMENTER_WITH_B3_XRAY_PROPAGATORS =
298+ + AwsLambdaFunctionInstrumenterFactory.createInstrumenter(OTEL_WITH_B3_XRAY_PROPAGATORS);
299+ +
300+ + private static final AwsLambdaFunctionInstrumenter INSTRUMENTER_WITH_XRAY_B3_PROPAGATORS =
301+ + AwsLambdaFunctionInstrumenterFactory.createInstrumenter(OTEL_WITH_XRAY_B3_PROPAGATORS);
294302+
295303+ private static final Context mockLambdaContext = mock(Context.class);
296304+
@@ -311,7 +319,7 @@ index 0000000000..15021e02f0
311319+
312320+ // when
313321+ io.opentelemetry.context.Context context =
314- + ParentContextExtractor.extract(headers, INSTRUMENTER , mockLambdaContext);
322+ + ParentContextExtractor.extract(headers, INSTRUMENTER_WITH_B3_PROPAGATOR , mockLambdaContext);
315323+ // then
316324+ Span span = Span.fromContext(context);
317325+ SpanContext spanContext = span.getSpanContext();
@@ -338,7 +346,8 @@ index 0000000000..15021e02f0
338346+
339347+ // when
340348+ io.opentelemetry.context.Context context =
341- + ParentContextExtractor.extract(headers, INSTRUMENTER_WITH_XRAY, mockLambdaContext);
349+ + ParentContextExtractor.extract(
350+ + headers, INSTRUMENTER_WITH_B3_XRAY_PROPAGATORS, mockLambdaContext);
342351+ // then
343352+ Span span = Span.fromContext(context);
344353+ SpanContext spanContext = span.getSpanContext();
@@ -362,7 +371,7 @@ index 0000000000..15021e02f0
362371+
363372+ // when
364373+ io.opentelemetry.context.Context context =
365- + ParentContextExtractor.extract(headers, INSTRUMENTER , mockLambdaContext);
374+ + ParentContextExtractor.extract(headers, INSTRUMENTER_WITH_B3_PROPAGATOR , mockLambdaContext);
366375+ // then
367376+ Span span = Span.fromContext(context);
368377+ SpanContext spanContext = span.getSpanContext();
@@ -385,7 +394,7 @@ index 0000000000..15021e02f0
385394+ // when
386395+ io.opentelemetry.context.Context context =
387396+ ParentContextExtractor.extract(
388- + ImmutableMap.of(), INSTRUMENTER_WITH_XRAY , mockLambdaContext);
397+ + ImmutableMap.of(), INSTRUMENTER_WITH_B3_XRAY_PROPAGATORS , mockLambdaContext);
389398+ // then
390399+ Span span = Span.fromContext(context);
391400+ SpanContext spanContext = span.getSpanContext();
@@ -399,13 +408,14 @@ index 0000000000..15021e02f0
399408+ void shouldUseLambdaContextToExtractXrayTraceId() {
400409+ // given
401410+ Map<String, String> headers = ImmutableMap.of();
402- + Context mockLambdaContext = mock(Context.class);
403- + when(mockLambdaContext .getXrayTraceId())
411+ + Context mockLambdaContextWithXrayTraceId = mock(Context.class);
412+ + when(mockLambdaContextWithXrayTraceId .getXrayTraceId())
404413+ .thenReturn("Root=1-4fd0b613-1f19f39af59518d127b0cafe;Parent=0000000000000123;Sampled=1");
405414+
406415+ // when
407416+ io.opentelemetry.context.Context context =
408- + ParentContextExtractor.extract(headers, INSTRUMENTER_WITH_XRAY, mockLambdaContext);
417+ + ParentContextExtractor.extract(
418+ + headers, INSTRUMENTER_WITH_B3_XRAY_PROPAGATORS, mockLambdaContextWithXrayTraceId);
409419+ // then
410420+ Span span = Span.fromContext(context);
411421+ SpanContext spanContext = span.getSpanContext();
@@ -418,16 +428,17 @@ index 0000000000..15021e02f0
418428+ void shouldPreferLambdaContextOverSystemProperty() {
419429+ // given
420430+ Map<String, String> headers = ImmutableMap.of();
421- + Context mockLambdaContext = mock(Context.class);
422- + when(mockLambdaContext .getXrayTraceId())
431+ + Context mockLambdaContextWithXrayTraceId = mock(Context.class);
432+ + when(mockLambdaContextWithXrayTraceId .getXrayTraceId())
423433+ .thenReturn("Root=1-4fd0b613-1f19f39af59518d127b0cafe;Parent=0000000000000123;Sampled=1");
424434+ systemProperties.set(
425435+ "com.amazonaws.xray.traceHeader",
426436+ "Root=1-8a3c60f7-d188f8fa79d48a391a778fa7;Parent=0000000000000789;Sampled=1");
427437+
428438+ // when
429439+ io.opentelemetry.context.Context context =
430- + ParentContextExtractor.extract(headers, INSTRUMENTER_WITH_XRAY, mockLambdaContext);
440+ + ParentContextExtractor.extract(
441+ + headers, INSTRUMENTER_WITH_B3_XRAY_PROPAGATORS, mockLambdaContextWithXrayTraceId);
431442+ // then
432443+ Span span = Span.fromContext(context);
433444+ SpanContext spanContext = span.getSpanContext();
@@ -440,16 +451,17 @@ index 0000000000..15021e02f0
440451+ void shouldPreferLambdaContextOverEnvVariable() {
441452+ // given
442453+ Map<String, String> headers = ImmutableMap.of();
443- + Context mockLambdaContext = mock(Context.class);
444- + when(mockLambdaContext .getXrayTraceId())
454+ + Context mockLambdaContextWithXrayTraceId = mock(Context.class);
455+ + when(mockLambdaContextWithXrayTraceId .getXrayTraceId())
445456+ .thenReturn("Root=1-4fd0b613-1f19f39af59518d127b0cafe;Parent=0000000000000123;Sampled=1");
446457+ environmentVariables.set(
447458+ "_X_AMZN_TRACE_ID",
448459+ "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=0000000000000456;Sampled=1");
449460+
450461+ // when
451462+ io.opentelemetry.context.Context context =
452- + ParentContextExtractor.extract(headers, INSTRUMENTER_WITH_XRAY, mockLambdaContext);
463+ + ParentContextExtractor.extract(
464+ + headers, INSTRUMENTER_WITH_B3_XRAY_PROPAGATORS, mockLambdaContextWithXrayTraceId);
453465+ // then
454466+ Span span = Span.fromContext(context);
455467+ SpanContext spanContext = span.getSpanContext();
@@ -459,18 +471,53 @@ index 0000000000..15021e02f0
459471+ }
460472+
461473+ @Test
474+ + void shouldPreferHttpOverXrayIdSetByLambdaContext() {
475+ + // given
476+ + Map<String, String> headers =
477+ + ImmutableMap.of(
478+ + "X-b3-traceId",
479+ + "4fd0b6131f19f39af59518d127b0cafe",
480+ + "x-b3-spanid",
481+ + "0000000000000123",
482+ + "X-B3-Sampled",
483+ + "true");
484+ + environmentVariables.set(
485+ + "_X_AMZN_TRACE_ID",
486+ + "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=0000000000000456;Sampled=1");
487+ + systemProperties.set(
488+ + "com.amazonaws.xray.traceHeader",
489+ + "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=0000000000000456;Sampled=1");
490+ + Context mockLambdaContextWithXrayTraceId = mock(Context.class);
491+ + when(mockLambdaContextWithXrayTraceId.getXrayTraceId())
492+ + .thenReturn("Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=0000000000000456;Sampled=1");
493+ +
494+ + // when
495+ + io.opentelemetry.context.Context context =
496+ + ParentContextExtractor.extract(
497+ + headers, INSTRUMENTER_WITH_XRAY_B3_PROPAGATORS, mockLambdaContextWithXrayTraceId);
498+ + // then
499+ + Span span = Span.fromContext(context);
500+ + SpanContext spanContext = span.getSpanContext();
501+ + assertThat(spanContext.isValid()).isTrue();
502+ + assertThat(spanContext.isValid()).isTrue();
503+ + assertThat(spanContext.getSpanId()).isEqualTo("0000000000000123");
504+ + assertThat(spanContext.getTraceId()).isEqualTo("4fd0b6131f19f39af59518d127b0cafe");
505+ + }
506+ +
507+ + @Test
462508+ void shouldFallbackToSystemPropertyIfContextTraceIdIsNull() {
463509+ // given
464510+ Map<String, String> headers = ImmutableMap.of();
465- + Context mockLambdaContext = mock(Context.class);
466- + when(mockLambdaContext .getXrayTraceId()).thenReturn(null);
511+ + Context mockLambdaContextWithXrayTraceId = mock(Context.class);
512+ + when(mockLambdaContextWithXrayTraceId .getXrayTraceId()).thenReturn(null);
467513+ systemProperties.set(
468514+ "com.amazonaws.xray.traceHeader",
469515+ "Root=1-8a3c60f7-d188f8fa79d48a391a778fa7;Parent=0000000000000789;Sampled=1");
470516+
471517+ // when
472518+ io.opentelemetry.context.Context context =
473- + ParentContextExtractor.extract(headers, INSTRUMENTER_WITH_XRAY, mockLambdaContext);
519+ + ParentContextExtractor.extract(
520+ + headers, INSTRUMENTER_WITH_B3_XRAY_PROPAGATORS, mockLambdaContextWithXrayTraceId);
474521+ // then
475522+ Span span = Span.fromContext(context);
476523+ SpanContext spanContext = span.getSpanContext();
@@ -483,15 +530,16 @@ index 0000000000..15021e02f0
483530+ void shouldFallbackToSystemPropertyIfContextTraceIdIsEmptyString() {
484531+ // given
485532+ Map<String, String> headers = ImmutableMap.of();
486- + Context mockLambdaContext = mock(Context.class);
487- + when(mockLambdaContext .getXrayTraceId()).thenReturn("");
533+ + Context mockLambdaContextWithXrayTraceId = mock(Context.class);
534+ + when(mockLambdaContextWithXrayTraceId .getXrayTraceId()).thenReturn("");
488535+ systemProperties.set(
489536+ "com.amazonaws.xray.traceHeader",
490537+ "Root=1-8a3c60f7-d188f8fa79d48a391a778fa7;Parent=0000000000000789;Sampled=1");
491538+
492539+ // when
493540+ io.opentelemetry.context.Context context =
494- + ParentContextExtractor.extract(headers, INSTRUMENTER_WITH_XRAY, mockLambdaContext);
541+ + ParentContextExtractor.extract(
542+ + headers, INSTRUMENTER_WITH_B3_XRAY_PROPAGATORS, mockLambdaContextWithXrayTraceId);
495543+ // then
496544+ Span span = Span.fromContext(context);
497545+ SpanContext spanContext = span.getSpanContext();
0 commit comments