Skip to content
This repository was archived by the owner on Sep 22, 2020. It is now read-only.

Commit 1b7aba2

Browse files
committed
Setup tests for SQSDriver
1 parent cf5b3d0 commit 1b7aba2

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

test/SQSDriver.js

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import { serial as test } from 'ava'
2+
3+
import './helpers/TestJob'
4+
import './helpers/Listener'
5+
import './helpers/Service'
6+
7+
import '../src/Drivers/SQSDriver'
8+
9+
const service = new Service(test, 'sqs', {
10+
image: 'vsouza/sqs-local',
11+
port: 9324
12+
})
13+
const queueName = 'test'
14+
15+
test.beforeEach(async t => {
16+
t.context.driver = new SQSDriver(null, {
17+
endpoint: `http://localhost:${service.port}`,
18+
queues: {
19+
[queueName]: { }
20+
}
21+
})
22+
23+
await t.context.driver.ready()
24+
return t.context.driver.connect()
25+
})
26+
27+
test.afterEach.always(async t => {
28+
const queueUrl = t.context.driver.client.queueUrls[queueName]
29+
t.context.driver.destroy()
30+
31+
// Delete the queue so it will be recreated
32+
// This prevents the current Listener's residual long-polling from getting the next test's messages
33+
await new Promise((resolve, reject) => {
34+
return t.context.driver.client.client.deleteQueue({ QueueUrl: queueUrl }, err => {
35+
if(err) {
36+
return reject(err)
37+
}
38+
39+
return resolve()
40+
})
41+
})
42+
})
43+
44+
test('dispatch', async t => {
45+
const payload = { time: Date.now() }
46+
const job = new TestJob({ ...payload })
47+
48+
await t.context.driver.dispatch(job)
49+
50+
return Listener(t.context.driver, job => t.deepEqual(job.data.data, payload))
51+
})
52+
53+
test('retry dispatch', async t => {
54+
const payload = { time: Date.now() }
55+
const job = new TestJob({ ...payload })
56+
let tries = 0
57+
58+
await t.context.driver.dispatch(job.$tries(2))
59+
60+
return Listener(t.context.driver, job => {
61+
t.is(job.tries, 2)
62+
t.deepEqual(job.data.data, payload)
63+
64+
if(++tries === 1 || tries > 2) {
65+
throw new Error
66+
}
67+
})
68+
})
69+
70+
test('multi dispatch', t => {
71+
let count = 0
72+
73+
setTimeout(() => t.context.driver.dispatch(new TestJob({ id: 1 })), 50)
74+
setTimeout(() => t.context.driver.dispatch(new TestJob({ id: 2 })), 100)
75+
setTimeout(() => t.context.driver.dispatch(new TestJob({ id: 3 })), 200)
76+
setTimeout(() => t.context.driver.dispatch(new TestJob({ id: 4 })), 400)
77+
78+
return Listener(t.context.driver, () => ++count < 4).then(() => t.is(count, 4))
79+
})
80+
81+
test('delayed dispatch', async t => {
82+
const payload = { time: Date.now() }
83+
const job = new TestJob({ ...payload })
84+
85+
const dispatchedAt = Date.now()
86+
await t.context.driver.dispatch(job.$delay(1000))
87+
88+
return Listener(t.context.driver, job => {
89+
t.is(Date.now() - dispatchedAt >= 1000, true)
90+
t.deepEqual(job.data.data, payload)
91+
})
92+
})

0 commit comments

Comments
 (0)