Skip to content

Commit 5349347

Browse files
committed
Added additional e2e test cases
1 parent 640a431 commit 5349347

8 files changed

+474
-22
lines changed

examples/cdk/lib/example-function.Tracer.CaptureErrorDisabled.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import middy from '@middy/core'
1+
import middy from '@middy/core';
22
import { Context } from 'aws-lambda';
33
import { Events } from '@aws-lambda-powertools/commons';
44
import { captureLambdaHandler, Tracer } from '@aws-lambda-powertools/tracer';
55

66
// Set environment variable to disable capture response
7-
process.env.POWERTOOLS_TRACER_ERROR_RESPONSE = "false";
8-
const tracer = new Tracer({ serviceName: 'tracerCaptureResponseDisabledFn' });
7+
process.env.POWERTOOLS_TRACER_ERROR_RESPONSE = 'false';
8+
const tracer = new Tracer({ serviceName: 'tracerCaptureErrorDisabledFn' });
99

1010
// In this example we are using the middleware pattern but you could use also the captureLambdaHandler decorator
1111
export const handler = middy(async (event: typeof Events.Custom.CustomEvent, context: Context) => {

examples/cdk/lib/example-function.Tracer.CaptureResponseDisabled.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import middy from '@middy/core'
1+
import middy from '@middy/core';
22
import { Context } from 'aws-lambda';
33
import { Events } from '@aws-lambda-powertools/commons';
44
import { captureLambdaHandler, Tracer } from '@aws-lambda-powertools/tracer';
55

66
// Set environment variable to disable capture response
7-
process.env.POWERTOOLS_TRACER_CAPTURE_RESPONSE = "false";
7+
process.env.POWERTOOLS_TRACER_CAPTURE_RESPONSE = 'false';
88
const tracer = new Tracer({ serviceName: 'tracerCaptureResponseDisabledFn' });
99

1010
// In this example we are using the middleware pattern but you could use also the captureLambdaHandler decorator

packages/tracing/tests/e2e/tracer.test.Decorator.ts

-12
Original file line numberDiff line numberDiff line change
@@ -68,18 +68,6 @@ export class MyFunctionWithDecorator {
6868
.catch((err) => {
6969
throw err;
7070
});
71-
72-
/* let res;
73-
try {
74-
res = this.myMethod();
75-
if (event.throw) {
76-
throw new Error(customErrorMessage);
77-
}
78-
} catch (err) {
79-
throw err;
80-
}
81-
82-
return res; */
8371
}
8472

8573
@tracer.captureMethod()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import { Tracer } from '../../src';
2+
import { Callback, Context } from 'aws-lambda';
3+
import { STSClient, GetCallerIdentityCommand } from '@aws-sdk/client-sts';
4+
// eslint-disable-next-line @typescript-eslint/no-var-requires
5+
let AWS = require('aws-sdk');
6+
7+
const serviceName = process.env.EXPECTED_SERVICE_NAME ?? 'MyFunctionWithStandardHandler';
8+
const customAnnotationKey = process.env.EXPECTED_CUSTOM_ANNOTATION_KEY ?? 'myAnnotation';
9+
const customAnnotationValue = process.env.EXPECTED_CUSTOM_ANNOTATION_VALUE ?? 'myValue';
10+
const customMetadataKey = process.env.EXPECTED_CUSTOM_METADATA_KEY ?? 'myMetadata';
11+
const customMetadataValue = JSON.parse(process.env.EXPECTED_CUSTOM_METADATA_VALUE) ?? { bar: 'baz' };
12+
const customResponseValue = JSON.parse(process.env.EXPECTED_CUSTOM_RESPONSE_VALUE) ?? { foo: 'bar' };
13+
const customErrorMessage = process.env.EXPECTED_CUSTOM_ERROR_MESSAGE ?? 'An error has occurred';
14+
15+
interface CustomEvent {
16+
throw: boolean
17+
sdkV2: string
18+
invocation: number
19+
}
20+
21+
// Function that refreshes imports to ensure that we are instrumenting only one version of the AWS SDK v2 at a time.
22+
const refreshAWSSDKImport = (): void => {
23+
// Clean up the require cache to ensure we're using a newly imported version of the AWS SDK v2
24+
for (const key in require.cache) {
25+
if (key.indexOf('/aws-sdk/') !== -1) {
26+
delete require.cache[key];
27+
}
28+
}
29+
// eslint-disable-next-line @typescript-eslint/no-var-requires
30+
AWS = require('aws-sdk');
31+
};
32+
33+
const tracer = new Tracer({ serviceName: serviceName, enabled: false });
34+
const stsv3 = tracer.captureAWSv3Client(new STSClient({}));
35+
36+
export class MyFunctionWithDecorator {
37+
@tracer.captureLambdaHandler()
38+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
39+
// @ts-ignore
40+
public handler(event: CustomEvent, _context: Context, _callback: Callback<unknown>): void | Promise<unknown> {
41+
tracer.putAnnotation(customAnnotationKey, customAnnotationValue);
42+
tracer.putMetadata(customMetadataKey, customMetadataValue);
43+
44+
let stsv2;
45+
refreshAWSSDKImport();
46+
if (event.sdkV2 === 'client') {
47+
stsv2 = tracer.captureAWSClient(new AWS.STS());
48+
} else if (event.sdkV2 === 'all') {
49+
AWS = tracer.captureAWS(AWS);
50+
stsv2 = new AWS.STS();
51+
}
52+
53+
return Promise.all([
54+
stsv2.getCallerIdentity().promise(),
55+
stsv3.send(new GetCallerIdentityCommand({})),
56+
new Promise((resolve, reject) => {
57+
setTimeout(() => {
58+
const res = this.myMethod();
59+
if (event.throw) {
60+
reject(new Error(customErrorMessage));
61+
} else {
62+
resolve(res);
63+
}
64+
}, 2000); // We need to wait for to make sure previous calls are finished
65+
})
66+
])
67+
.then(([ _stsv2Res, _stsv3Res, promiseRes ]) => promiseRes)
68+
.catch((err) => {
69+
throw err;
70+
});
71+
}
72+
73+
@tracer.captureMethod()
74+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
75+
// @ts-ignore
76+
public myMethod(): string {
77+
return customResponseValue;
78+
}
79+
}
80+
81+
export const handlerClass = new MyFunctionWithDecorator();
82+
export const handler = handlerClass.handler;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import { Tracer } from '../../src';
2+
import { Callback, Context } from 'aws-lambda';
3+
import { STSClient, GetCallerIdentityCommand } from '@aws-sdk/client-sts';
4+
// eslint-disable-next-line @typescript-eslint/no-var-requires
5+
let AWS = require('aws-sdk');
6+
7+
const serviceName = process.env.EXPECTED_SERVICE_NAME ?? 'MyFunctionWithStandardHandler';
8+
const customAnnotationKey = process.env.EXPECTED_CUSTOM_ANNOTATION_KEY ?? 'myAnnotation';
9+
const customAnnotationValue = process.env.EXPECTED_CUSTOM_ANNOTATION_VALUE ?? 'myValue';
10+
const customMetadataKey = process.env.EXPECTED_CUSTOM_METADATA_KEY ?? 'myMetadata';
11+
const customMetadataValue = JSON.parse(process.env.EXPECTED_CUSTOM_METADATA_VALUE) ?? { bar: 'baz' };
12+
const customResponseValue = JSON.parse(process.env.EXPECTED_CUSTOM_RESPONSE_VALUE) ?? { foo: 'bar' };
13+
const customErrorMessage = process.env.EXPECTED_CUSTOM_ERROR_MESSAGE ?? 'An error has occurred';
14+
15+
interface CustomEvent {
16+
throw: boolean
17+
sdkV2: string
18+
invocation: number
19+
}
20+
21+
// Function that refreshes imports to ensure that we are instrumenting only one version of the AWS SDK v2 at a time.
22+
const refreshAWSSDKImport = (): void => {
23+
// Clean up the require cache to ensure we're using a newly imported version of the AWS SDK v2
24+
for (const key in require.cache) {
25+
if (key.indexOf('/aws-sdk/') !== -1) {
26+
delete require.cache[key];
27+
}
28+
}
29+
// eslint-disable-next-line @typescript-eslint/no-var-requires
30+
AWS = require('aws-sdk');
31+
};
32+
33+
// Disable capture errors & responses for this test
34+
process.env.POWERTOOLS_TRACER_CAPTURE_RESPONSE = 'false';
35+
process.env.POWERTOOLS_TRACER_CAPTURE_ERROR = 'false';
36+
const tracer = new Tracer({ serviceName: serviceName });
37+
const stsv3 = tracer.captureAWSv3Client(new STSClient({}));
38+
39+
export class MyFunctionWithDecorator {
40+
@tracer.captureLambdaHandler()
41+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
42+
// @ts-ignore
43+
public handler(event: CustomEvent, _context: Context, _callback: Callback<unknown>): void | Promise<unknown> {
44+
tracer.putAnnotation(customAnnotationKey, customAnnotationValue);
45+
tracer.putMetadata(customMetadataKey, customMetadataValue);
46+
47+
let stsv2;
48+
refreshAWSSDKImport();
49+
if (event.sdkV2 === 'client') {
50+
stsv2 = tracer.captureAWSClient(new AWS.STS());
51+
} else if (event.sdkV2 === 'all') {
52+
AWS = tracer.captureAWS(AWS);
53+
stsv2 = new AWS.STS();
54+
}
55+
56+
return Promise.all([
57+
stsv2.getCallerIdentity().promise(),
58+
stsv3.send(new GetCallerIdentityCommand({})),
59+
new Promise((resolve, reject) => {
60+
setTimeout(() => {
61+
const res = this.myMethod();
62+
if (event.throw) {
63+
reject(new Error(customErrorMessage));
64+
} else {
65+
resolve(res);
66+
}
67+
}, 2000); // We need to wait for to make sure previous calls are finished
68+
})
69+
])
70+
.then(([ _stsv2Res, _stsv3Res, promiseRes ]) => promiseRes)
71+
.catch((err) => {
72+
throw err;
73+
});
74+
}
75+
76+
@tracer.captureMethod()
77+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
78+
// @ts-ignore
79+
public myMethod(): string {
80+
return customResponseValue;
81+
}
82+
}
83+
84+
export const handlerClass = new MyFunctionWithDecorator();
85+
export const handler = handlerClass.handler;

packages/tracing/tests/e2e/tracer.test.Disabled.ts renamed to packages/tracing/tests/e2e/tracer.test.MiddlewareDisabled.ts

+40-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import middy from '@middy/core';
22
import { captureLambdaHandler, Tracer } from '../../src';
33
import { Context } from 'aws-lambda';
4+
import { STSClient, GetCallerIdentityCommand } from '@aws-sdk/client-sts';
5+
// eslint-disable-next-line @typescript-eslint/no-var-requires
6+
let AWS = require('aws-sdk');
47

58
const serviceName = process.env.EXPECTED_SERVICE_NAME ?? 'MyFunctionWithStandardHandler';
69
const customAnnotationKey = process.env.EXPECTED_CUSTOM_ANNOTATION_KEY ?? 'myAnnotation';
@@ -12,14 +15,50 @@ const customErrorMessage = process.env.EXPECTED_CUSTOM_ERROR_MESSAGE ?? 'An erro
1215

1316
interface CustomEvent {
1417
throw: boolean
18+
sdkV2: string
19+
invocation: number
1520
}
1621

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

1937
export const handler = middy(async (event: CustomEvent, _context: Context): Promise<void> => {
38+
tracer.putAnnotation('invocation', event.invocation);
2039
tracer.putAnnotation(customAnnotationKey, customAnnotationValue);
2140
tracer.putMetadata(customMetadataKey, customMetadataValue);
2241

42+
let stsv2;
43+
refreshAWSSDKImport();
44+
if (event.sdkV2 === 'client') {
45+
stsv2 = tracer.captureAWSClient(new AWS.STS());
46+
} else if (event.sdkV2 === 'all') {
47+
AWS = tracer.captureAWS(AWS);
48+
stsv2 = new AWS.STS();
49+
}
50+
try {
51+
await stsv2.getCallerIdentity().promise();
52+
} catch (err) {
53+
console.error(err);
54+
}
55+
56+
try {
57+
await stsv3.send(new GetCallerIdentityCommand({}));
58+
} catch (err) {
59+
console.error(err);
60+
}
61+
2362
let res;
2463
try {
2564
res = customResponseValue;
@@ -31,4 +70,4 @@ export const handler = middy(async (event: CustomEvent, _context: Context): Prom
3170
}
3271

3372
return res;
34-
}).use(captureLambdaHandler(tracer));
73+
}).use(captureLambdaHandler(tracer));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import middy from '@middy/core';
2+
import { captureLambdaHandler, Tracer } from '../../src';
3+
import { Context } from 'aws-lambda';
4+
import { STSClient, GetCallerIdentityCommand } from '@aws-sdk/client-sts';
5+
// eslint-disable-next-line @typescript-eslint/no-var-requires
6+
let AWS = require('aws-sdk');
7+
8+
const serviceName = process.env.EXPECTED_SERVICE_NAME ?? 'MyFunctionWithStandardHandler';
9+
const customAnnotationKey = process.env.EXPECTED_CUSTOM_ANNOTATION_KEY ?? 'myAnnotation';
10+
const customAnnotationValue = process.env.EXPECTED_CUSTOM_ANNOTATION_VALUE ?? 'myValue';
11+
const customMetadataKey = process.env.EXPECTED_CUSTOM_METADATA_KEY ?? 'myMetadata';
12+
const customMetadataValue = JSON.parse(process.env.EXPECTED_CUSTOM_METADATA_VALUE) ?? { bar: 'baz' };
13+
const customResponseValue = JSON.parse(process.env.EXPECTED_CUSTOM_RESPONSE_VALUE) ?? { foo: 'bar' };
14+
const customErrorMessage = process.env.EXPECTED_CUSTOM_ERROR_MESSAGE ?? 'An error has occurred';
15+
16+
interface CustomEvent {
17+
throw: boolean
18+
sdkV2: string
19+
invocation: number
20+
}
21+
22+
// Function that refreshes imports to ensure that we are instrumenting only one version of the AWS SDK v2 at a time.
23+
const refreshAWSSDKImport = (): void => {
24+
// Clean up the require cache to ensure we're using a newly imported version of the AWS SDK v2
25+
for (const key in require.cache) {
26+
if (key.indexOf('/aws-sdk/') !== -1) {
27+
delete require.cache[key];
28+
}
29+
}
30+
// eslint-disable-next-line @typescript-eslint/no-var-requires
31+
AWS = require('aws-sdk');
32+
};
33+
34+
// Disable capture errors & responses for this test
35+
process.env.POWERTOOLS_TRACER_CAPTURE_RESPONSE = 'false';
36+
process.env.POWERTOOLS_TRACER_CAPTURE_ERROR = 'false';
37+
const tracer = new Tracer({ serviceName: serviceName });
38+
const stsv3 = tracer.captureAWSv3Client(new STSClient({}));
39+
40+
export const handler = middy(async (event: CustomEvent, _context: Context): Promise<void> => {
41+
tracer.putAnnotation('invocation', event.invocation);
42+
tracer.putAnnotation(customAnnotationKey, customAnnotationValue);
43+
tracer.putMetadata(customMetadataKey, customMetadataValue);
44+
45+
let stsv2;
46+
refreshAWSSDKImport();
47+
if (event.sdkV2 === 'client') {
48+
stsv2 = tracer.captureAWSClient(new AWS.STS());
49+
} else if (event.sdkV2 === 'all') {
50+
AWS = tracer.captureAWS(AWS);
51+
stsv2 = new AWS.STS();
52+
}
53+
try {
54+
await stsv2.getCallerIdentity().promise();
55+
} catch (err) {
56+
console.error(err);
57+
}
58+
59+
try {
60+
await stsv3.send(new GetCallerIdentityCommand({}));
61+
} catch (err) {
62+
console.error(err);
63+
}
64+
65+
let res;
66+
try {
67+
res = customResponseValue;
68+
if (event.throw) {
69+
throw new Error(customErrorMessage);
70+
}
71+
} catch (err) {
72+
throw err;
73+
}
74+
75+
return res;
76+
}).use(captureLambdaHandler(tracer));

0 commit comments

Comments
 (0)