@@ -31,6 +31,16 @@ describe("loggerMiddleware", () => {
3131 } ,
3232 } ;
3333
34+ const mockOutput = {
35+ $metadata : {
36+ statusCode : 200 ,
37+ requestId : "requestId" ,
38+ attempts : 2 ,
39+ totalRetryDelay : 350 ,
40+ } ,
41+ outputKey : "outputValue" ,
42+ } ;
43+
3444 const mockResponse = {
3545 response : {
3646 statusCode : 200 ,
@@ -40,9 +50,7 @@ describe("loggerMiddleware", () => {
4050 "x-amz-cf-id" : "cfId" ,
4151 } ,
4252 } ,
43- output : {
44- outputKey : "outputValue" ,
45- } ,
53+ output : mockOutput ,
4654 } ;
4755
4856 afterEach ( ( ) => {
@@ -64,61 +72,99 @@ describe("loggerMiddleware", () => {
6472 expect ( response ) . toStrictEqual ( mockResponse ) ;
6573 } ) ;
6674
67- it ( "logs metadata if context.logger has info function" , async ( ) => {
68- mockNext . mockResolvedValueOnce ( mockResponse ) ;
69- const logger = ( { info : jest . fn ( ) } as unknown ) as Logger ;
70-
71- const context = {
72- logger,
73- } ;
74-
75- const response = await loggerMiddleware ( ) ( mockNext , context ) ( mockArgs ) ;
76- expect ( mockNext ) . toHaveBeenCalledTimes ( 1 ) ;
77- expect ( response ) . toStrictEqual ( mockResponse ) ;
78-
79- expect ( logger . info ) . toHaveBeenCalledTimes ( 1 ) ;
80-
81- expect ( logger . info ) . toHaveBeenCalledWith ( {
82- metadata : {
83- statusCode : mockResponse . response . statusCode ,
84- requestId : mockResponse . response . headers [ "x-amzn-requestid" ] ,
85- extendedRequestId : mockResponse . response . headers [ "x-amz-id-2" ] ,
86- cfId : mockResponse . response . headers [ "x-amz-cf-id" ] ,
87- } ,
75+ describe ( "logs if context.logger has info function" , ( ) => {
76+ it ( "success case with clientName, commandName, input, metadata" , async ( ) => {
77+ mockNext . mockResolvedValueOnce ( mockResponse ) ;
78+
79+ const logger = ( { info : jest . fn ( ) } as unknown ) as Logger ;
80+ const clientName = "mockClientName" ;
81+ const commandName = "mockCommandName" ;
82+
83+ const mockInputLog = { inputKey : "inputKey" , inputSensitiveKey : "SENSITIVE_VALUE" } ;
84+ const inputFilterSensitiveLog = jest . fn ( ) . mockReturnValueOnce ( mockInputLog ) ;
85+ const mockOutputLog = { outputKey : "outputKey" , outputSensitiveKey : "SENSITIVE_VALUE" } ;
86+ const outputFilterSensitiveLog = jest . fn ( ) . mockReturnValueOnce ( mockOutputLog ) ;
87+
88+ const context = {
89+ logger,
90+ clientName,
91+ commandName,
92+ inputFilterSensitiveLog,
93+ outputFilterSensitiveLog,
94+ } ;
95+
96+ const response = await loggerMiddleware ( ) ( mockNext , context ) ( mockArgs ) ;
97+ expect ( mockNext ) . toHaveBeenCalledTimes ( 1 ) ;
98+ expect ( response ) . toStrictEqual ( mockResponse ) ;
99+
100+ expect ( inputFilterSensitiveLog ) . toHaveBeenCalledTimes ( 1 ) ;
101+ expect ( inputFilterSensitiveLog ) . toHaveBeenCalledWith ( mockArgs . input ) ;
102+
103+ const { $metadata, ...outputWithoutMetadata } = mockOutput ;
104+ expect ( outputFilterSensitiveLog ) . toHaveBeenCalledTimes ( 1 ) ;
105+ expect ( outputFilterSensitiveLog ) . toHaveBeenCalledWith ( outputWithoutMetadata ) ;
106+
107+ expect ( logger . info ) . toHaveBeenCalledTimes ( 1 ) ;
108+ expect ( logger . info ) . toHaveBeenCalledWith ( {
109+ clientName,
110+ commandName,
111+ input : mockInputLog ,
112+ output : mockOutputLog ,
113+ metadata : {
114+ statusCode : mockResponse . response . statusCode ,
115+ requestId : mockResponse . response . headers [ "x-amzn-requestid" ] ,
116+ extendedRequestId : mockResponse . response . headers [ "x-amz-id-2" ] ,
117+ cfId : mockResponse . response . headers [ "x-amz-cf-id" ] ,
118+ retry : {
119+ attempts : $metadata . attempts ,
120+ totalDelay : $metadata . totalRetryDelay ,
121+ } ,
122+ } ,
123+ } ) ;
88124 } ) ;
89- } ) ;
90125
91- it ( "logs header x-amzn-request-id as requestId if x-amzn-requestid is not present" , async ( ) => {
92- const requestIdBackup = "requestIdBackup" ;
93- const customResponse = {
94- ...mockResponse ,
95- response : {
96- ...mockResponse . response ,
97- headers : {
98- "x-amzn-request-id" : requestIdBackup ,
126+ it ( "header x-amzn-request-id as requestId if x-amzn-requestid is not present" , async ( ) => {
127+ const requestIdBackup = "requestIdBackup" ;
128+ const customResponse = {
129+ ...mockResponse ,
130+ response : {
131+ ...mockResponse . response ,
132+ headers : {
133+ "x-amzn-request-id" : requestIdBackup ,
134+ } ,
99135 } ,
100- } ,
101- } ;
102- mockNext . mockResolvedValueOnce ( customResponse ) ;
103- const logger = ( { info : jest . fn ( ) } as unknown ) as Logger ;
104-
105- const context = {
106- logger,
107- } ;
108-
109- const response = await loggerMiddleware ( ) ( mockNext , context ) ( mockArgs ) ;
110- expect ( mockNext ) . toHaveBeenCalledTimes ( 1 ) ;
111- expect ( response ) . toStrictEqual ( customResponse ) ;
112-
113- expect ( logger . info ) . toHaveBeenCalledTimes ( 1 ) ;
114-
115- expect ( logger . info ) . toHaveBeenCalledWith ( {
116- metadata : {
117- statusCode : customResponse . response . statusCode ,
118- requestId : requestIdBackup ,
119- extendedRequestId : undefined ,
120- cfId : undefined ,
121- } ,
136+ } ;
137+ mockNext . mockResolvedValueOnce ( customResponse ) ;
138+ const logger = ( { info : jest . fn ( ) } as unknown ) as Logger ;
139+ const inputFilterSensitiveLog = jest . fn ( ) . mockImplementationOnce ( ( input ) => input ) ;
140+ const outputFilterSensitiveLog = jest . fn ( ) . mockImplementationOnce ( ( output ) => output ) ;
141+
142+ const context = {
143+ logger,
144+ inputFilterSensitiveLog,
145+ outputFilterSensitiveLog,
146+ } ;
147+
148+ const response = await loggerMiddleware ( ) ( mockNext , context ) ( mockArgs ) ;
149+ expect ( mockNext ) . toHaveBeenCalledTimes ( 1 ) ;
150+ expect ( response ) . toStrictEqual ( customResponse ) ;
151+
152+ const { $metadata, ...outputWithoutMetadata } = mockOutput ;
153+ expect ( logger . info ) . toHaveBeenCalledTimes ( 1 ) ;
154+ expect ( logger . info ) . toHaveBeenCalledWith ( {
155+ input : mockArgs . input ,
156+ output : outputWithoutMetadata ,
157+ metadata : {
158+ statusCode : customResponse . response . statusCode ,
159+ requestId : requestIdBackup ,
160+ extendedRequestId : undefined ,
161+ cfId : undefined ,
162+ retry : {
163+ attempts : $metadata . attempts ,
164+ totalDelay : $metadata . totalRetryDelay ,
165+ } ,
166+ } ,
167+ } ) ;
122168 } ) ;
123169 } ) ;
124170} ) ;
0 commit comments