@@ -40,10 +40,25 @@ describe('Plugin', () => {
4040 } )
4141
4242 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+ )
4358 AWS = require ( `../../../versions/${ dynamoClientName } @${ version } ` ) . get ( )
4459 dynamo = new AWS . DynamoDB ( { endpoint : 'http://127.0.0.1:4566' , region : 'us-east-1' } )
4560
46- const deleteTable = async ( tableName ) => {
61+ const deleteTable = async tableName => {
4762 if ( dynamoClientName === '@aws-sdk/client-dynamodb' ) {
4863 try {
4964 await dynamo . deleteTable ( { TableName : tableName } )
@@ -125,6 +140,139 @@ describe('Plugin', () => {
125140 return agent . close ( { ritmReset : false } )
126141 } )
127142
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+
128276 describe ( 'span pointers' , ( ) => {
129277 beforeEach ( ( ) => {
130278 DynamoDb . dynamoPrimaryKeyConfig = null
0 commit comments