@@ -31,6 +31,16 @@ describe("loggerMiddleware", () => {
31
31
} ,
32
32
} ;
33
33
34
+ const mockOutput = {
35
+ $metadata : {
36
+ statusCode : 200 ,
37
+ requestId : "requestId" ,
38
+ attempts : 2 ,
39
+ totalRetryDelay : 350 ,
40
+ } ,
41
+ outputKey : "outputValue" ,
42
+ } ;
43
+
34
44
const mockResponse = {
35
45
response : {
36
46
statusCode : 200 ,
@@ -40,9 +50,7 @@ describe("loggerMiddleware", () => {
40
50
"x-amz-cf-id" : "cfId" ,
41
51
} ,
42
52
} ,
43
- output : {
44
- outputKey : "outputValue" ,
45
- } ,
53
+ output : mockOutput ,
46
54
} ;
47
55
48
56
afterEach ( ( ) => {
@@ -64,61 +72,99 @@ describe("loggerMiddleware", () => {
64
72
expect ( response ) . toStrictEqual ( mockResponse ) ;
65
73
} ) ;
66
74
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
+ } ) ;
88
124
} ) ;
89
- } ) ;
90
125
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
+ } ,
99
135
} ,
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
+ } ) ;
122
168
} ) ;
123
169
} ) ;
124
170
} ) ;
0 commit comments