From 28b2307c9eb20ccd030d275fc22c3c18930f7d1c Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Mon, 2 Jun 2025 10:29:10 -0700 Subject: [PATCH 1/9] check for undefined before setting xray trace --- .../src/patches/instrumentation-patch.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts b/aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts index 48cfa289..5c1c5611 100644 --- a/aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts +++ b/aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts @@ -311,9 +311,12 @@ function patchAwsSdkInstrumentation(instrumentation: Instrumentation): void { // Need to set capitalized version of the trace id to ensure that the Recursion Detection Middleware // of aws-sdk-js-v3 will detect the propagated X-Ray Context // See: https://github.com/aws/aws-sdk-js-v3/blob/v3.768.0/packages/middleware-recursion-detection/src/index.ts#L13 - middlewareArgs.request.headers[AWSXRAY_TRACE_ID_HEADER_CAPITALIZED] = - middlewareArgs.request.headers[AWSXRAY_TRACE_ID_HEADER]; - delete middlewareArgs.request.headers[AWSXRAY_TRACE_ID_HEADER]; + const xray_trace_id = middlewareArgs.request.headers[AWSXRAY_TRACE_ID_HEADER]; + + if (xray_trace_id) { + middlewareArgs.request.headers[AWSXRAY_TRACE_ID_HEADER_CAPITALIZED] = xray_trace_id; + delete middlewareArgs.request.headers[AWSXRAY_TRACE_ID_HEADER]; + } const result = await next(middlewareArgs); return result; }, From 3b83b2b4f274a4c09647f9e2bb9508d1317a200e Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Tue, 3 Jun 2025 02:23:12 -0700 Subject: [PATCH 2/9] add unit tests --- .../src/patches/instrumentation-patch.ts | 6 +- .../patches/instrumentation-patch.test.ts | 83 +++++++++++++------ .../sample-app-express-server.js | 22 +++-- 3 files changed, 78 insertions(+), 33 deletions(-) diff --git a/aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts b/aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts index 5c1c5611..922b40bd 100644 --- a/aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts +++ b/aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts @@ -311,10 +311,10 @@ function patchAwsSdkInstrumentation(instrumentation: Instrumentation): void { // Need to set capitalized version of the trace id to ensure that the Recursion Detection Middleware // of aws-sdk-js-v3 will detect the propagated X-Ray Context // See: https://github.com/aws/aws-sdk-js-v3/blob/v3.768.0/packages/middleware-recursion-detection/src/index.ts#L13 - const xray_trace_id = middlewareArgs.request.headers[AWSXRAY_TRACE_ID_HEADER]; + const xrayTraceId = middlewareArgs.request.headers[AWSXRAY_TRACE_ID_HEADER]; - if (xray_trace_id) { - middlewareArgs.request.headers[AWSXRAY_TRACE_ID_HEADER_CAPITALIZED] = xray_trace_id; + if (xrayTraceId) { + middlewareArgs.request.headers[AWSXRAY_TRACE_ID_HEADER_CAPITALIZED] = xrayTraceId; delete middlewareArgs.request.headers[AWSXRAY_TRACE_ID_HEADER]; } const result = await next(middlewareArgs); diff --git a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts index eb602749..cea828fc 100644 --- a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts +++ b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts @@ -535,34 +535,67 @@ describe('InstrumentationPatchTest', () => { let lambda: Lambda; const region = 'us-east-1'; - it('overridden _getV3SmithyClientSendPatch updates MiddlewareStack', async () => { - const mockedMiddlewareStackInternal: any = []; - const mockedMiddlewareStack = { - add: (arg1: any, arg2: any) => mockedMiddlewareStackInternal.push([arg1, arg2]), - }; - const send = extractAwsSdkInstrumentation(PATCHED_INSTRUMENTATIONS) - ['_getV3SmithyClientSendPatch']((...args: unknown[]) => Promise.resolve()) - .bind({ middlewareStack: mockedMiddlewareStack }); - sinon - .stub(AWSXRayPropagator.prototype, 'inject') - .callsFake((context: OtelContext, carrier: unknown, setter: TextMapSetter) => { - (carrier as any)['isCarrierModified'] = 'carrierIsModified'; - }); + describe('overridden _getV3SmithyClientSendPatch updates MiddlewareStack', async () => { + let mockedMiddlewareStackInternal: any; + let mockedMiddlewareStack; + let send; + + beforeEach(async () => { + // Clear environment variables before each test + mockedMiddlewareStackInternal = []; + mockedMiddlewareStack = { + add: (arg1: any, arg2: any) => mockedMiddlewareStackInternal.push([arg1, arg2]), + }; + send = extractAwsSdkInstrumentation(PATCHED_INSTRUMENTATIONS) + ['_getV3SmithyClientSendPatch']((...args: unknown[]) => Promise.resolve()) + .bind({ middlewareStack: mockedMiddlewareStack }); + + sinon + .stub(AWSXRayPropagator.prototype, 'inject') + .callsFake((context: OtelContext, carrier: unknown, setter: TextMapSetter) => { + (carrier as any)['isCarrierModified'] = 'carrierIsModified'; + }); + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + await send({}, null); + }); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - await send({}, null); + it('Injecting with existing X-Ray header', async () => { + const existingHeader = 'test-trace-header'; + const middlewareArgsWithHeader: any = { + request: { + headers: { [AWSXRAY_TRACE_ID_HEADER]: existingHeader }, + }, + }; + await mockedMiddlewareStackInternal[0][0]((arg: any) => Promise.resolve(), null)(middlewareArgsWithHeader); - const middlewareArgs: any = { - request: { - headers: {}, - }, - }; - await mockedMiddlewareStackInternal[0][0]((arg: any) => Promise.resolve(), null)(middlewareArgs); + sinon.restore(); + + expect(middlewareArgsWithHeader.request.headers['isCarrierModified']).toEqual('carrierIsModified'); + expect(middlewareArgsWithHeader.request.headers).not.toHaveProperty(AWSXRAY_TRACE_ID_HEADER); + expect(middlewareArgsWithHeader.request.headers).toHaveProperty('X-Amzn-Trace-Id'); + expect(middlewareArgsWithHeader.request.headers['X-Amzn-Trace-Id']).toEqual(existingHeader); + + expect(mockedMiddlewareStackInternal[0][1].name).toEqual('_adotInjectXrayContextMiddleware'); + }); - sinon.restore(); - expect(middlewareArgs.request.headers['isCarrierModified']).toEqual('carrierIsModified'); - expect(mockedMiddlewareStackInternal[0][1].name).toEqual('_adotInjectXrayContextMiddleware'); + it('Injecting without existing X-Ray header', async () => { + const middlewareArgsNoHeader: any = { + request: { + headers: {}, + }, + }; + + await mockedMiddlewareStackInternal[0][0]((arg: any) => Promise.resolve(), null)(middlewareArgsNoHeader); + + sinon.restore(); + + expect(middlewareArgsNoHeader.request.headers['isCarrierModified']).toEqual('carrierIsModified'); + expect(middlewareArgsNoHeader.request.headers).not.toHaveProperty('X-Amzn-Trace-Id'); + + expect(mockedMiddlewareStackInternal[0][1].name).toEqual('_adotInjectXrayContextMiddleware'); + }); }); it('injects trace context header into request via propagator', async () => { diff --git a/sample-applications/simple-express-server/sample-app-express-server.js b/sample-applications/simple-express-server/sample-app-express-server.js index 79905c87..4d9f4f9d 100644 --- a/sample-applications/simple-express-server/sample-app-express-server.js +++ b/sample-applications/simple-express-server/sample-app-express-server.js @@ -2,19 +2,27 @@ const http = require('http'); const express = require('express'); +const bunyan = require('bunyan'); const { S3Client, ListObjectsCommand } = require('@aws-sdk/client-s3'); const PORT = parseInt(process.env.SAMPLE_APP_PORT || '8080', 10); const app = express(); +// Uses bunyan logger +const logger = bunyan.createLogger({name: 'express-app', level: 'info'}); + async function getRandomNumber(min, max) { return Math.floor(Math.random() * (max - min) + min); } +// Generate logs in your endpoints app.get('/rolldice', (req, res) => { + getRandomNumber(1, 6).then((val) => { - res.send(`rolldice: ${val.toString()}`); + const msg = `rolldice: ${val.toString()}` + logger.info(msg); + res.send(msg); }); }); @@ -29,7 +37,9 @@ app.get('/http', (req, res) => { const httpRequest = http.request(options, (rs) => { rs.setEncoding('utf8'); rs.on('data', (result) => { - res.send(`random value from http request: ${result}`); + const msg = `random value from http request: ${result}` + logger.info(msg); + res.send(msg); }); rs.on('error', console.log); }); @@ -45,14 +55,16 @@ app.get('/aws-sdk-s3', async (req, res) => { Bucket: bucketName, }), ).then((data) => { - console.log(data); + logger.info(data); }); } catch (e) { if (e instanceof Error) { - console.error('Exception thrown: ', e.message); + logger.error(`Exception thrown: ${e.message}`); } } finally { - res.send('done aws sdk s3 request'); + const msg = 'done aws sdk s3 request' + logger.info(msg); + res.send(msg); } }); From d894e28b8db7edb2ca179cc439037e9c184a6110 Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Tue, 3 Jun 2025 11:55:26 -0700 Subject: [PATCH 3/9] update unit tests --- .../patches/instrumentation-patch.test.ts | 54 ++++++++++--------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts index cea828fc..9b7d3d7d 100644 --- a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts +++ b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts @@ -11,6 +11,8 @@ import { Tracer, AttributeValue, TextMapSetter, + defaultTextMapSetter, + ROOT_CONTEXT, } from '@opentelemetry/api'; import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; import { Instrumentation } from '@opentelemetry/instrumentation'; @@ -539,6 +541,8 @@ describe('InstrumentationPatchTest', () => { let mockedMiddlewareStackInternal: any; let mockedMiddlewareStack; let send; + let middlewareArgsHeader: any; + const testXrayTraceHeader = 'test-xray-trace-header'; beforeEach(async () => { // Clear environment variables before each test @@ -550,11 +554,11 @@ describe('InstrumentationPatchTest', () => { ['_getV3SmithyClientSendPatch']((...args: unknown[]) => Promise.resolve()) .bind({ middlewareStack: mockedMiddlewareStack }); - sinon - .stub(AWSXRayPropagator.prototype, 'inject') - .callsFake((context: OtelContext, carrier: unknown, setter: TextMapSetter) => { - (carrier as any)['isCarrierModified'] = 'carrierIsModified'; - }); + middlewareArgsHeader = { + request: { + headers: {}, + }, + }; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -562,37 +566,39 @@ describe('InstrumentationPatchTest', () => { }); it('Injecting with existing X-Ray header', async () => { - const existingHeader = 'test-trace-header'; - const middlewareArgsWithHeader: any = { - request: { - headers: { [AWSXRAY_TRACE_ID_HEADER]: existingHeader }, - }, - }; - await mockedMiddlewareStackInternal[0][0]((arg: any) => Promise.resolve(), null)(middlewareArgsWithHeader); + sinon + .stub(AWSXRayPropagator.prototype, 'inject') + .callsFake((context: OtelContext, carrier: unknown, setter: TextMapSetter) => { + (carrier as any)['isCarrierModified'] = 'carrierIsModified'; + (carrier as any)[AWSXRAY_TRACE_ID_HEADER] = testXrayTraceHeader; + }); + await mockedMiddlewareStackInternal[0][0]((arg: any) => Promise.resolve(), null)(middlewareArgsHeader); sinon.restore(); - expect(middlewareArgsWithHeader.request.headers['isCarrierModified']).toEqual('carrierIsModified'); - expect(middlewareArgsWithHeader.request.headers).not.toHaveProperty(AWSXRAY_TRACE_ID_HEADER); - expect(middlewareArgsWithHeader.request.headers).toHaveProperty('X-Amzn-Trace-Id'); - expect(middlewareArgsWithHeader.request.headers['X-Amzn-Trace-Id']).toEqual(existingHeader); + expect(middlewareArgsHeader.request.headers['isCarrierModified']).toEqual('carrierIsModified'); + expect(middlewareArgsHeader.request.headers).not.toHaveProperty(AWSXRAY_TRACE_ID_HEADER); + expect(middlewareArgsHeader.request.headers).toHaveProperty('X-Amzn-Trace-Id'); + expect(middlewareArgsHeader.request.headers['X-Amzn-Trace-Id']).toEqual(testXrayTraceHeader); expect(mockedMiddlewareStackInternal[0][1].name).toEqual('_adotInjectXrayContextMiddleware'); }); it('Injecting without existing X-Ray header', async () => { - const middlewareArgsNoHeader: any = { - request: { - headers: {}, - }, - }; + const invalidContext = trace.setSpanContext(ROOT_CONTEXT, { + traceId: 'invalid-trace-id', + spanId: 'invalid-span', + traceFlags: 0, + isRemote: false, + }); - await mockedMiddlewareStackInternal[0][0]((arg: any) => Promise.resolve(), null)(middlewareArgsNoHeader); + const propagator = new AWSXRayPropagator(); + propagator.inject(invalidContext, middlewareArgsHeader.request.headers, defaultTextMapSetter); sinon.restore(); - expect(middlewareArgsNoHeader.request.headers['isCarrierModified']).toEqual('carrierIsModified'); - expect(middlewareArgsNoHeader.request.headers).not.toHaveProperty('X-Amzn-Trace-Id'); + expect(middlewareArgsHeader.request.headers).not.toHaveProperty(AWSXRAY_TRACE_ID_HEADER); + expect(middlewareArgsHeader.request.headers).not.toHaveProperty('X-Amzn-Trace-Id'); expect(mockedMiddlewareStackInternal[0][1].name).toEqual('_adotInjectXrayContextMiddleware'); }); From 7865524714e6a04b9b9d21d640f209d8ca11597e Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Tue, 3 Jun 2025 12:00:02 -0700 Subject: [PATCH 4/9] update unit tests --- .../test/patches/instrumentation-patch.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts index 9b7d3d7d..e9d631ce 100644 --- a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts +++ b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts @@ -565,7 +565,7 @@ describe('InstrumentationPatchTest', () => { await send({}, null); }); - it('Injecting with existing X-Ray header', async () => { + it('propagator injects with valid context', async () => { sinon .stub(AWSXRayPropagator.prototype, 'inject') .callsFake((context: OtelContext, carrier: unknown, setter: TextMapSetter) => { @@ -584,7 +584,7 @@ describe('InstrumentationPatchTest', () => { expect(mockedMiddlewareStackInternal[0][1].name).toEqual('_adotInjectXrayContextMiddleware'); }); - it('Injecting without existing X-Ray header', async () => { + it('propagator does not inject with invalid context', async () => { const invalidContext = trace.setSpanContext(ROOT_CONTEXT, { traceId: 'invalid-trace-id', spanId: 'invalid-span', From 514b57ee3a9ff9e4873a3d646927b16e2af8a3e0 Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Tue, 3 Jun 2025 13:07:34 -0700 Subject: [PATCH 5/9] update tests --- .../src/patches/instrumentation-patch.ts | 3 +- .../patches/instrumentation-patch.test.ts | 45 +++++++++++-------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts b/aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts index 922b40bd..18f2b226 100644 --- a/aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts +++ b/aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts @@ -38,6 +38,8 @@ import { AwsLambdaInstrumentation } from '@opentelemetry/instrumentation-aws-lam import type { Command as AwsV3Command } from '@aws-sdk/types'; export const traceContextEnvironmentKey = '_X_AMZN_TRACE_ID'; +export const AWSXRAY_TRACE_ID_HEADER_CAPITALIZED = 'X-Amzn-Trace-Id'; + const awsPropagator = new AWSXRayPropagator(); export const headerGetter: TextMapGetter = { keys(carrier: any): string[] { @@ -294,7 +296,6 @@ function patchAwsLambdaInstrumentation(instrumentation: Instrumentation): void { // Override the upstream private _getV3SmithyClientSendPatch method to add middleware to inject X-Ray Trace Context into HTTP Headers // https://github.com/open-telemetry/opentelemetry-js-contrib/blob/instrumentation-aws-sdk-v0.48.0/plugins/node/opentelemetry-instrumentation-aws-sdk/src/aws-sdk.ts#L373-L384 const awsXrayPropagator = new AWSXRayPropagator(); -const AWSXRAY_TRACE_ID_HEADER_CAPITALIZED = 'X-Amzn-Trace-Id'; const V3_CLIENT_CONFIG_KEY = Symbol('opentelemetry.instrumentation.aws-sdk.client.config'); type V3PluginCommand = AwsV3Command & { [V3_CLIENT_CONFIG_KEY]?: any; diff --git a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts index e9d631ce..b488ee0a 100644 --- a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts +++ b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts @@ -6,13 +6,15 @@ import { diag, Context as OtelContext, trace, + context, propagation, Span, Tracer, AttributeValue, TextMapSetter, - defaultTextMapSetter, ROOT_CONTEXT, + INVALID_SPAN_CONTEXT, + ContextAPI, } from '@opentelemetry/api'; import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; import { Instrumentation } from '@opentelemetry/instrumentation'; @@ -21,7 +23,12 @@ import { AwsLambdaInstrumentation, AwsLambdaInstrumentationConfig } from '@opent import { expect } from 'expect'; import { AWS_ATTRIBUTE_KEYS } from '../../src/aws-attribute-keys'; import { RequestMetadata, ServiceExtension } from '../../src/third-party/otel/aws/services/ServiceExtension'; -import { applyInstrumentationPatches, customExtractor, headerGetter } from './../../src/patches/instrumentation-patch'; +import { + applyInstrumentationPatches, + AWSXRAY_TRACE_ID_HEADER_CAPITALIZED, + customExtractor, + headerGetter, +} from './../../src/patches/instrumentation-patch'; import * as sinon from 'sinon'; import { AWSXRAY_TRACE_ID_HEADER, AWSXRayPropagator } from '@opentelemetry/propagator-aws-xray'; import { Context } from 'aws-lambda'; @@ -560,12 +567,16 @@ describe('InstrumentationPatchTest', () => { }, }; + afterEach(() => { + sinon.restore(); + }); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore await send({}, null); }); - it('propagator injects with valid context', async () => { + it('Updates trace header casing when AWSXRayPropagator injects trace header successfully', async () => { sinon .stub(AWSXRayPropagator.prototype, 'inject') .callsFake((context: OtelContext, carrier: unknown, setter: TextMapSetter) => { @@ -574,31 +585,29 @@ describe('InstrumentationPatchTest', () => { }); await mockedMiddlewareStackInternal[0][0]((arg: any) => Promise.resolve(), null)(middlewareArgsHeader); - sinon.restore(); - expect(middlewareArgsHeader.request.headers['isCarrierModified']).toEqual('carrierIsModified'); expect(middlewareArgsHeader.request.headers).not.toHaveProperty(AWSXRAY_TRACE_ID_HEADER); - expect(middlewareArgsHeader.request.headers).toHaveProperty('X-Amzn-Trace-Id'); - expect(middlewareArgsHeader.request.headers['X-Amzn-Trace-Id']).toEqual(testXrayTraceHeader); + expect(middlewareArgsHeader.request.headers).toHaveProperty(AWSXRAY_TRACE_ID_HEADER_CAPITALIZED); + expect(middlewareArgsHeader.request.headers[AWSXRAY_TRACE_ID_HEADER_CAPITALIZED]).toEqual(testXrayTraceHeader); expect(mockedMiddlewareStackInternal[0][1].name).toEqual('_adotInjectXrayContextMiddleware'); }); - it('propagator does not inject with invalid context', async () => { - const invalidContext = trace.setSpanContext(ROOT_CONTEXT, { - traceId: 'invalid-trace-id', - spanId: 'invalid-span', - traceFlags: 0, - isRemote: false, - }); + it('Does not set trace header when AWSXRayPropagator does not inject trace header', async () => { + const invalidContext: OtelContext = { + getValue: (key: symbol) => ({ + spanContext: () => INVALID_SPAN_CONTEXT, + }), + setValue: (key: symbol, value: unknown) => invalidContext, + deleteValue: (key: symbol) => invalidContext, + }; - const propagator = new AWSXRayPropagator(); + sinon.stub(context, 'active').returns(invalidContext); - propagator.inject(invalidContext, middlewareArgsHeader.request.headers, defaultTextMapSetter); - sinon.restore(); + await mockedMiddlewareStackInternal[0][0]((arg: any) => Promise.resolve(), null)(middlewareArgsHeader); expect(middlewareArgsHeader.request.headers).not.toHaveProperty(AWSXRAY_TRACE_ID_HEADER); - expect(middlewareArgsHeader.request.headers).not.toHaveProperty('X-Amzn-Trace-Id'); + expect(middlewareArgsHeader.request.headers).not.toHaveProperty(AWSXRAY_TRACE_ID_HEADER_CAPITALIZED); expect(mockedMiddlewareStackInternal[0][1].name).toEqual('_adotInjectXrayContextMiddleware'); }); From 616572146629b4d4054ea74c77b899f3e83301a8 Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Tue, 3 Jun 2025 13:08:56 -0700 Subject: [PATCH 6/9] fix unused imports --- .../test/patches/instrumentation-patch.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts index b488ee0a..39027879 100644 --- a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts +++ b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts @@ -12,9 +12,7 @@ import { Tracer, AttributeValue, TextMapSetter, - ROOT_CONTEXT, INVALID_SPAN_CONTEXT, - ContextAPI, } from '@opentelemetry/api'; import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; import { Instrumentation } from '@opentelemetry/instrumentation'; From 7c8df9b581081ad98f83da58744cbef831c913dd Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Tue, 3 Jun 2025 13:13:00 -0700 Subject: [PATCH 7/9] linting --- .../test/patches/instrumentation-patch.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts index 39027879..d04877f2 100644 --- a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts +++ b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts @@ -565,15 +565,15 @@ describe('InstrumentationPatchTest', () => { }, }; - afterEach(() => { - sinon.restore(); - }); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore await send({}, null); }); + afterEach(() => { + sinon.restore(); + }); + it('Updates trace header casing when AWSXRayPropagator injects trace header successfully', async () => { sinon .stub(AWSXRayPropagator.prototype, 'inject') From b658146c28185e92faed94a46ee1923e35e796fa Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Tue, 3 Jun 2025 13:28:44 -0700 Subject: [PATCH 8/9] style --- .../test/patches/instrumentation-patch.test.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts index d04877f2..afc2f262 100644 --- a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts +++ b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts @@ -545,8 +545,12 @@ describe('InstrumentationPatchTest', () => { describe('overridden _getV3SmithyClientSendPatch updates MiddlewareStack', async () => { let mockedMiddlewareStackInternal: any; let mockedMiddlewareStack; - let send; let middlewareArgsHeader: any; + + const send = extractAwsSdkInstrumentation(PATCHED_INSTRUMENTATIONS) + ['_getV3SmithyClientSendPatch']((...args: unknown[]) => Promise.resolve()) + .bind({ middlewareStack: mockedMiddlewareStack }); + const testXrayTraceHeader = 'test-xray-trace-header'; beforeEach(async () => { @@ -555,9 +559,6 @@ describe('InstrumentationPatchTest', () => { mockedMiddlewareStack = { add: (arg1: any, arg2: any) => mockedMiddlewareStackInternal.push([arg1, arg2]), }; - send = extractAwsSdkInstrumentation(PATCHED_INSTRUMENTATIONS) - ['_getV3SmithyClientSendPatch']((...args: unknown[]) => Promise.resolve()) - .bind({ middlewareStack: mockedMiddlewareStack }); middlewareArgsHeader = { request: { From dc13db3b41c0a2903eb18ebba890bb3471340a71 Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Tue, 3 Jun 2025 14:34:50 -0700 Subject: [PATCH 9/9] style --- .../test/patches/instrumentation-patch.test.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts index afc2f262..502ba84c 100644 --- a/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts +++ b/aws-distro-opentelemetry-node-autoinstrumentation/test/patches/instrumentation-patch.test.ts @@ -546,11 +546,6 @@ describe('InstrumentationPatchTest', () => { let mockedMiddlewareStackInternal: any; let mockedMiddlewareStack; let middlewareArgsHeader: any; - - const send = extractAwsSdkInstrumentation(PATCHED_INSTRUMENTATIONS) - ['_getV3SmithyClientSendPatch']((...args: unknown[]) => Promise.resolve()) - .bind({ middlewareStack: mockedMiddlewareStack }); - const testXrayTraceHeader = 'test-xray-trace-header'; beforeEach(async () => { @@ -559,6 +554,9 @@ describe('InstrumentationPatchTest', () => { mockedMiddlewareStack = { add: (arg1: any, arg2: any) => mockedMiddlewareStackInternal.push([arg1, arg2]), }; + const send = extractAwsSdkInstrumentation(PATCHED_INSTRUMENTATIONS) + ['_getV3SmithyClientSendPatch']((...args: unknown[]) => Promise.resolve()) + .bind({ middlewareStack: mockedMiddlewareStack }); middlewareArgsHeader = { request: {