@@ -2,7 +2,7 @@ import { HttpRequest } from "@smithy/protocol-http";
2
2
import { DeserializeHandlerArguments } from "@smithy/types" ;
3
3
4
4
import { PreviouslyResolved } from "./configuration" ;
5
- import { ChecksumAlgorithm } from "./constants" ;
5
+ import { ChecksumAlgorithm , ResponseChecksumValidation } from "./constants" ;
6
6
import { flexibleChecksumsResponseMiddleware } from "./flexibleChecksumsResponseMiddleware" ;
7
7
import { getChecksumLocationName } from "./getChecksumLocationName" ;
8
8
import { FlexibleChecksumsMiddlewareConfig } from "./getFlexibleChecksumsPlugin" ;
@@ -23,7 +23,9 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {
23
23
commandName : "mockCommandName" ,
24
24
} ;
25
25
26
- const mockConfig = { } as PreviouslyResolved ;
26
+ const mockConfig = {
27
+ responseChecksumValidation : ( ) => Promise . resolve ( ResponseChecksumValidation . WHEN_REQUIRED ) ,
28
+ } as PreviouslyResolved ;
27
29
const mockRequestValidationModeMember = "ChecksumEnabled" ;
28
30
const mockResponseAlgorithms = [ ChecksumAlgorithm . CRC32 , ChecksumAlgorithm . CRC32C ] ;
29
31
const mockMiddlewareConfig = {
@@ -59,52 +61,66 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {
59
61
} ) ;
60
62
61
63
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 ) ;
66
68
await handler ( mockArgs ) ;
67
69
expect ( validateChecksumFromResponse ) . not . toHaveBeenCalled ( ) ;
70
+ expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
68
71
} ) ;
69
72
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 ) ;
78
75
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
+ } ) ;
84
81
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" ,
95
87
} ) ;
88
+ await handler ( mockArgs ) ;
89
+ expect ( isChecksumWithPartNumber ) . toHaveBeenCalledTimes ( 1 ) ;
90
+ expect ( isChecksumWithPartNumber ) . toHaveBeenCalledWith ( mockChecksum ) ;
91
+ expect ( validateChecksumFromResponse ) . not . toHaveBeenCalled ( ) ;
92
+ expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
96
93
} ) ;
97
94
} ) ;
98
95
99
96
describe ( "validates checksum from response header" , ( ) => {
100
- it ( "generic case " , async ( ) => {
97
+ it ( "if requestValidationModeMember is enabled in input " , async ( ) => {
101
98
const handler = flexibleChecksumsResponseMiddleware ( mockConfig , mockMiddlewareConfig ) ( mockNext , mockContext ) ;
102
99
103
100
await handler ( mockArgs ) ;
104
101
expect ( validateChecksumFromResponse ) . toHaveBeenCalledWith ( mockResult . response , {
105
102
config : mockConfig ,
106
103
responseAlgorithms : mockResponseAlgorithms ,
107
104
} ) ;
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 ) ;
108
124
} ) ;
109
125
110
126
it ( "if checksum is for S3 GET without part number" , async ( ) => {
@@ -120,6 +136,7 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {
120
136
config : mockConfig ,
121
137
responseAlgorithms : mockResponseAlgorithms ,
122
138
} ) ;
139
+ expect ( mockNext ) . toHaveBeenCalledWith ( mockArgs ) ;
123
140
} ) ;
124
141
} ) ;
125
142
} ) ;
0 commit comments