@@ -29,12 +29,14 @@ describe(flexibleChecksumsMiddleware.name, () => {
2929 const mockChecksum = "mockChecksum" ;
3030 const mockChecksumAlgorithmFunction = vi . fn ( ) ;
3131 const mockChecksumLocationName = "mock-checksum-location-name" ;
32+ const mockRequestAlgorithmMember = "mockRequestAlgorithmMember" ;
33+ const mockRequestAlgorithmMemberHttpHeader = "mock-request-algorithm-member-http-header" ;
3234
3335 const mockInput = { } ;
3436 const mockConfig = {
3537 requestChecksumCalculation : ( ) => Promise . resolve ( RequestChecksumCalculation . WHEN_REQUIRED ) ,
3638 } as PreviouslyResolved ;
37- const mockMiddlewareConfig = { requestChecksumRequired : false } ;
39+ const mockMiddlewareConfig = { input : mockInput , requestChecksumRequired : false } ;
3840
3941 const mockBody = { body : "mockRequestBody" } ;
4042 const mockHeaders = { "content-length" : 100 , "content-encoding" : "gzip" } ;
@@ -78,66 +80,17 @@ describe(flexibleChecksumsMiddleware.name, () => {
7880 expect ( getChecksumAlgorithmForRequest ) . toHaveBeenCalledTimes ( 1 ) ;
7981 } ) ;
8082
81- describe ( "skip if header is already present" , async ( ) => {
82- beforeEach ( ( ) => {
83- vi . mocked ( hasHeaderWithPrefix ) . mockReturnValue ( true ) ;
84- } ) ;
85-
86- afterEach ( ( ) => {
87- expect ( hasHeaderWithPrefix ) . toHaveBeenCalledTimes ( 1 ) ;
88- expect ( getChecksumLocationName ) . not . toHaveBeenCalled ( ) ;
89- expect ( selectChecksumAlgorithmFunction ) . not . toHaveBeenCalled ( ) ;
90- expect ( hasHeader ) . not . toHaveBeenCalled ( ) ;
91- } ) ;
92-
93- it ( "with no changes input" , async ( ) => {
94- const handler = flexibleChecksumsMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , { } ) ;
83+ it ( "skip if header is already present" , async ( ) => {
84+ const handler = flexibleChecksumsMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , { } ) ;
85+ vi . mocked ( hasHeaderWithPrefix ) . mockReturnValue ( true ) ;
9586
96- await handler ( mockArgs ) ;
97- expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
98- } ) ;
87+ await handler ( mockArgs ) ;
9988
100- describe ( "handles input[requestAlgorithmMember]" , ( ) => {
101- it ( "removes if respective checksum header is not present" , async ( ) => {
102- const mockRequestAlgorithmMember = "mockRequestAlgorithmMember" ;
103- const handler = flexibleChecksumsMiddleware ( mockConfig , {
104- ...mockMiddlewareConfig ,
105- requestAlgorithmMember : mockRequestAlgorithmMember ,
106- } ) ( mockNext , { } ) ;
107-
108- const mockArgsWithInput = {
109- ...mockArgs ,
110- input : { [ mockRequestAlgorithmMember ] : DEFAULT_CHECKSUM_ALGORITHM } ,
111- } ;
112- await handler ( mockArgsWithInput ) ;
113- expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
114- expect ( mockNext . mock . calls [ 0 ] [ 0 ] . input [ mockRequestAlgorithmMember ] ) . toBeUndefined ( ) ;
115- } ) ;
116-
117- // This means user set the checksum algorithm, as well as the actual checksum.
118- it ( "retains if respective checksum header is present" , async ( ) => {
119- const mockRequestAlgorithmMember = "mockRequestAlgorithmMember" ;
120- const handler = flexibleChecksumsMiddleware ( mockConfig , {
121- ...mockMiddlewareConfig ,
122- requestAlgorithmMember : mockRequestAlgorithmMember ,
123- } ) ( mockNext , { } ) ;
124-
125- const mockArgsWithInputAndRequest = {
126- ...mockArgs ,
127- input : { [ mockRequestAlgorithmMember ] : DEFAULT_CHECKSUM_ALGORITHM } ,
128- request : {
129- ...mockRequest ,
130- headers : {
131- ...mockHeaders ,
132- [ `x-amz-checksum-${ DEFAULT_CHECKSUM_ALGORITHM . toLowerCase ( ) } ` ] : mockChecksum ,
133- } ,
134- } ,
135- } ;
136- await handler ( mockArgsWithInputAndRequest ) ;
137- expect ( mockNext ) . toHaveBeenCalledWith ( mockArgsWithInputAndRequest ) ;
138- expect ( mockNext . mock . calls [ 0 ] [ 0 ] . input [ mockRequestAlgorithmMember ] ) . toBe ( DEFAULT_CHECKSUM_ALGORITHM ) ;
139- } ) ;
140- } ) ;
89+ expect ( hasHeaderWithPrefix ) . toHaveBeenCalledTimes ( 1 ) ;
90+ expect ( getChecksumLocationName ) . not . toHaveBeenCalled ( ) ;
91+ expect ( selectChecksumAlgorithmFunction ) . not . toHaveBeenCalled ( ) ;
92+ expect ( hasHeader ) . not . toHaveBeenCalled ( ) ;
93+ expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
14194 } ) ;
14295 } ) ;
14396 } ) ;
@@ -151,6 +104,44 @@ describe(flexibleChecksumsMiddleware.name, () => {
151104 expect ( selectChecksumAlgorithmFunction ) . toHaveBeenCalledTimes ( 1 ) ;
152105 } ) ;
153106
107+ describe ( "if input.requestAlgorithmMember can be set" , ( ) => {
108+ describe ( "input[requestAlgorithmMember] is not defined and" , ( ) => {
109+ const mockMwConfigWithReqAlgoMember = {
110+ ...mockMiddlewareConfig ,
111+ requestAlgorithmMember : mockRequestAlgorithmMember ,
112+ requestAlgorithmMemberHttpHeader : mockRequestAlgorithmMemberHttpHeader ,
113+ } ;
114+
115+ it ( "requestChecksumCalculation is supported" , async ( ) => {
116+ const handler = flexibleChecksumsMiddleware (
117+ {
118+ ...mockConfig ,
119+ requestChecksumCalculation : ( ) => Promise . resolve ( RequestChecksumCalculation . WHEN_SUPPORTED ) ,
120+ } ,
121+ mockMwConfigWithReqAlgoMember
122+ ) ( mockNext , { } ) ;
123+ await handler ( mockArgs ) ;
124+ expect ( mockNext . mock . calls [ 0 ] [ 0 ] . input [ mockRequestAlgorithmMember ] ) . toEqual ( DEFAULT_CHECKSUM_ALGORITHM ) ;
125+ expect ( mockNext . mock . calls [ 0 ] [ 0 ] . request . headers [ mockRequestAlgorithmMemberHttpHeader ] ) . toEqual (
126+ DEFAULT_CHECKSUM_ALGORITHM
127+ ) ;
128+ } ) ;
129+
130+ it ( "requestChecksumRequired is set to true" , async ( ) => {
131+ const handler = flexibleChecksumsMiddleware ( mockConfig , {
132+ ...mockMwConfigWithReqAlgoMember ,
133+ requestChecksumRequired : true ,
134+ } ) ( mockNext , { } ) ;
135+
136+ await handler ( mockArgs ) ;
137+ expect ( mockNext . mock . calls [ 0 ] [ 0 ] . input [ mockRequestAlgorithmMember ] ) . toEqual ( DEFAULT_CHECKSUM_ALGORITHM ) ;
138+ expect ( mockNext . mock . calls [ 0 ] [ 0 ] . request . headers [ mockRequestAlgorithmMemberHttpHeader ] ) . toEqual (
139+ DEFAULT_CHECKSUM_ALGORITHM
140+ ) ;
141+ } ) ;
142+ } ) ;
143+ } ) ;
144+
154145 it ( "for streaming body" , async ( ) => {
155146 vi . mocked ( isStreaming ) . mockReturnValue ( true ) ;
156147 const mockUpdatedBody = { body : "mockUpdatedBody" } ;
0 commit comments