Skip to content

Commit 4a08404

Browse files
rochdevwconti27
andauthored
test: use dynamic queue name for aws sqs tests (#6050)
* should call promise for sending sqs messages with await syntax --------- Co-authored-by: William Conti <william.conti@datadoghq.com>
1 parent d4c55ba commit 4a08404

File tree

1 file changed

+80
-57
lines changed

1 file changed

+80
-57
lines changed

packages/datadog-plugin-aws-sdk/test/sqs.spec.js

Lines changed: 80 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
'use strict'
22

3+
const { randomUUID } = require('crypto')
34
const sinon = require('sinon')
45
const { withNamingSchema, withPeerService, withVersions } = require('../../dd-trace/test/setup/mocha')
56
const agent = require('../../dd-trace/test/plugins/agent')
67
const { setup } = require('./spec_helpers')
78
const semver = require('semver')
89
const { rawExpectedSchema } = require('./sqs-naming')
9-
10-
const queueName = 'SQS_QUEUE_NAME'
11-
const queueNameDSM = 'SQS_QUEUE_NAME_DSM'
12-
const queueNameDSMConsumerOnly = 'SQS_QUEUE_NAME_DSM_CONSUMER_ONLY'
10+
const { computePathwayHash } = require('../../dd-trace/src/datastreams/pathway')
11+
const { ENTRY_PARENT_HASH } = require('../../dd-trace/src/datastreams/processor')
1312

1413
const getQueueParams = (queueName) => {
1514
return {
@@ -20,24 +19,42 @@ const getQueueParams = (queueName) => {
2019
}
2120
}
2221

23-
const queueOptions = getQueueParams(queueName)
24-
const queueOptionsDsm = getQueueParams(queueNameDSM)
25-
const queueOptionsDsmConsumerOnly = getQueueParams(queueNameDSMConsumerOnly)
26-
2722
describe('Plugin', () => {
2823
describe('aws-sdk (sqs)', function () {
2924
setup()
3025

3126
withVersions('aws-sdk', ['aws-sdk', '@aws-sdk/smithy-client'], (version, moduleName) => {
3227
let AWS
3328
let sqs
34-
const QueueUrl = 'http://127.0.0.1:4566/00000000000000000000/SQS_QUEUE_NAME'
35-
const QueueUrlDsm = 'http://127.0.0.1:4566/00000000000000000000/SQS_QUEUE_NAME_DSM'
36-
const QueueUrlDsmConsumerOnly = 'http://127.0.0.1:4566/00000000000000000000/SQS_QUEUE_NAME_DSM_CONSUMER_ONLY'
29+
let queueName
30+
let queueNameDSM
31+
let queueNameDSMConsumerOnly
32+
let queueOptions
33+
let queueOptionsDsm
34+
let queueOptionsDsmConsumerOnly
35+
let QueueUrl
36+
let QueueUrlDsm
37+
let QueueUrlDsmConsumerOnly
3738
let tracer
3839

3940
const sqsClientName = moduleName === '@aws-sdk/smithy-client' ? '@aws-sdk/client-sqs' : 'aws-sdk'
4041

42+
beforeEach(() => {
43+
const id = randomUUID()
44+
45+
queueName = `SQS_QUEUE_NAME-${id}`
46+
queueNameDSM = `SQS_QUEUE_NAME_DSM-${id}`
47+
queueNameDSMConsumerOnly = `SQS_QUEUE_NAME_DSM_CONSUMER_ONLY-${id}`
48+
49+
queueOptions = getQueueParams(queueName)
50+
queueOptionsDsm = getQueueParams(queueNameDSM)
51+
queueOptionsDsmConsumerOnly = getQueueParams(queueNameDSMConsumerOnly)
52+
53+
QueueUrl = `http://127.0.0.1:4566/00000000000000000000/SQS_QUEUE_NAME-${id}`
54+
QueueUrlDsm = `http://127.0.0.1:4566/00000000000000000000/SQS_QUEUE_NAME_DSM-${id}`
55+
QueueUrlDsmConsumerOnly = `http://127.0.0.1:4566/00000000000000000000/SQS_QUEUE_NAME_DSM_CONSUMER_ONLY-${id}`
56+
})
57+
4158
describe('without configuration', () => {
4259
before(() => {
4360
process.env.DD_DATA_STREAMS_ENABLED = 'true'
@@ -49,18 +66,20 @@ describe('Plugin', () => {
4966
)
5067
})
5168

52-
before(done => {
69+
before(() => {
5370
AWS = require(`../../../versions/${sqsClientName}@${version}`).get()
54-
5571
sqs = new AWS.SQS({ endpoint: 'http://127.0.0.1:4566', region: 'us-east-1' })
72+
})
73+
74+
beforeEach(done => {
5675
sqs.createQueue(queueOptions, (err, res) => {
5776
if (err) return done(err)
5877

5978
done()
6079
})
6180
})
6281

63-
after(done => {
82+
afterEach(done => {
6483
sqs.deleteQueue({ QueueUrl }, done)
6584
})
6685

@@ -75,7 +94,7 @@ describe('Plugin', () => {
7594
MessageBody: 'test body',
7695
QueueUrl
7796
}, done),
78-
'SQS_QUEUE_NAME',
97+
() => queueName,
7998
'queuename'
8099
)
81100

@@ -125,7 +144,7 @@ describe('Plugin', () => {
125144

126145
expect(span.resource.startsWith('sendMessage')).to.equal(true)
127146
expect(span.meta).to.include({
128-
queuename: 'SQS_QUEUE_NAME'
147+
queuename: queueName
129148
})
130149

131150
parentId = span.span_id.toString()
@@ -164,7 +183,7 @@ describe('Plugin', () => {
164183

165184
expect(span.resource.startsWith('sendMessageBatch')).to.equal(true)
166185
expect(span.meta).to.include({
167-
queuename: 'SQS_QUEUE_NAME'
186+
queuename: queueName
168187
})
169188

170189
parentId = span.span_id.toString()
@@ -314,18 +333,20 @@ describe('Plugin', () => {
314333
)
315334
})
316335

317-
before(done => {
336+
before(() => {
318337
AWS = require(`../../../versions/${sqsClientName}@${version}`).get()
319-
320338
sqs = new AWS.SQS({ endpoint: 'http://127.0.0.1:4566', region: 'us-east-1' })
339+
})
340+
341+
beforeEach(done => {
321342
sqs.createQueue(queueOptions, (err, res) => {
322343
if (err) return done(err)
323344

324345
done()
325346
})
326347
})
327348

328-
after(done => {
349+
afterEach(done => {
329350
sqs.deleteQueue({ QueueUrl }, done)
330351
})
331352

@@ -345,7 +366,7 @@ describe('Plugin', () => {
345366
})
346367

347368
expect(span.meta).to.include({
348-
queuename: 'SQS_QUEUE_NAME',
369+
queuename: queueName,
349370
aws_service: 'SQS',
350371
region: 'us-east-1'
351372
})
@@ -385,8 +406,8 @@ describe('Plugin', () => {
385406
})
386407

387408
describe('data stream monitoring', () => {
388-
const expectedProducerHash = '4673734031235697865'
389-
const expectedConsumerHash = '9749472979704578383'
409+
let expectedProducerHash
410+
let expectedConsumerHash
390411
let nowStub
391412

392413
before(() => {
@@ -398,40 +419,47 @@ describe('Plugin', () => {
398419
before(async () => {
399420
return agent.load('aws-sdk', {
400421
sqs: {
401-
consumer: false,
402422
dsmEnabled: true
403423
}
404424
},
405425
{ dsmEnabled: true })
406426
})
407427

408-
before(done => {
428+
before(() => {
409429
AWS = require(`../../../versions/${sqsClientName}@${version}`).get()
410-
411430
sqs = new AWS.SQS({ endpoint: 'http://127.0.0.1:4566', region: 'us-east-1' })
412-
sqs.createQueue(queueOptionsDsm, (err, res) => {
413-
if (err) return done(err)
414-
415-
done()
416-
})
417431
})
418432

419-
before(done => {
420-
AWS = require(`../../../versions/${sqsClientName}@${version}`).get()
433+
beforeEach(() => {
434+
const producerHash = computePathwayHash(
435+
'test',
436+
'tester',
437+
['direction:out', 'topic:' + queueNameDSM, 'type:sqs'],
438+
ENTRY_PARENT_HASH
439+
)
421440

422-
sqs = new AWS.SQS({ endpoint: 'http://127.0.0.1:4566', region: 'us-east-1' })
423-
sqs.createQueue(queueOptionsDsmConsumerOnly, (err, res) => {
424-
if (err) return done(err)
441+
expectedProducerHash = producerHash.readBigUInt64BE(0).toString()
442+
expectedConsumerHash = computePathwayHash(
443+
'test',
444+
'tester',
445+
['direction:in', 'topic:' + queueNameDSM, 'type:sqs'],
446+
producerHash
447+
).readBigUInt64BE(0).toString()
448+
})
425449

426-
done()
427-
})
450+
beforeEach(done => {
451+
sqs.createQueue(queueOptionsDsm, (err, res) => err ? done(err) : done())
452+
})
453+
454+
beforeEach(done => {
455+
sqs.createQueue(queueOptionsDsmConsumerOnly, (err, res) => err ? done(err) : done())
428456
})
429457

430-
after(done => {
458+
afterEach(done => {
431459
sqs.deleteQueue({ QueueUrl: QueueUrlDsm }, done)
432460
})
433461

434-
after(done => {
462+
afterEach(done => {
435463
sqs.deleteQueue({ QueueUrl: QueueUrlDsmConsumerOnly }, done)
436464
})
437465

@@ -502,28 +530,23 @@ describe('Plugin', () => {
502530
if (sqsClientName === 'aws-sdk' && semver.intersects(version, '>=2.3')) {
503531
it('Should set pathway hash tag on a span when consuming and promise() was used over a callback',
504532
async () => {
505-
await sqs.sendMessage({ MessageBody: 'test DSM', QueueUrl: QueueUrlDsm })
506-
await sqs.receiveMessage({ QueueUrl: QueueUrlDsm }).promise()
507-
508533
let consumeSpanMeta = {}
509-
return new Promise((resolve, reject) => {
510-
agent.assertSomeTraces(traces => {
511-
const span = traces[0][0]
534+
const tracePromise = agent.assertSomeTraces(traces => {
535+
const span = traces[0][0]
512536

513-
if (span.name === 'aws.request' && span.meta['aws.operation'] === 'receiveMessage') {
514-
consumeSpanMeta = span.meta
515-
}
537+
if (span.name === 'aws.request' && span.meta['aws.operation'] === 'receiveMessage') {
538+
consumeSpanMeta = span.meta
539+
}
516540

517-
try {
518-
expect(consumeSpanMeta).to.include({
519-
'pathway.hash': expectedConsumerHash
520-
})
521-
resolve()
522-
} catch (error) {
523-
reject(error)
524-
}
541+
expect(consumeSpanMeta).to.include({
542+
'pathway.hash': expectedConsumerHash
525543
})
526544
})
545+
546+
await sqs.sendMessage({ MessageBody: 'test DSM', QueueUrl: QueueUrlDsm }).promise()
547+
await sqs.receiveMessage({ QueueUrl: QueueUrlDsm }).promise()
548+
549+
return tracePromise
527550
})
528551
}
529552

0 commit comments

Comments
 (0)