@@ -3,7 +3,7 @@ import { BuildHandlerArguments } from "@smithy/types";
3
3
import { afterEach , beforeEach , describe , expect , test as it , vi } from "vitest" ;
4
4
5
5
import { PreviouslyResolved } from "./configuration" ;
6
- import { ChecksumAlgorithm } from "./constants" ;
6
+ import { ChecksumAlgorithm , DEFAULT_CHECKSUM_ALGORITHM , RequestChecksumCalculation } from "./constants" ;
7
7
import { flexibleChecksumsMiddleware } from "./flexibleChecksumsMiddleware" ;
8
8
import { getChecksumAlgorithmForRequest } from "./getChecksumAlgorithmForRequest" ;
9
9
import { getChecksumLocationName } from "./getChecksumLocationName" ;
@@ -13,6 +13,7 @@ import { isStreaming } from "./isStreaming";
13
13
import { selectChecksumAlgorithmFunction } from "./selectChecksumAlgorithmFunction" ;
14
14
import { stringHasher } from "./stringHasher" ;
15
15
16
+ vi . mock ( "@aws-sdk/core" ) ;
16
17
vi . mock ( "@smithy/protocol-http" ) ;
17
18
vi . mock ( "./getChecksumAlgorithmForRequest" ) ;
18
19
vi . mock ( "./getChecksumLocationName" ) ;
@@ -28,10 +29,14 @@ describe(flexibleChecksumsMiddleware.name, () => {
28
29
const mockChecksum = "mockChecksum" ;
29
30
const mockChecksumAlgorithmFunction = vi . fn ( ) ;
30
31
const mockChecksumLocationName = "mock-checksum-location-name" ;
32
+ const mockRequestAlgorithmMember = "mockRequestAlgorithmMember" ;
33
+ const mockRequestAlgorithmMemberHttpHeader = "mock-request-algorithm-member-http-header" ;
31
34
32
35
const mockInput = { } ;
33
- const mockConfig = { } as PreviouslyResolved ;
34
- const mockMiddlewareConfig = { requestChecksumRequired : false } ;
36
+ const mockConfig = {
37
+ requestChecksumCalculation : ( ) => Promise . resolve ( RequestChecksumCalculation . WHEN_REQUIRED ) ,
38
+ } as PreviouslyResolved ;
39
+ const mockMiddlewareConfig = { input : mockInput , requestChecksumRequired : false } ;
35
40
36
41
const mockBody = { body : "mockRequestBody" } ;
37
42
const mockHeaders = { "content-length" : 100 , "content-encoding" : "gzip" } ;
@@ -41,9 +46,8 @@ describe(flexibleChecksumsMiddleware.name, () => {
41
46
42
47
beforeEach ( ( ) => {
43
48
mockNext . mockResolvedValueOnce ( mockResult ) ;
44
- const { isInstance } = HttpRequest ;
45
- ( isInstance as unknown as any ) . mockReturnValue ( true ) ;
46
- vi . mocked ( getChecksumAlgorithmForRequest ) . mockReturnValue ( ChecksumAlgorithm . MD5 ) ;
49
+ vi . mocked ( HttpRequest . isInstance ) . mockReturnValue ( true ) ;
50
+ vi . mocked ( getChecksumAlgorithmForRequest ) . mockReturnValue ( ChecksumAlgorithm . CRC32 ) ;
47
51
vi . mocked ( getChecksumLocationName ) . mockReturnValue ( mockChecksumLocationName ) ;
48
52
vi . mocked ( hasHeader ) . mockReturnValue ( true ) ;
49
53
vi . mocked ( hasHeaderWithPrefix ) . mockReturnValue ( false ) ;
@@ -58,8 +62,7 @@ describe(flexibleChecksumsMiddleware.name, () => {
58
62
59
63
describe ( "skips" , ( ) => {
60
64
it ( "if not an instance of HttpRequest" , async ( ) => {
61
- const { isInstance } = HttpRequest ;
62
- ( isInstance as unknown as any ) . mockReturnValue ( false ) ;
65
+ vi . mocked ( HttpRequest . isInstance ) . mockReturnValue ( false ) ;
63
66
const handler = flexibleChecksumsMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , { } ) ;
64
67
await handler ( mockArgs ) ;
65
68
expect ( getChecksumAlgorithmForRequest ) . not . toHaveBeenCalled ( ) ;
@@ -77,7 +80,7 @@ describe(flexibleChecksumsMiddleware.name, () => {
77
80
expect ( getChecksumAlgorithmForRequest ) . toHaveBeenCalledTimes ( 1 ) ;
78
81
} ) ;
79
82
80
- it ( "if header is already present" , async ( ) => {
83
+ it ( "skip if header is already present" , async ( ) => {
81
84
const handler = flexibleChecksumsMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , { } ) ;
82
85
vi . mocked ( hasHeaderWithPrefix ) . mockReturnValue ( true ) ;
83
86
@@ -94,11 +97,53 @@ describe(flexibleChecksumsMiddleware.name, () => {
94
97
95
98
describe ( "adds checksum in the request header" , ( ) => {
96
99
afterEach ( ( ) => {
100
+ expect ( HttpRequest . isInstance ) . toHaveBeenCalledTimes ( 1 ) ;
101
+ expect ( hasHeaderWithPrefix ) . toHaveBeenCalledTimes ( 1 ) ;
97
102
expect ( getChecksumAlgorithmForRequest ) . toHaveBeenCalledTimes ( 1 ) ;
98
103
expect ( getChecksumLocationName ) . toHaveBeenCalledTimes ( 1 ) ;
99
104
expect ( selectChecksumAlgorithmFunction ) . toHaveBeenCalledTimes ( 1 ) ;
100
105
} ) ;
101
106
107
+ describe ( "if input.requestAlgorithmMember can be set" , ( ) => {
108
+ describe ( "input[requestAlgorithmMember] is not defined and" , ( ) => {
109
+ const mockMwConfigWithReqAlgoMember = {
110
+ ...mockMiddlewareConfig ,
111
+ requestAlgorithmMember : {
112
+ name : mockRequestAlgorithmMember ,
113
+ httpHeader : mockRequestAlgorithmMemberHttpHeader ,
114
+ } ,
115
+ } ;
116
+
117
+ it ( "requestChecksumCalculation is supported" , async ( ) => {
118
+ const handler = flexibleChecksumsMiddleware (
119
+ {
120
+ ...mockConfig ,
121
+ requestChecksumCalculation : ( ) => Promise . resolve ( RequestChecksumCalculation . WHEN_SUPPORTED ) ,
122
+ } ,
123
+ mockMwConfigWithReqAlgoMember
124
+ ) ( mockNext , { } ) ;
125
+ await handler ( mockArgs ) ;
126
+ expect ( mockNext . mock . calls [ 0 ] [ 0 ] . input [ mockRequestAlgorithmMember ] ) . toEqual ( DEFAULT_CHECKSUM_ALGORITHM ) ;
127
+ expect ( mockNext . mock . calls [ 0 ] [ 0 ] . request . headers [ mockRequestAlgorithmMemberHttpHeader ] ) . toEqual (
128
+ DEFAULT_CHECKSUM_ALGORITHM
129
+ ) ;
130
+ } ) ;
131
+
132
+ it ( "requestChecksumRequired is set to true" , async ( ) => {
133
+ const handler = flexibleChecksumsMiddleware ( mockConfig , {
134
+ ...mockMwConfigWithReqAlgoMember ,
135
+ requestChecksumRequired : true ,
136
+ } ) ( mockNext , { } ) ;
137
+
138
+ await handler ( mockArgs ) ;
139
+ expect ( mockNext . mock . calls [ 0 ] [ 0 ] . input [ mockRequestAlgorithmMember ] ) . toEqual ( DEFAULT_CHECKSUM_ALGORITHM ) ;
140
+ expect ( mockNext . mock . calls [ 0 ] [ 0 ] . request . headers [ mockRequestAlgorithmMemberHttpHeader ] ) . toEqual (
141
+ DEFAULT_CHECKSUM_ALGORITHM
142
+ ) ;
143
+ } ) ;
144
+ } ) ;
145
+ } ) ;
146
+
102
147
it ( "for streaming body" , async ( ) => {
103
148
vi . mocked ( isStreaming ) . mockReturnValue ( true ) ;
104
149
const mockUpdatedBody = { body : "mockUpdatedBody" } ;
0 commit comments