Skip to content

Commit

Permalink
chore(middleware-flexible-checksums): remove ResponseChecksumValidation
Browse files Browse the repository at this point in the history
This reverts commit ba24558.
The ResponseChecksumValidation should be consumed in request middleware.
  • Loading branch information
trivikr committed Sep 17, 2024
1 parent 1783b4e commit afadedb
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 51 deletions.
5 changes: 0 additions & 5 deletions packages/middleware-flexible-checksums/src/configuration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,6 @@ export interface PreviouslyResolved {
*/
requestChecksumCalculation: Provider<string>;

/**
* Determines when a checksum will be calculated for response payloads
*/
responseChecksumValidation: Provider<string>;

/**
* A constructor for a class implementing the {@link Hash} interface that computes SHA1 hashes.
* @internal
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { HttpRequest } from "@smithy/protocol-http";
import { DeserializeHandlerArguments } from "@smithy/types";

import { PreviouslyResolved } from "./configuration";
import { ChecksumAlgorithm, ResponseChecksumValidation } from "./constants";
import { ChecksumAlgorithm } from "./constants";
import { flexibleChecksumsResponseMiddleware } from "./flexibleChecksumsResponseMiddleware";
import { getChecksumLocationName } from "./getChecksumLocationName";
import { FlexibleChecksumsMiddlewareConfig } from "./getFlexibleChecksumsPlugin";
Expand All @@ -23,9 +23,7 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {
commandName: "mockCommandName",
};

const mockConfig = {
responseChecksumValidation: () => Promise.resolve(ResponseChecksumValidation.WHEN_REQUIRED),
} as PreviouslyResolved;
const mockConfig = {} as PreviouslyResolved;
const mockRequestValidationModeMember = "ChecksumEnabled";
const mockResponseAlgorithms = [ChecksumAlgorithm.CRC32, ChecksumAlgorithm.CRC32C];
const mockMiddlewareConfig = {
Expand Down Expand Up @@ -67,7 +65,6 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {
const handler = flexibleChecksumsResponseMiddleware(mockConfig, mockMiddlewareConfig)(mockNext, mockContext);
await handler(mockArgs);
expect(validateChecksumFromResponse).not.toHaveBeenCalled();
expect(mockNext).toHaveBeenCalledWith(mockArgs);
});

describe("response checksum", () => {
Expand All @@ -77,16 +74,12 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {
const handler = flexibleChecksumsResponseMiddleware(mockConfig, mockMwConfig)(mockNext, mockContext);
await handler(mockArgs);
expect(validateChecksumFromResponse).not.toHaveBeenCalled();
expect(mockNext).toHaveBeenCalledWith(mockArgs);
});

it("if requestValidationModeMember is not enabled in input", async () => {
const handler = flexibleChecksumsResponseMiddleware(mockConfig, mockMiddlewareConfig)(mockNext, mockContext);

const mockArgsWithoutEnabled = { ...mockArgs, input: {} };
await handler(mockArgsWithoutEnabled);
await handler({ ...mockArgs, input: {} });
expect(validateChecksumFromResponse).not.toHaveBeenCalled();
expect(mockNext).toHaveBeenCalledWith(mockArgsWithoutEnabled);
});

it("if checksum is for S3 whole-object multipart GET", async () => {
Expand All @@ -99,39 +92,19 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {
expect(isChecksumWithPartNumber).toHaveBeenCalledTimes(1);
expect(isChecksumWithPartNumber).toHaveBeenCalledWith(mockChecksum);
expect(validateChecksumFromResponse).not.toHaveBeenCalled();
expect(mockNext).toHaveBeenCalledWith(mockArgs);
});
});
});

describe("validates checksum from response header", () => {
it("if requestValidationModeMember is enabled in input", async () => {
it("generic case", async () => {
const handler = flexibleChecksumsResponseMiddleware(mockConfig, mockMiddlewareConfig)(mockNext, mockContext);

await handler(mockArgs);
expect(validateChecksumFromResponse).toHaveBeenCalledWith(mockResult.response, {
config: mockConfig,
responseAlgorithms: mockResponseAlgorithms,
});
expect(mockNext).toHaveBeenCalledWith(mockArgs);
});

it(`if requestValidationModeMember is not enabled in input, but responseChecksumValidation returns ${ResponseChecksumValidation.WHEN_SUPPORTED}`, async () => {
const mockConfigWithResponseChecksumValidationSupported = {
...mockConfig,
responseChecksumValidation: () => Promise.resolve(ResponseChecksumValidation.WHEN_SUPPORTED),
};
const handler = flexibleChecksumsResponseMiddleware(
mockConfigWithResponseChecksumValidationSupported,
mockMiddlewareConfig
)(mockNext, mockContext);

await handler({ ...mockArgs, input: {} });
expect(validateChecksumFromResponse).toHaveBeenCalledWith(mockResult.response, {
config: mockConfigWithResponseChecksumValidationSupported,
responseAlgorithms: mockResponseAlgorithms,
});
expect(mockNext).toHaveBeenCalledWith(mockArgs);
});

it("if checksum is for S3 GET without part number", async () => {
Expand All @@ -147,7 +120,6 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {
config: mockConfig,
responseAlgorithms: mockResponseAlgorithms,
});
expect(mockNext).toHaveBeenCalledWith(mockArgs);
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
} from "@smithy/types";

import { PreviouslyResolved } from "./configuration";
import { ChecksumAlgorithm, ResponseChecksumValidation } from "./constants";
import { ChecksumAlgorithm } from "./constants";
import { getChecksumAlgorithmListForResponse } from "./getChecksumAlgorithmListForResponse";
import { getChecksumLocationName } from "./getChecksumLocationName";
import { isChecksumWithPartNumber } from "./isChecksumWithPartNumber";
Expand Down Expand Up @@ -63,24 +63,14 @@ export const flexibleChecksumsResponseMiddleware =
}

const input = args.input;
const { requestValidationModeMember, responseAlgorithms } = middlewareConfig;
const responseChecksumValidation = await config.responseChecksumValidation();

const isResponseChecksumValidationNeeded =
requestValidationModeMember &&
(input[requestValidationModeMember] === "ENABLED" ||
responseChecksumValidation === ResponseChecksumValidation.WHEN_SUPPORTED);

if (isResponseChecksumValidationNeeded) {
input[requestValidationModeMember] = "ENABLED";
}

const result = await next(args);

const response = result.response as HttpResponse;
let collectedStream: Uint8Array | undefined = undefined;

if (isResponseChecksumValidationNeeded) {
const { requestValidationModeMember, responseAlgorithms } = middlewareConfig;
// @ts-ignore Element implicitly has an 'any' type for input[requestValidationModeMember]
if (requestValidationModeMember && input[requestValidationModeMember] === "ENABLED") {
const { clientName, commandName } = context;
const isS3WholeObjectMultipartGetResponseChecksum =
clientName === "S3Client" &&
Expand Down

0 comments on commit afadedb

Please sign in to comment.