@@ -40,10 +40,25 @@ describe('Plugin', () => {
40
40
} )
41
41
42
42
before ( async ( ) => {
43
+ await agent . load ( 'aws-sdk' )
44
+ await agent . close ( { ritmReset : false , wipe : true } )
45
+ await agent . load (
46
+ 'aws-sdk' ,
47
+ { } ,
48
+ {
49
+ cloudPayloadTagging : {
50
+ requestsEnabled : true ,
51
+ responsesEnabled : true ,
52
+ request : '$.Item.name' ,
53
+ response : '$.Attributes,$.Item.data' ,
54
+ maxDepth : 5
55
+ }
56
+ }
57
+ )
43
58
AWS = require ( `../../../versions/${ dynamoClientName } @${ version } ` ) . get ( )
44
59
dynamo = new AWS . DynamoDB ( { endpoint : 'http://127.0.0.1:4566' , region : 'us-east-1' } )
45
60
46
- const deleteTable = async ( tableName ) => {
61
+ const deleteTable = async tableName => {
47
62
if ( dynamoClientName === '@aws-sdk/client-dynamodb' ) {
48
63
try {
49
64
await dynamo . deleteTable ( { TableName : tableName } )
@@ -125,6 +140,139 @@ describe('Plugin', () => {
125
140
return agent . close ( { ritmReset : false } )
126
141
} )
127
142
143
+ describe ( 'with payload tagging' , ( ) => {
144
+ it ( 'adds request and response payloads as flattened tags for putItem' , done => {
145
+ agent
146
+ . use ( traces => {
147
+ const span = traces [ 0 ] [ 0 ]
148
+
149
+ expect ( span . resource ) . to . equal ( `putItem ${ oneKeyTableName } ` )
150
+ expect ( span . meta ) . to . include ( {
151
+ 'aws.dynamodb.table_name' : oneKeyTableName ,
152
+ aws_service : 'DynamoDB' ,
153
+ region : 'us-east-1' ,
154
+ 'aws.request.body.TableName' : oneKeyTableName ,
155
+ 'aws.request.body.Item.name' : 'redacted' ,
156
+ 'aws.request.body.Item.data.S' : 'test-data'
157
+ } )
158
+ } )
159
+ . then ( done , done )
160
+
161
+ dynamo . putItem (
162
+ {
163
+ TableName : oneKeyTableName ,
164
+ Item : {
165
+ name : { S : 'test-name' } ,
166
+ data : { S : 'test-data' }
167
+ }
168
+ } ,
169
+ e => e && done ( e )
170
+ )
171
+ } )
172
+
173
+ it ( 'adds request and response payloads as flattened tags for updateItem' , ( done ) => {
174
+ agent
175
+ . use ( ( traces ) => {
176
+ const span = traces [ 0 ] [ 0 ]
177
+
178
+ expect ( span . resource ) . to . equal ( `updateItem ${ oneKeyTableName } ` )
179
+ expect ( span . meta ) . to . include ( {
180
+ 'aws.dynamodb.table_name' : oneKeyTableName ,
181
+ aws_service : 'DynamoDB' ,
182
+ region : 'us-east-1' ,
183
+ 'aws.request.body.TableName' : oneKeyTableName ,
184
+ 'aws.request.body.Key.name.S' : 'test-name' ,
185
+ 'aws.request.body.AttributeUpdates.data.Value.S' : 'updated-data'
186
+ } )
187
+ } )
188
+ . then ( done , done )
189
+
190
+ dynamo . updateItem (
191
+ {
192
+ TableName : oneKeyTableName ,
193
+ Key : {
194
+ name : { S : 'test-name' }
195
+ } ,
196
+ AttributeUpdates : {
197
+ data : {
198
+ Action : 'PUT' ,
199
+ Value : { S : 'updated-data' }
200
+ }
201
+ }
202
+ } ,
203
+ ( e ) => e && done ( e )
204
+ )
205
+ } )
206
+
207
+ it ( 'adds request and response payloads as flattened tags for deleteItem' , ( done ) => {
208
+ agent
209
+ . use ( ( traces ) => {
210
+ const span = traces [ 0 ] [ 0 ]
211
+
212
+ expect ( span . resource ) . to . equal ( `deleteItem ${ oneKeyTableName } ` )
213
+ expect ( span . meta ) . to . include ( {
214
+ 'aws.dynamodb.table_name' : oneKeyTableName ,
215
+ aws_service : 'DynamoDB' ,
216
+ region : 'us-east-1' ,
217
+ 'aws.request.body.TableName' : oneKeyTableName ,
218
+ 'aws.request.body.Key.name.S' : 'test-name'
219
+ } )
220
+ } )
221
+ . then ( done , done )
222
+
223
+ dynamo . deleteItem (
224
+ {
225
+ TableName : oneKeyTableName ,
226
+ Key : {
227
+ name : { S : 'test-name' }
228
+ }
229
+ } ,
230
+ ( e ) => e && done ( e )
231
+ )
232
+ } )
233
+
234
+ it ( 'adds request and response payloads as flattened tags for getItem' , ( done ) => {
235
+ dynamo . putItem ( {
236
+ TableName : oneKeyTableName ,
237
+ Item : {
238
+ name : { S : 'test-get-name' } ,
239
+ data : { S : 'test-get-data' }
240
+ }
241
+ } , ( putErr ) => {
242
+ if ( putErr ) return done ( putErr )
243
+
244
+ setTimeout ( ( ) => {
245
+ agent
246
+ . use ( ( traces ) => {
247
+ const span = traces [ 0 ] [ 0 ]
248
+
249
+ expect ( span . resource ) . to . equal ( `getItem ${ oneKeyTableName } ` )
250
+ expect ( span . meta ) . to . include ( {
251
+ 'aws.dynamodb.table_name' : oneKeyTableName ,
252
+ aws_service : 'DynamoDB' ,
253
+ region : 'us-east-1' ,
254
+ 'aws.request.body.TableName' : oneKeyTableName ,
255
+ 'aws.request.body.Key.name.S' : 'test-get-name' ,
256
+ 'aws.response.body.Item.name.S' : 'test-get-name' ,
257
+ 'aws.response.body.Item.data' : 'redacted'
258
+ } )
259
+ } )
260
+ . then ( done , done )
261
+
262
+ dynamo . getItem (
263
+ {
264
+ TableName : oneKeyTableName ,
265
+ Key : {
266
+ name : { S : 'test-get-name' }
267
+ }
268
+ } ,
269
+ ( e ) => e && done ( e )
270
+ )
271
+ } , 100 ) // Small delay to ensure put completes
272
+ } )
273
+ } )
274
+ } )
275
+
128
276
describe ( 'span pointers' , ( ) => {
129
277
beforeEach ( ( ) => {
130
278
DynamoDb . dynamoPrimaryKeyConfig = null
0 commit comments