@@ -2,7 +2,7 @@ import { HttpRequest } from "@smithy/protocol-http";
22import { DeserializeHandlerArguments } from "@smithy/types" ;
33
44import { PreviouslyResolved } from "./configuration" ;
5- import { ChecksumAlgorithm } from "./constants" ;
5+ import { ChecksumAlgorithm , ResponseChecksumValidation } from "./constants" ;
66import { flexibleChecksumsResponseMiddleware } from "./flexibleChecksumsResponseMiddleware" ;
77import { getChecksumLocationName } from "./getChecksumLocationName" ;
88import { FlexibleChecksumsMiddlewareConfig } from "./getFlexibleChecksumsPlugin" ;
@@ -23,7 +23,9 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {
2323 commandName : "mockCommandName" ,
2424 } ;
2525
26- const mockConfig = { } as PreviouslyResolved ;
26+ const mockConfig = {
27+ responseChecksumValidation : ( ) => Promise . resolve ( ResponseChecksumValidation . WHEN_REQUIRED ) ,
28+ } as PreviouslyResolved ;
2729 const mockRequestValidationModeMember = "ChecksumEnabled" ;
2830 const mockResponseAlgorithms = [ ChecksumAlgorithm . CRC32 , ChecksumAlgorithm . CRC32C ] ;
2931 const mockMiddlewareConfig = {
@@ -59,52 +61,66 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {
5961 } ) ;
6062
6163 describe ( "skips" , ( ) => {
62- it ( "if not an instance of HttpRequest " , async ( ) => {
63- const { isInstance } = HttpRequest ;
64- ( isInstance as unknown as jest . Mock ) . mockReturnValue ( false ) ;
65- const handler = flexibleChecksumsResponseMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , mockContext ) ;
64+ it ( "if requestValidationModeMember is not defined " , async ( ) => {
65+ const mockMwConfig = Object . assign ( { } , mockMiddlewareConfig ) as FlexibleChecksumsMiddlewareConfig ;
66+ delete mockMwConfig . requestValidationModeMember ;
67+ const handler = flexibleChecksumsResponseMiddleware ( mockConfig , mockMwConfig ) ( mockNext , mockContext ) ;
6668 await handler ( mockArgs ) ;
6769 expect ( validateChecksumFromResponse ) . not . toHaveBeenCalled ( ) ;
70+ expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
6871 } ) ;
6972
70- describe ( "response checksum" , ( ) => {
71- it ( "if requestValidationModeMember is not defined" , async ( ) => {
72- const mockMwConfig = Object . assign ( { } , mockMiddlewareConfig ) as FlexibleChecksumsMiddlewareConfig ;
73- delete mockMwConfig . requestValidationModeMember ;
74- const handler = flexibleChecksumsResponseMiddleware ( mockConfig , mockMwConfig ) ( mockNext , mockContext ) ;
75- await handler ( mockArgs ) ;
76- expect ( validateChecksumFromResponse ) . not . toHaveBeenCalled ( ) ;
77- } ) ;
73+ it ( "if requestValidationModeMember is not enabled in input" , async ( ) => {
74+ const handler = flexibleChecksumsResponseMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , mockContext ) ;
7875
79- it ( "if requestValidationModeMember is not enabled in input" , async ( ) => {
80- const handler = flexibleChecksumsResponseMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , mockContext ) ;
81- await handler ( { ... mockArgs , input : { } } ) ;
82- expect ( validateChecksumFromResponse ) . not . toHaveBeenCalled ( ) ;
83- } ) ;
76+ const mockArgsWithoutEnabled = { ... mockArgs , input : { } } ;
77+ await handler ( mockArgsWithoutEnabled ) ;
78+ expect ( validateChecksumFromResponse ) . not . toHaveBeenCalled ( ) ;
79+ expect ( mockNext ) . toHaveBeenCalledWith ( mockArgsWithoutEnabled ) ;
80+ } ) ;
8481
85- it ( "if checksum is for S3 whole-object multipart GET" , async ( ) => {
86- ( isChecksumWithPartNumber as jest . Mock ) . mockReturnValue ( true ) ;
87- const handler = flexibleChecksumsResponseMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , {
88- clientName : "S3Client" ,
89- commandName : "GetObjectCommand" ,
90- } ) ;
91- await handler ( mockArgs ) ;
92- expect ( isChecksumWithPartNumber ) . toHaveBeenCalledTimes ( 1 ) ;
93- expect ( isChecksumWithPartNumber ) . toHaveBeenCalledWith ( mockChecksum ) ;
94- expect ( validateChecksumFromResponse ) . not . toHaveBeenCalled ( ) ;
82+ it ( "if checksum is for S3 whole-object multipart GET" , async ( ) => {
83+ ( isChecksumWithPartNumber as jest . Mock ) . mockReturnValue ( true ) ;
84+ const handler = flexibleChecksumsResponseMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , {
85+ clientName : "S3Client" ,
86+ commandName : "GetObjectCommand" ,
9587 } ) ;
88+ await handler ( mockArgs ) ;
89+ expect ( isChecksumWithPartNumber ) . toHaveBeenCalledTimes ( 1 ) ;
90+ expect ( isChecksumWithPartNumber ) . toHaveBeenCalledWith ( mockChecksum ) ;
91+ expect ( validateChecksumFromResponse ) . not . toHaveBeenCalled ( ) ;
92+ expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
9693 } ) ;
9794 } ) ;
9895
9996 describe ( "validates checksum from response header" , ( ) => {
100- it ( "generic case " , async ( ) => {
97+ it ( "if requestValidationModeMember is enabled in input " , async ( ) => {
10198 const handler = flexibleChecksumsResponseMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , mockContext ) ;
10299
103100 await handler ( mockArgs ) ;
104101 expect ( validateChecksumFromResponse ) . toHaveBeenCalledWith ( mockResult . response , {
105102 config : mockConfig ,
106103 responseAlgorithms : mockResponseAlgorithms ,
107104 } ) ;
105+ expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
106+ } ) ;
107+
108+ it ( `if requestValidationModeMember is not enabled in input, but responseChecksumValidation returns ${ ResponseChecksumValidation . WHEN_SUPPORTED } ` , async ( ) => {
109+ const mockConfigWithResponseChecksumValidationSupported = {
110+ ...mockConfig ,
111+ responseChecksumValidation : ( ) => Promise . resolve ( ResponseChecksumValidation . WHEN_SUPPORTED ) ,
112+ } ;
113+ const handler = flexibleChecksumsResponseMiddleware (
114+ mockConfigWithResponseChecksumValidationSupported ,
115+ mockMiddlewareConfig
116+ ) ( mockNext , mockContext ) ;
117+
118+ await handler ( { ...mockArgs , input : { } } ) ;
119+ expect ( validateChecksumFromResponse ) . toHaveBeenCalledWith ( mockResult . response , {
120+ config : mockConfigWithResponseChecksumValidationSupported ,
121+ responseAlgorithms : mockResponseAlgorithms ,
122+ } ) ;
123+ expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
108124 } ) ;
109125
110126 it ( "if checksum is for S3 GET without part number" , async ( ) => {
@@ -120,6 +136,7 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {
120136 config : mockConfig ,
121137 responseAlgorithms : mockResponseAlgorithms ,
122138 } ) ;
139+ expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
123140 } ) ;
124141 } ) ;
125142} ) ;
0 commit comments