Skip to content

Commit 4279e44

Browse files
committed
chore: leaves input.requestAlgorithmMember if checksum header is set
1 parent 81c5b0a commit 4279e44

File tree

2 files changed

+44
-14
lines changed

2 files changed

+44
-14
lines changed

packages/middleware-flexible-checksums/src/flexibleChecksumsInputMiddleware.spec.ts

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { setFeature } from "@aws-sdk/core";
2-
import { afterEach, describe, expect, test as it, vi } from "vitest";
2+
import { afterEach, beforeEach, describe, expect, test as it, vi } from "vitest";
33

44
import { PreviouslyResolved } from "./configuration";
55
import { DEFAULT_CHECKSUM_ALGORITHM, RequestChecksumCalculation, ResponseChecksumValidation } from "./constants";
66
import { flexibleChecksumsInputMiddleware } from "./flexibleChecksumsInputMiddleware";
7+
import { hasHeaderWithPrefix } from "./hasHeaderWithPrefix";
78

89
vi.mock("@aws-sdk/core");
10+
vi.mock("./hasHeaderWithPrefix");
911

1012
describe(flexibleChecksumsInputMiddleware.name, () => {
1113
const mockNext = vi.fn();
@@ -19,6 +21,10 @@ describe(flexibleChecksumsInputMiddleware.name, () => {
1921
responseChecksumValidation: () => Promise.resolve(ResponseChecksumValidation.WHEN_SUPPORTED),
2022
} as PreviouslyResolved;
2123

24+
beforeEach(() => {
25+
vi.mocked(hasHeaderWithPrefix).mockReturnValue(false);
26+
});
27+
2228
afterEach(() => {
2329
expect(mockNext).toHaveBeenCalledTimes(1);
2430
vi.clearAllMocks();
@@ -36,8 +42,11 @@ describe(flexibleChecksumsInputMiddleware.name, () => {
3642
mockNext,
3743
{}
3844
);
39-
await handler({ input: {} });
40-
expect(mockNext).toHaveBeenCalledWith({ input: { [mockRequestAlgorithmMember]: DEFAULT_CHECKSUM_ALGORITHM } });
45+
await handler({ input: {}, request: {} });
46+
expect(mockNext).toHaveBeenCalledWith({
47+
input: { [mockRequestAlgorithmMember]: DEFAULT_CHECKSUM_ALGORITHM },
48+
request: {},
49+
});
4150
});
4251

4352
it("requestChecksumRequired is set to true", async () => {
@@ -51,8 +60,11 @@ describe(flexibleChecksumsInputMiddleware.name, () => {
5160
requestChecksumRequired: true,
5261
})(mockNext, {});
5362

54-
await handler({ input: {} });
55-
expect(mockNext).toHaveBeenCalledWith({ input: { [mockRequestAlgorithmMember]: DEFAULT_CHECKSUM_ALGORITHM } });
63+
await handler({ input: {}, request: {} });
64+
expect(mockNext).toHaveBeenCalledWith({
65+
input: { [mockRequestAlgorithmMember]: DEFAULT_CHECKSUM_ALGORITHM },
66+
request: {},
67+
});
5668
});
5769
});
5870
});
@@ -82,8 +94,21 @@ describe(flexibleChecksumsInputMiddleware.name, () => {
8294
mockConfigReqChecksumCalculationWhenRequired,
8395
mockMiddlewareConfigWithRequestAlgorithmMember
8496
)(mockNext, {});
85-
await handler({ input: {} });
86-
expect(mockNext).toHaveBeenCalledWith({ input: {} });
97+
await handler({ input: {}, request: {} });
98+
expect(mockNext).toHaveBeenCalledWith({ input: {}, request: {} });
99+
});
100+
101+
it("if checksum header is set", async () => {
102+
const mockArgs = { input: {}, request: { key: "value" } };
103+
vi.mocked(hasHeaderWithPrefix).mockReturnValue(true);
104+
105+
const handler = flexibleChecksumsInputMiddleware(mockConfig, {
106+
...mockMiddlewareConfigWithRequestAlgorithmMember,
107+
requestChecksumRequired: true,
108+
})(mockNext, {});
109+
110+
await handler(mockArgs);
111+
expect(mockNext).toHaveBeenCalledWith(mockArgs);
87112
});
88113
});
89114

@@ -97,13 +122,13 @@ describe(flexibleChecksumsInputMiddleware.name, () => {
97122
mockConfig,
98123
mockMiddlewareConfigWithMockRequestValidationModeMember
99124
)(mockNext, {});
100-
await handler({ input: {} });
101-
expect(mockNext).toHaveBeenCalledWith({ input: { [mockRequestValidationModeMember]: "ENABLED" } });
125+
await handler({ input: {}, request: {} });
126+
expect(mockNext).toHaveBeenCalledWith({ input: { [mockRequestValidationModeMember]: "ENABLED" }, request: {} });
102127
});
103128
});
104129

105130
describe("leaves input.requestValidationModeMember", () => {
106-
const mockArgs = { input: {} };
131+
const mockArgs = { input: {}, request: {} };
107132

108133
it("when requestValidationModeMember is not defined", async () => {
109134
const handler = flexibleChecksumsInputMiddleware(mockConfig, mockMiddlewareConfig)(mockNext, {});
@@ -157,7 +182,7 @@ describe(flexibleChecksumsInputMiddleware.name, () => {
157182
} as PreviouslyResolved;
158183

159184
const handler = flexibleChecksumsInputMiddleware(mockConfigOverride, mockMiddlewareConfig)(mockNext, {});
160-
await handler({ input: {} });
185+
await handler({ input: {}, request: {} });
161186

162187
expect(setFeature).toHaveBeenCalledTimes(2);
163188
if (configKey === "requestChecksumCalculation") {

packages/middleware-flexible-checksums/src/flexibleChecksumsInputMiddleware.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { setFeature } from "@aws-sdk/core";
2+
import { HttpRequest } from "@smithy/protocol-http";
23
import {
34
HandlerExecutionContext,
45
MetadataBearer,
@@ -11,6 +12,7 @@ import {
1112

1213
import { PreviouslyResolved } from "./configuration";
1314
import { DEFAULT_CHECKSUM_ALGORITHM, RequestChecksumCalculation, ResponseChecksumValidation } from "./constants";
15+
import { hasHeaderWithPrefix } from "./hasHeaderWithPrefix";
1416

1517
export interface FlexibleChecksumsInputMiddlewareConfig {
1618
/**
@@ -82,10 +84,13 @@ export const flexibleChecksumsInputMiddleware =
8284

8385
// The value for input member to configure flexible checksum is not set.
8486
if (requestAlgorithmMember && !input[requestAlgorithmMember]) {
85-
// Set requestAlgorithmMember as default checksum algorithm only if request checksum calculation is supported
86-
// or request checksum is required.
87+
// Set requestAlgorithmMember as default checksum algorithm only if request checksum algorithm is not supported,
88+
// and either request checksumcalculation is supported or request checksum is required.
8789
if (requestChecksumCalculation === RequestChecksumCalculation.WHEN_SUPPORTED || requestChecksumRequired) {
88-
input[requestAlgorithmMember] = DEFAULT_CHECKSUM_ALGORITHM;
90+
const request = args.request as HttpRequest;
91+
if (!request.headers || hasHeaderWithPrefix("x-amz-checksum-", request.headers)) {
92+
input[requestAlgorithmMember] = DEFAULT_CHECKSUM_ALGORITHM;
93+
}
8994
}
9095
}
9196

0 commit comments

Comments
 (0)