Skip to content

Commit aa26799

Browse files
committed
tests: updated aws-sdk calls in tracer integration tests
1 parent 1b24b7c commit aa26799

9 files changed

+90
-209
lines changed

Diff for: packages/tracer/tests/e2e/allFeatures.decorator.test.functionCode.ts

+5-29
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import { Tracer } from '../../src';
22
import { Callback, Context } from 'aws-lambda';
3-
import { DynamoDBClient, PutItemCommand } from '@aws-sdk/client-dynamodb';
3+
import AWS from 'aws-sdk';
44
import axios from 'axios';
5-
// eslint-disable-next-line @typescript-eslint/no-var-requires
6-
let AWS = require('aws-sdk');
75

86
const serviceName = process.env.EXPECTED_SERVICE_NAME ?? 'MyFunctionWithStandardHandler';
97
const customAnnotationKey = process.env.EXPECTED_CUSTOM_ANNOTATION_KEY ?? 'myAnnotation';
@@ -16,24 +14,12 @@ const testTableName = process.env.TEST_TABLE_NAME ?? 'TestTable';
1614

1715
interface CustomEvent {
1816
throw: boolean
19-
sdkV2: string
2017
invocation: number
2118
}
2219

23-
// Function that refreshes imports to ensure that we are instrumenting only one version of the AWS SDK v2 at a time.
24-
const refreshAWSSDKImport = (): void => {
25-
// Clean up the require cache to ensure we're using a newly imported version of the AWS SDK v2
26-
for (const key in require.cache) {
27-
if (key.indexOf('/aws-sdk/') !== -1) {
28-
delete require.cache[key];
29-
}
30-
}
31-
// eslint-disable-next-line @typescript-eslint/no-var-requires
32-
AWS = require('aws-sdk');
33-
};
34-
3520
const tracer = new Tracer({ serviceName: serviceName });
36-
const dynamoDBv3 = tracer.captureAWSv3Client(new DynamoDBClient({}));
21+
tracer.captureAWS(AWS);
22+
const dynamoDB = new AWS.DynamoDB.DocumentClient();
3723

