Skip to content

Commit d4216d5

Browse files
committed
add additional unit test to test 'xray,b3' propagator ordering
1 parent e502daa commit d4216d5

File tree

1 file changed

+75
-27
lines changed

1 file changed

+75
-27
lines changed

lambda-layer/patches/opentelemetry-java-instrumentation.patch

Lines changed: 75 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -234,10 +234,10 @@ index cb19d1e568..12ed174bb2 100644
234234
assertThat(spanContext.getSpanId()).isEqualTo("00f067aa0ba902b7");
235235
diff --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
236236
new 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

Comments
 (0)