1
+ import { Decoder , Encoder , EventSigner , FinalizeHandler , FinalizeHandlerArguments , HttpRequest } from "@aws-sdk/types" ;
1
2
import { once } from "events" ;
2
3
import { PassThrough , Readable } from "stream" ;
3
4
4
- const mockSingingStream = jest . fn ( ) . mockImplementation ( ( ) => new PassThrough ( ) ) ;
5
- jest . mock ( "./EventSigningStream" , ( ) => ( {
6
- EventSigningStream : mockSingingStream ,
7
- } ) ) ;
8
- import { Decoder , Encoder , EventSigner , FinalizeHandler , FinalizeHandlerArguments , HttpRequest } from "@aws-sdk/types" ;
9
-
5
+ import { EventSigningStream } from "./EventSigningStream" ;
10
6
import { EventStreamPayloadHandler } from "./EventStreamPayloadHandler" ;
11
7
8
+ jest . mock ( "./EventSigningStream" ) ;
9
+
12
10
describe ( "EventStreamPayloadHandler" , ( ) => {
13
11
const mockSigner : EventSigner = {
14
12
sign : jest . fn ( ) ,
@@ -18,6 +16,7 @@ describe("EventStreamPayloadHandler", () => {
18
16
const mockNextHandler : FinalizeHandler < any , any > = jest . fn ( ) ;
19
17
20
18
beforeEach ( ( ) => {
19
+ ( EventSigningStream as unknown as jest . Mock ) . mockImplementation ( ( ) => new PassThrough ( ) ) ;
21
20
jest . clearAllMocks ( ) ;
22
21
} ) ;
23
22
@@ -36,24 +35,24 @@ describe("EventStreamPayloadHandler", () => {
36
35
} ) ;
37
36
38
37
it ( "should close the request payload if downstream middleware throws" , async ( ) => {
39
- expect . assertions ( 2 ) ;
40
- ( mockNextHandler as any ) . mockImplementationOnce ( ( ) => Promise . reject ( new Error ( ) ) ) ;
38
+ const mockError = new Error ( "mockError" ) ;
39
+ ( mockNextHandler as any ) . mockImplementationOnce ( ( ) => Promise . reject ( mockError ) ) ;
41
40
const handler = new EventStreamPayloadHandler ( {
42
41
eventSigner : ( ) => Promise . resolve ( mockSigner ) ,
43
42
utf8Decoder : mockUtf8Decoder ,
44
43
utf8Encoder : mockUtf8encoder ,
45
44
} ) ;
46
45
const mockRequest = { body : new Readable ( ) } as HttpRequest ;
47
- let error ;
46
+
48
47
try {
49
48
await handler . handle ( mockNextHandler , {
50
49
request : mockRequest ,
51
50
input : { } ,
52
51
} ) ;
53
- } catch ( e ) {
54
- error = e ;
52
+ fail ( `Expected ${ mockError } to be thrown.` ) ;
53
+ } catch ( error ) {
54
+ expect ( error ) . toBe ( mockError ) ;
55
55
}
56
- expect ( error instanceof Error ) . toBe ( true ) ;
57
56
58
57
// Expect stream is closed
59
58
// Ref: should use writableEnded when bumped to Node 13+
@@ -66,23 +65,31 @@ describe("EventStreamPayloadHandler", () => {
66
65
} ) ;
67
66
68
67
it ( "should call event signer with request signature from signing middleware" , async ( ) => {
69
- const authorization =
70
- "AWS4-HMAC-SHA256 Credential=AKID/20200510/us-west-2/foo/aws4_request, SignedHeaders=host, Signature=1234567890" ;
68
+ const priorSignature = "1234567890" ;
69
+ const authorization = `AWS4-HMAC-SHA256 Credential=AKID/20200510/us-west-2/foo/aws4_request, SignedHeaders=host, Signature=${ priorSignature } ` ;
70
+
71
71
const mockRequest = {
72
72
body : new PassThrough ( ) ,
73
73
headers : { authorization } ,
74
74
} as any ;
75
+
75
76
const handler = new EventStreamPayloadHandler ( {
76
77
eventSigner : ( ) => Promise . resolve ( mockSigner ) ,
77
78
utf8Decoder : mockUtf8Decoder ,
78
79
utf8Encoder : mockUtf8encoder ,
79
80
} ) ;
81
+
80
82
await handler . handle ( mockNextHandler , {
81
83
request : mockRequest ,
82
84
input : { } ,
83
85
} ) ;
84
- expect ( mockSingingStream . mock . calls . length ) . toBe ( 1 ) ;
85
- expect ( mockSingingStream . mock . calls [ 0 ] [ 0 ] . priorSignature ) . toBe ( "1234567890" ) ;
86
+
87
+ expect ( EventSigningStream ) . toHaveBeenCalledTimes ( 1 ) ;
88
+ expect ( EventSigningStream ) . toHaveBeenCalledWith ( {
89
+ priorSignature,
90
+ eventMarshaller : expect . anything ( ) ,
91
+ eventSigner : expect . anything ( ) ,
92
+ } ) ;
86
93
} ) ;
87
94
88
95
it ( "should start piping to request payload through event signer if downstream middleware returns" , async ( ) => {
0 commit comments