3824
export class MyFunctionBase {
3925
private readonly returnValue: string;
@@ -45,19 +31,9 @@ export class MyFunctionBase {
4531
public handler(event: CustomEvent, _context: Context, _callback: Callback<unknown>): void | Promise<unknown> {
4632
tracer.putAnnotation(customAnnotationKey, customAnnotationValue);
4733
tracer.putMetadata(customMetadataKey, customMetadataValue);
48-
49-
let dynamoDBv2;
50-
refreshAWSSDKImport();
51-
if (event.sdkV2 === 'client') {
52-
dynamoDBv2 = tracer.captureAWSClient(new AWS.DynamoDB.DocumentClient());
53-
} else if (event.sdkV2 === 'all') {
54-
AWS = tracer.captureAWS(AWS);
55-
dynamoDBv2 = new AWS.DynamoDB.DocumentClient();
56-
}
5734

5835
return Promise.all([
59-
dynamoDBv2.put({ TableName: testTableName, Item: { id: `${serviceName}-${event.invocation}-sdkv2` } }).promise(),
60-
dynamoDBv3.send(new PutItemCommand({ TableName: testTableName, Item: { id: { 'S': `${serviceName}-${event.invocation}-sdkv3` } } })),
36+
dynamoDB.put({ TableName: testTableName, Item: { id: `${serviceName}-${event.invocation}-sdkv2` } }).promise(),
6137
axios.get('https://awslabs.github.io/aws-lambda-powertools-typescript/latest/', { timeout: 5000 }),
6238
new Promise((resolve, reject) => {
6339
setTimeout(() => {
@@ -70,7 +46,7 @@ export class MyFunctionBase {
7046
}, 2000); // We need to wait for to make sure previous calls are finished
7147
})
7248
])
73-
.then(([ _dynamoDBv2Res, _dynamoDBv3Res, _axiosRes, promiseRes ]) => promiseRes)
49+
.then(([ _dynamoDBRes, _axiosRes, promiseRes ]) => promiseRes)
7450
.catch((err) => {
7551
throw err;
7652
});

Diff for: packages/tracer/tests/e2e/allFeatures.decorator.test.ts

+26-32
Original file line numberDiff line numberDiff line change
@@ -201,33 +201,31 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim
201201
const trace = tracesWhenAllFlagsEnabled[i];
202202

203203
/**
204-
* Expect the trace to have 5 segments:
204+
* Expect the trace to have 4 segments:
205205
* 1. Lambda Context (AWS::Lambda)
206206
* 2. Lambda Function (AWS::Lambda::Function)
207-
* 3. DynamoDB (AWS::DynamoDB)
208-
* 4. DynamoDB Table (AWS::DynamoDB::Table)
207+
* 4. DynamoDB (AWS::DynamoDB)
209208
* 5. Remote call (awslabs.github.io)
210209
*/
211-
expect(trace.Segments.length).toBe(5);
210+
expect(trace.Segments.length).toBe(4);
212211
const invocationSubsegment = getInvocationSubsegment(trace);
213212

214213
/**
215-
* Invocation subsegment should have a subsegment '## index.handler' (default behavior for PowerTool tracer)
216-
* '## index.handler' subsegment should have 4 subsegments
214+
* Invocation subsegment should have a subsegment '## index.handler' (default behavior for Powertools Tracer)
215+
* '## index.handler' subsegment should have 3 subsegments
217216
* 1. DynamoDB (PutItem on the table)
218-
* 2. DynamoDB (PutItem overhead)
219-
* 3. awslabs.github.io (Remote call)
220-
* 4. '### myMethod' (method decorator)
217+
* 2. awslabs.github.io (Remote call)
218+
* 3. '### myMethod' (method decorator)
221219
*/
222220
const handlerSubsegment = getFirstSubsegment(invocationSubsegment);
223221
expect(handlerSubsegment.name).toBe('## index.handler');
224-
expect(handlerSubsegment?.subsegments).toHaveLength(4);
222+
expect(handlerSubsegment?.subsegments).toHaveLength(3);
225223

226224
if (!handlerSubsegment.subsegments) {
227225
fail('"## index.handler" subsegment should have subsegments');
228226
}
229227
const subsegments = splitSegmentsByName(handlerSubsegment.subsegments, [ 'DynamoDB', 'awslabs.github.io', '### myMethod' ]);
230-
expect(subsegments.get('DynamoDB')?.length).toBe(2);
228+
expect(subsegments.get('DynamoDB')?.length).toBe(1);
231229
expect(subsegments.get('awslabs.github.io')?.length).toBe(1);
232230
expect(subsegments.get('### myMethod')?.length).toBe(1);
233231
expect(subsegments.get('other')?.length).toBe(0);
@@ -284,33 +282,31 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim
284282
const trace = tracesWithNoCaptureErrorOrResponse[i];
285283

286284
/**
287-
* Expect the trace to have 5 segments:
285+
* Expect the trace to have 4 segments:
288286
* 1. Lambda Context (AWS::Lambda)
289287
* 2. Lambda Function (AWS::Lambda::Function)
290288
* 3. DynamoDB (AWS::DynamoDB)
291-
* 4. DynamoDB Table (AWS::DynamoDB::Table)
292-
* 5. Remote call (awslabs.github.io)
289+
* 4. Remote call (awslabs.github.io)
293290
*/
294-
expect(trace.Segments.length).toBe(5);
291+
expect(trace.Segments.length).toBe(4);
295292
const invocationSubsegment = getInvocationSubsegment(trace);
296293

297294
/**
298-
* Invocation subsegment should have a subsegment '## index.handler' (default behavior for PowerTool tracer)
299-
* '## index.handler' subsegment should have 4 subsegments
295+
* Invocation subsegment should have a subsegment '## index.handler' (default behavior for Powertools Tracer)
296+
* '## index.handler' subsegment should have 3 subsegments
300297
* 1. DynamoDB (PutItem on the table)
301-
* 2. DynamoDB (PutItem overhead)
302-
* 3. awslabs.github.io (Remote call)
303-
* 4. '### myMethod' (method decorator)
298+
* 2. awslabs.github.io (Remote call)
299+
* 3. '### myMethod' (method decorator)
304300
*/
305301
const handlerSubsegment = getFirstSubsegment(invocationSubsegment);
306302
expect(handlerSubsegment.name).toBe('## index.handler');
307-
expect(handlerSubsegment?.subsegments).toHaveLength(4);
303+
expect(handlerSubsegment?.subsegments).toHaveLength(3);
308304

309305
if (!handlerSubsegment.subsegments) {
310306
fail('"## index.handler" subsegment should have subsegments');
311307
}
312308
const subsegments = splitSegmentsByName(handlerSubsegment.subsegments, [ 'DynamoDB', 'awslabs.github.io', '### myMethod' ]);
313-
expect(subsegments.get('DynamoDB')?.length).toBe(2);
309+
expect(subsegments.get('DynamoDB')?.length).toBe(1);
314310
expect(subsegments.get('awslabs.github.io')?.length).toBe(1);
315311
expect(subsegments.get('### myMethod')?.length).toBe(1);
316312
expect(subsegments.get('other')?.length).toBe(0);
@@ -342,29 +338,27 @@ describe(`Tracer E2E tests, all features with decorator instantiation for runtim
342338
* 1. Lambda Context (AWS::Lambda)
343339
* 2. Lambda Function (AWS::Lambda::Function)
344340
* 3. DynamoDB (AWS::DynamoDB)
345-
* 4. DynamoDB Table (AWS::DynamoDB::Table)
346-
* 5. Remote call (awslabs.github.io)
341+
* 4. Remote call (awslabs.github.io)
347342
*/
348-
expect(trace.Segments.length).toBe(5);
343+
expect(trace.Segments.length).toBe(4);
349344
const invocationSubsegment = getInvocationSubsegment(trace);
350345

351346
/**
352-
* Invocation subsegment should have a subsegment '## index.handler' (default behavior for PowerTool tracer)
353-
* '## index.handler' subsegment should have 4 subsegments
347+
* Invocation subsegment should have a subsegment '## index.handler' (default behavior for Powertools Tracer)
348+
* '## index.handler' subsegment should have 3 subsegments
354349
* 1. DynamoDB (PutItem on the table)
355-
* 2. DynamoDB (PutItem overhead)
356-
* 3. awslabs.github.io (Remote call)
357-
* 4. '### myMethod' (method decorator)
350+
* 2. awslabs.github.io (Remote call)
351+
* 3. '### myMethod' (method decorator)
358352
*/
359353
const handlerSubsegment = getFirstSubsegment(invocationSubsegment);
360354
expect(handlerSubsegment.name).toBe('## index.handlerWithCaptureResponseFalse');
361-
expect(handlerSubsegment?.subsegments).toHaveLength(4);
355+
expect(handlerSubsegment?.subsegments).toHaveLength(3);
362356

363357
if (!handlerSubsegment.subsegments) {
364358
fail('"## index.handlerWithCaptureResponseFalse" subsegment should have subsegments');
365359
}
366360
const subsegments = splitSegmentsByName(handlerSubsegment.subsegments, [ 'DynamoDB', 'awslabs.github.io', '### myMethod' ]);
367-
expect(subsegments.get('DynamoDB')?.length).toBe(2);
361+
expect(subsegments.get('DynamoDB')?.length).toBe(1);
368362
expect(subsegments.get('awslabs.github.io')?.length).toBe(1);
369363
expect(subsegments.get('### myMethod')?.length).toBe(1);
370364
expect(subsegments.get('other')?.length).toBe(0);

Diff for: packages/tracer/tests/e2e/allFeatures.manual.test.functionCode.ts

+2-28
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
import { Tracer } from '../../src';
22
import { Context } from 'aws-lambda';
3-
import { DynamoDBClient, PutItemCommand } from '@aws-sdk/client-dynamodb';
43
import axios from 'axios';
5-
// eslint-disable-next-line @typescript-eslint/no-var-requires
6-
// let AWS = require('aws-sdk');
74
import AWS from 'aws-sdk';
8-
import { default as AWS2 } from 'aws-sdk';
95

106
const serviceName = process.env.EXPECTED_SERVICE_NAME ?? 'MyFunctionWithStandardHandler';
117
const customAnnotationKey = process.env.EXPECTED_CUSTOM_ANNOTATION_KEY ?? 'myAnnotation';
@@ -18,24 +14,11 @@ const testTableName = process.env.TEST_TABLE_NAME ?? 'TestTable';
1814

1915
interface CustomEvent {
2016
throw: boolean
21-
sdkV2: string
2217
invocation: number
2318
}
2419

25-
// Function that refreshes imports to ensure that we are instrumenting only one version of the AWS SDK v2 at a time.
26-
/* const refreshAWSSDKImport = (): void => {
27-
// Clean up the require cache to ensure we're using a newly imported version of the AWS SDK v2
28-
for (const key in require.cache) {
29-
if (key.indexOf('/aws-sdk/') !== -1) {
30-
delete require.cache[key];
31-
}
32-
}
33-
// eslint-disable-next-line @typescript-eslint/no-var-requires
34-
AWS = require('aws-sdk');
35-
}; */
36-
3720
const tracer = new Tracer({ serviceName: serviceName });
38-
const dynamoDBv3 = tracer.captureAWSv3Client(new DynamoDBClient({}));
21+
const dynamoDB = tracer.captureAWSClient(new AWS.DynamoDB.DocumentClient());
3922

4023
export const handler = async (event: CustomEvent, _context: Context): Promise<void> => {
4124
const segment = tracer.getSegment();
@@ -49,17 +32,8 @@ export const handler = async (event: CustomEvent, _context: Context): Promise<vo
4932
tracer.putAnnotation(customAnnotationKey, customAnnotationValue);
5033
tracer.putMetadata(customMetadataKey, customMetadataValue);
5134

52-
let dynamoDBv2;
53-
// refreshAWSSDKImport();
54-
if (event.sdkV2 === 'client') {
55-
dynamoDBv2 = tracer.captureAWSClient(new AWS.DynamoDB.DocumentClient());
56-
} else if (event.sdkV2 === 'all') {
57-
tracer.captureAWS(AWS2);
58-
dynamoDBv2 = new AWS2.DynamoDB.DocumentClient();
59-
}
6035
try {
61-
await dynamoDBv2.put({ TableName: testTableName, Item: { id: `${serviceName}-${event.invocation}-sdkv2` } }).promise();
62-
await dynamoDBv3.send(new PutItemCommand({ TableName: testTableName, Item: { id: { 'S': `${serviceName}-${event.invocation}-sdkv3` } } }));
36+
await dynamoDB.put({ TableName: testTableName, Item: { id: `${serviceName}-${event.invocation}-sdkv2` } }).promise();
6337
await axios.get('https://awslabs.github.io/aws-lambda-powertools-typescript/latest/', { timeout: 5000 });
6438

6539
const res = customResponseValue;

Diff for: packages/tracer/tests/e2e/allFeatures.manual.test.ts

+7-9
Original file line numberDiff line numberDiff line change
@@ -123,32 +123,30 @@ describe(`Tracer E2E tests, all features with manual instantiation for runtime:
123123
const trace = sortedTraces[i];
124124

125125
/**
126-
* Expect the trace to have 5 segments:
126+
* Expect the trace to have 4 segments:
127127
* 1. Lambda Context (AWS::Lambda)
128128
* 2. Lambda Function (AWS::Lambda::Function)
129129
* 3. DynamoDB (AWS::DynamoDB)
130-
* 4. DynamoDB Table (AWS::DynamoDB::Table)
131130
* 5. Remote call (awslabs.github.io)
132131
*/
133-
expect(trace.Segments.length).toBe(5);
132+
expect(trace.Segments.length).toBe(4);
134133
const invocationSubsegment = getInvocationSubsegment(trace);
135134

136135
/**
137-
* Invocation subsegment should have a subsegment '## index.handler' (default behavior for PowerTool tracer)
138-
* '## index.handler' subsegment should have 3 subsegments
136+
* Invocation subsegment should have a subsegment '## index.handler' (default behavior for Powertools Tracer)
137+
* '## index.handler' subsegment should have 2 subsegments
139138
* 1. DynamoDB (PutItem on the table)
140-
* 2. DynamoDB (PutItem overhead)
141-
* 3. awslabs.github.io (Remote call)
139+
* 2. awslabs.github.io (Remote call)
142140
*/
143141
const handlerSubsegment = getFirstSubsegment(invocationSubsegment);
144142
expect(handlerSubsegment.name).toBe('## index.handler');
145-
expect(handlerSubsegment?.subsegments).toHaveLength(3);
143+
expect(handlerSubsegment?.subsegments).toHaveLength(2);
146144

147145
if (!handlerSubsegment.subsegments) {
148146
fail('"## index.handler" subsegment should have subsegments');
149147
}
150148
const subsegments = splitSegmentsByName(handlerSubsegment.subsegments, [ 'DynamoDB', 'awslabs.github.io' ]);
151-
expect(subsegments.get('DynamoDB')?.length).toBe(2);
149+
expect(subsegments.get('DynamoDB')?.length).toBe(1);
152150
expect(subsegments.get('awslabs.github.io')?.length).toBe(1);
153151
expect(subsegments.get('other')?.length).toBe(0);
154152

Diff for: packages/tracer/tests/e2e/allFeatures.middy.test.functionCode.ts

+2-26
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ import { captureLambdaHandler, Tracer } from '../../src';
33
import { Context } from 'aws-lambda';
44
import { DynamoDBClient, PutItemCommand } from '@aws-sdk/client-dynamodb';
55
import axios from 'axios';
6-
// eslint-disable-next-line @typescript-eslint/no-var-requires
7-
let AWS = require('aws-sdk');
86

97
const serviceName = process.env.EXPECTED_SERVICE_NAME ?? 'MyFunctionWithStandardHandler';
108
const customAnnotationKey = process.env.EXPECTED_CUSTOM_ANNOTATION_KEY ?? 'myAnnotation';
@@ -17,41 +15,19 @@ const testTableName = process.env.TEST_TABLE_NAME ?? 'TestTable';
1715

1816
interface CustomEvent {
1917
throw: boolean
20-
sdkV2: string
2118
invocation: number
2219
}
2320

24-
// Function that refreshes imports to ensure that we are instrumenting only one version of the AWS SDK v2 at a time.
25-
const refreshAWSSDKImport = (): void => {
26-
// Clean up the require cache to ensure we're using a newly imported version of the AWS SDK v2
27-
for (const key in require.cache) {
28-
if (key.indexOf('/aws-sdk/') !== -1) {
29-
delete require.cache[key];
30-
}
31-
}
32-
// eslint-disable-next-line @typescript-eslint/no-var-requires
33-
AWS = require('aws-sdk');
34-
};
35-
3621
const tracer = new Tracer({ serviceName: serviceName });
37-
const dynamoDBv3 = tracer.captureAWSv3Client(new DynamoDBClient({}));
22+
const dynamoDB = tracer.captureAWSv3Client(new DynamoDBClient({}));
3823

3924
const testHandler = async (event: CustomEvent, _context: Context): Promise<void> => {
4025
tracer.putAnnotation('invocation', event.invocation);
4126
tracer.putAnnotation(customAnnotationKey, customAnnotationValue);
4227
tracer.putMetadata(customMetadataKey, customMetadataValue);
4328

44-
let dynamoDBv2;
45-
refreshAWSSDKImport();
46-
if (event.sdkV2 === 'client') {
47-
dynamoDBv2 = tracer.captureAWSClient(new AWS.DynamoDB.DocumentClient());
48-
} else if (event.sdkV2 === 'all') {
49-
AWS = tracer.captureAWS(AWS);
50-
dynamoDBv2 = new AWS.DynamoDB.DocumentClient();
51-
}
5229
try {
53-
await dynamoDBv2.put({ TableName: testTableName, Item: { id: `${serviceName}-${event.invocation}-sdkv2` } }).promise();
54-
await dynamoDBv3.send(new PutItemCommand({ TableName: testTableName, Item: { id: { 'S': `${serviceName}-${event.invocation}-sdkv3` } } }));
30+
await dynamoDB.send(new PutItemCommand({ TableName: testTableName, Item: { id: { 'S': `${serviceName}-${event.invocation}-sdkv3` } } }));
5531
await axios.get('https://awslabs.github.io/aws-lambda-powertools-typescript/latest/', { timeout: 5000 });
5632

5733
const res = customResponseValue;

0 commit comments

Comments
 (0)