Skip to content

Commit ad5e163

Browse files
committed
fix(middleware-recursion-detection): add test cases with inconsistent headers
1 parent 927ae51 commit ad5e163

File tree

1 file changed

+57
-3
lines changed

1 file changed

+57
-3
lines changed

packages/middleware-recursion-detection/src/index.spec.ts

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ describe(recursionDetectionMiddleware.name, () => {
7070
expect(request.headers[TRACE_ID_HEADER_NAME]).toBe("some-real-trace-id");
7171
});
7272

73-
it(`should NOT set ${TRACE_ID_HEADER_NAME} header when the header is already set in all lowercase`, async () => {
73+
it(`should NOT set ${TRACE_ID_HEADER_NAME} header when the header is already set with some other casing`, async () => {
7474
process.env = {
7575
AWS_LAMBDA_FUNCTION_NAME: "some-function",
7676
_X_AMZN_TRACE_ID: "some-trace-id",
@@ -80,15 +80,69 @@ describe(recursionDetectionMiddleware.name, () => {
8080
input: {},
8181
request: new HttpRequest({
8282
headers: {
83-
[TRACE_ID_HEADER_NAME.toLowerCase()]: "some-real-trace-id",
83+
["x-AmZn-TrAcE-iD"]: "some-real-trace-id",
8484
},
8585
}),
8686
});
8787

8888
const { calls } = (mockNextHandler as any).mock;
8989
expect(calls.length).toBe(1);
9090
const { request } = mockNextHandler.mock.calls[0][0];
91-
expect(request.headers[TRACE_ID_HEADER_NAME.toLowerCase()]).toBe("some-real-trace-id");
91+
const existingTraceHeader = Object.keys(request.headers).find(
92+
(h) => h.toLowerCase() === TRACE_ID_HEADER_NAME.toLowerCase()
93+
);
94+
expect(existingTraceHeader).toBeDefined();
95+
expect(request.headers[existingTraceHeader!]).toBe("some-real-trace-id");
96+
});
97+
98+
it(`should NOT set ${TRACE_ID_HEADER_NAME} header when the header is already set with alternating case`, async () => {
99+
process.env = {
100+
AWS_LAMBDA_FUNCTION_NAME: "some-function",
101+
_X_AMZN_TRACE_ID: "some-trace-id",
102+
};
103+
const handler = recursionDetectionMiddleware({ runtime: "node" })(mockNextHandler, {} as any);
104+
await handler({
105+
input: {},
106+
request: new HttpRequest({
107+
headers: {
108+
"X-aMzN-tRaCe-Id": "some-real-trace-id",
109+
},
110+
}),
111+
});
112+
113+
const { calls } = (mockNextHandler as any).mock;
114+
expect(calls.length).toBe(1);
115+
const { request } = mockNextHandler.mock.calls[0][0];
116+
const existingTraceHeader = Object.keys(request.headers).find(
117+
(h) => h.toLowerCase() === TRACE_ID_HEADER_NAME.toLowerCase()
118+
);
119+
expect(existingTraceHeader).toBeDefined();
120+
expect(request.headers[existingTraceHeader!]).toBe("some-real-trace-id");
121+
});
122+
123+
it(`should NOT set ${TRACE_ID_HEADER_NAME} header when the header is already set with all uppercase`, async () => {
124+
process.env = {
125+
AWS_LAMBDA_FUNCTION_NAME: "some-function",
126+
_X_AMZN_TRACE_ID: "some-trace-id",
127+
};
128+
const handler = recursionDetectionMiddleware({ runtime: "node" })(mockNextHandler, {} as any);
129+
await handler({
130+
input: {},
131+
request: new HttpRequest({
132+
headers: {
133+
"X-AMZN-TRACE-ID": "some-real-trace-id",
134+
},
135+
}),
136+
});
137+
138+
const { calls } = (mockNextHandler as any).mock;
139+
expect(calls.length).toBe(1);
140+
const { request } = mockNextHandler.mock.calls[0][0];
141+
const existingTraceHeader = Object.keys(request.headers).find(
142+
(h) => h.toLowerCase() === TRACE_ID_HEADER_NAME.toLowerCase()
143+
);
144+
expect(existingTraceHeader).toBeDefined();
145+
expect(request.headers[existingTraceHeader!]).toBe("some-real-trace-id");
92146
});
93147

94148
it("has no effect for browser runtime", async () => {

0 commit comments

Comments
 (0)