qdone 1.7.0 → 2.0.0-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -1
- package/commonjs/index.js +10 -0
- package/commonjs/package.json +3 -0
- package/commonjs/src/cache.js +142 -0
- package/commonjs/src/cloudWatch.js +148 -0
- package/commonjs/src/consumer.js +483 -0
- package/commonjs/src/defaults.js +107 -0
- package/commonjs/src/enqueue.js +498 -0
- package/commonjs/src/idleQueues.js +466 -0
- package/commonjs/src/qrlCache.js +250 -0
- package/commonjs/src/sqs.js +160 -0
- package/npm-shrinkwrap.json +17240 -3367
- package/package.json +41 -29
- package/src/bin.js +3 -0
- package/src/cache.js +18 -22
- package/src/cli.js +268 -182
- package/src/cloudWatch.js +97 -0
- package/src/consumer.js +346 -0
- package/src/defaults.js +114 -0
- package/src/enqueue.js +239 -196
- package/src/idleQueues.js +242 -223
- package/src/monitor.js +53 -0
- package/src/qrlCache.js +110 -83
- package/src/sentry.js +30 -0
- package/src/sqs.js +73 -0
- package/src/worker.js +197 -202
- package/.coveralls.yml +0 -1
- package/.travis.yml +0 -19
- package/CHANGELOG.md +0 -121
- package/index.js +0 -6
- package/qdone +0 -2
- package/test/fixtures/test-child-kill-linux.sh +0 -9
- package/test/fixtures/test-fifo01-x24.batch +0 -24
- package/test/fixtures/test-too-big-1.batch +0 -10
- package/test/fixtures/test-unique01-x24.batch +0 -24
- package/test/fixtures/test-unique02-x24.batch +0 -24
- package/test/fixtures/test-unique24-x24.batch +0 -24
- package/test/fixtures/test-unique24-x240.batch +0 -240
- package/test/test.cache.js +0 -61
- package/test/test.cli.js +0 -1609
package/test/test.cli.js
DELETED
|
@@ -1,1609 +0,0 @@
|
|
|
1
|
-
/* eslint-env mocha */
|
|
2
|
-
|
|
3
|
-
const chai = require('chai')
|
|
4
|
-
// const exec = require('child_process').exec
|
|
5
|
-
const packageJson = require('../package.json')
|
|
6
|
-
const sinon = require('sinon')
|
|
7
|
-
const stripAnsi = require('strip-ansi')
|
|
8
|
-
const fs = require('fs')
|
|
9
|
-
const AWS = require('aws-sdk-mock')
|
|
10
|
-
// const mockStdin = require('mock-stdin')
|
|
11
|
-
|
|
12
|
-
const expect = chai.expect
|
|
13
|
-
chai.should()
|
|
14
|
-
|
|
15
|
-
delete process.env.AWS_ACCESS_KEY_ID
|
|
16
|
-
delete process.env.AWS_SECRET_ACCESS_KEY
|
|
17
|
-
|
|
18
|
-
let sandbox
|
|
19
|
-
let clock
|
|
20
|
-
|
|
21
|
-
beforeEach(function () {
|
|
22
|
-
sandbox = sinon.createSandbox()
|
|
23
|
-
sandbox.stub(process.stdout, 'write')
|
|
24
|
-
sandbox.stub(process.stderr, 'write')
|
|
25
|
-
clock = sandbox.useFakeTimers()
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
afterEach(function () {
|
|
29
|
-
sandbox.restore()
|
|
30
|
-
clock.restore()
|
|
31
|
-
AWS.restore()
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
function cliTest (command, success, failure) {
|
|
35
|
-
const cli = require('../src/cli')
|
|
36
|
-
const qrlCache = require('../src/qrlCache')
|
|
37
|
-
function sandboxRestore (value) {
|
|
38
|
-
sandbox.restore()
|
|
39
|
-
qrlCache.clear()
|
|
40
|
-
return value
|
|
41
|
-
}
|
|
42
|
-
return function (done) {
|
|
43
|
-
cli
|
|
44
|
-
.run(command)
|
|
45
|
-
.then(function (result) {
|
|
46
|
-
success = success || (result => result)
|
|
47
|
-
const stdout = process.stdout.write.args.reduce((a, b) => a + b, '')
|
|
48
|
-
const stderr = process.stderr.write.args.reduce((a, b) => a + b, '')
|
|
49
|
-
if (process.env.DEBUG) {
|
|
50
|
-
process.nextTick(_ => {
|
|
51
|
-
process.stdout.write(stdout)
|
|
52
|
-
process.stderr.write(stderr)
|
|
53
|
-
})
|
|
54
|
-
}
|
|
55
|
-
return success(result, stripAnsi(stdout), stripAnsi(stderr))
|
|
56
|
-
})
|
|
57
|
-
.catch(function (err) {
|
|
58
|
-
failure = failure || (err => { throw err })
|
|
59
|
-
const stdout = process.stdout.write.args.reduce((a, b) => a + b, '')
|
|
60
|
-
const stderr = process.stderr.write.args.reduce((a, b) => a + b, '')
|
|
61
|
-
if (process.env.DEBUG) {
|
|
62
|
-
process.nextTick(_ => {
|
|
63
|
-
process.stdout.write(stdout)
|
|
64
|
-
process.stderr.write(stderr)
|
|
65
|
-
})
|
|
66
|
-
}
|
|
67
|
-
return failure(err, stripAnsi(stdout), stripAnsi(stderr))
|
|
68
|
-
})
|
|
69
|
-
.then(sandboxRestore)
|
|
70
|
-
.catch(sandboxRestore)
|
|
71
|
-
.then(done)
|
|
72
|
-
.catch(done)
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
describe('cli', function () {
|
|
77
|
-
// Root command
|
|
78
|
-
describe('qdone', function () {
|
|
79
|
-
it('should print usage and exit 0',
|
|
80
|
-
cliTest([], function (result, stdout, stderr) {
|
|
81
|
-
expect(stdout).to.contain('usage: ')
|
|
82
|
-
}))
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
describe('qdone --help', function () {
|
|
86
|
-
it('should print usage and exit 0',
|
|
87
|
-
cliTest(['--help'], function (result, stdout, stderr) {
|
|
88
|
-
expect(stdout).to.contain('usage: ')
|
|
89
|
-
}))
|
|
90
|
-
})
|
|
91
|
-
|
|
92
|
-
describe('qdone --version', function () {
|
|
93
|
-
it('should print package.json version and exit 0',
|
|
94
|
-
cliTest(['--version'], function (result, stdout, stderr) {
|
|
95
|
-
expect(stdout).to.contain(packageJson.version)
|
|
96
|
-
}))
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
describe('qdone --some-invalid-option', function () {
|
|
100
|
-
it('should print usage and exit 1',
|
|
101
|
-
cliTest(['--some-invalid-option'], null, function (err, stdout, stderr) {
|
|
102
|
-
expect(stdout).to.contain('usage: ')
|
|
103
|
-
expect(err).to.be.an('error')
|
|
104
|
-
}))
|
|
105
|
-
})
|
|
106
|
-
|
|
107
|
-
// Enqueue
|
|
108
|
-
describe('qdone enqueue', function () {
|
|
109
|
-
it('should print usage and exit 1 with error',
|
|
110
|
-
cliTest(['enqueue', '--verbose'], null, function (err, stdout, stderr) {
|
|
111
|
-
expect(stdout).to.contain('usage: ')
|
|
112
|
-
expect(stderr).to.contain('<queue>')
|
|
113
|
-
expect(err).to.be.an('error')
|
|
114
|
-
}))
|
|
115
|
-
})
|
|
116
|
-
|
|
117
|
-
describe('qdone enqueue --help', function () {
|
|
118
|
-
it('should print usage and exit 0',
|
|
119
|
-
cliTest(['enqueue', '--help'], function (result, stdout, stderr) {
|
|
120
|
-
expect(stdout).to.contain('usage: ')
|
|
121
|
-
expect(stdout).to.contain('enqueue')
|
|
122
|
-
}))
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
describe('qdone enqueue onlyQueue', function () {
|
|
126
|
-
it('should print usage and exit 1 with error',
|
|
127
|
-
cliTest(['enqueue', '--verbose', 'onlyQueue'], null, function (err, stdout, stderr) {
|
|
128
|
-
expect(stdout).to.contain('usage: ')
|
|
129
|
-
expect(stderr).to.contain('<queue>')
|
|
130
|
-
expect(err).to.be.an('error')
|
|
131
|
-
}))
|
|
132
|
-
})
|
|
133
|
-
|
|
134
|
-
describe('qdone enqueue testQueue true # (with no credentials)', function () {
|
|
135
|
-
before(function () {
|
|
136
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
137
|
-
const err = new Error('Access to the resource https://sqs.us-east-1.amazonaws.com/ is denied.')
|
|
138
|
-
err.code = 'AccessDenied'
|
|
139
|
-
callback(err)
|
|
140
|
-
})
|
|
141
|
-
})
|
|
142
|
-
it('should print usage and exit 1 with error',
|
|
143
|
-
cliTest(['enqueue', 'testQueue', 'true'], null, function (err, stdout, stderr) {
|
|
144
|
-
expect(stdout).to.contain('You must provide')
|
|
145
|
-
expect(stderr).to.contain('Access to the resource https://sqs.us-east-1.amazonaws.com/ is denied.')
|
|
146
|
-
expect(err).to.be.an('error')
|
|
147
|
-
}))
|
|
148
|
-
})
|
|
149
|
-
|
|
150
|
-
describe('qdone enqueue testQueue true # (queue exists)', function () {
|
|
151
|
-
before(function () {
|
|
152
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
153
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
154
|
-
})
|
|
155
|
-
AWS.mock('SQS', 'sendMessage', function (params, callback) {
|
|
156
|
-
callback(null, {
|
|
157
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
158
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
159
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE'
|
|
160
|
-
})
|
|
161
|
-
})
|
|
162
|
-
})
|
|
163
|
-
it('should print id of enqueued message and exit 0',
|
|
164
|
-
cliTest(['enqueue', '--verbose', 'testQueue', 'true'], function (result, stdout, stderr) {
|
|
165
|
-
expect(stderr).to.contain('Enqueued job da68f62c-0c07-4bee-bf5f-7e856EXAMPLE')
|
|
166
|
-
}))
|
|
167
|
-
})
|
|
168
|
-
|
|
169
|
-
describe('qdone enqueue --fifo testQueue true # (queue exists, fifo mode)', function () {
|
|
170
|
-
before(function () {
|
|
171
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
172
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
173
|
-
})
|
|
174
|
-
AWS.mock('SQS', 'sendMessage', function (params, callback) {
|
|
175
|
-
callback(null, {
|
|
176
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
177
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
178
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE'
|
|
179
|
-
})
|
|
180
|
-
})
|
|
181
|
-
})
|
|
182
|
-
it('should print id of enqueued message and exit 0',
|
|
183
|
-
cliTest(['enqueue', '--fifo', 'testQueue', 'true'], function (result, stdout, stderr) {
|
|
184
|
-
expect(stderr).to.contain('Enqueued job da68f62c-0c07-4bee-bf5f-7e856EXAMPLE')
|
|
185
|
-
}))
|
|
186
|
-
})
|
|
187
|
-
|
|
188
|
-
describe('qdone enqueue --fifo --group-id gidtest testQueue true # (queue exists, fifo mode, explicit group)', function () {
|
|
189
|
-
before(function () {
|
|
190
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
191
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
192
|
-
})
|
|
193
|
-
AWS.mock('SQS', 'sendMessage', function (params, callback) {
|
|
194
|
-
callback(null, {
|
|
195
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
196
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
197
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE'
|
|
198
|
-
})
|
|
199
|
-
})
|
|
200
|
-
})
|
|
201
|
-
it('should print id of enqueued message and exit 0',
|
|
202
|
-
cliTest(['enqueue', '--verbose', '--fifo', '--group-id', 'gidtest', 'testQueue', 'true'], function (result, stdout, stderr) {
|
|
203
|
-
expect(stderr).to.contain('Enqueued job da68f62c-0c07-4bee-bf5f-7e856EXAMPLE')
|
|
204
|
-
}))
|
|
205
|
-
})
|
|
206
|
-
|
|
207
|
-
describe('qdone enqueue --quiet testQueue true # (queue exists)', function () {
|
|
208
|
-
before(function () {
|
|
209
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
210
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
211
|
-
})
|
|
212
|
-
AWS.mock('SQS', 'sendMessage', function (params, callback) {
|
|
213
|
-
callback(null, {
|
|
214
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
215
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
216
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE'
|
|
217
|
-
})
|
|
218
|
-
})
|
|
219
|
-
})
|
|
220
|
-
it('should have no output and exit 0',
|
|
221
|
-
cliTest(['enqueue', '--quiet', 'testQueue', 'true'], function (result, stdout, stderr) {
|
|
222
|
-
expect(stderr).to.equal('')
|
|
223
|
-
expect(stdout).to.equal('')
|
|
224
|
-
}))
|
|
225
|
-
})
|
|
226
|
-
|
|
227
|
-
describe('qdone enqueue testQueue true # (queue does not exist)', function () {
|
|
228
|
-
before(function () {
|
|
229
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
230
|
-
const err = new Error('Queue does not exist.')
|
|
231
|
-
err.code = 'AWS.SimpleQueueService.NonExistentQueue'
|
|
232
|
-
callback(err)
|
|
233
|
-
})
|
|
234
|
-
AWS.mock('SQS', 'createQueue', function (params, callback) {
|
|
235
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
236
|
-
})
|
|
237
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
238
|
-
callback(null, {
|
|
239
|
-
Attributes: {
|
|
240
|
-
ApproximateNumberOfMessages: '0',
|
|
241
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
242
|
-
ApproximateNumberOfMessagesNotVisible: '0',
|
|
243
|
-
CreatedTimestamp: '1442426968',
|
|
244
|
-
DelaySeconds: '0',
|
|
245
|
-
LastModifiedTimestamp: '1442426968',
|
|
246
|
-
MaximumMessageSize: '262144',
|
|
247
|
-
MessageRetentionPeriod: '345600',
|
|
248
|
-
QueueArn: 'arn:aws:sqs:us-east-1:80398EXAMPLE:MyNewQueue',
|
|
249
|
-
ReceiveMessageWaitTimeSeconds: '0',
|
|
250
|
-
RedrivePolicy: `{'deadLetterTargetArn':'arn:aws:sqs:us-east-1:80398EXAMPLE:${params.QueueName}','maxReceiveCount':1000}`,
|
|
251
|
-
VisibilityTimeout: '30'
|
|
252
|
-
}
|
|
253
|
-
})
|
|
254
|
-
})
|
|
255
|
-
AWS.mock('SQS', 'sendMessage', function (params, callback) {
|
|
256
|
-
callback(null, {
|
|
257
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
258
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
259
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE'
|
|
260
|
-
})
|
|
261
|
-
})
|
|
262
|
-
})
|
|
263
|
-
it('should create queues, print the id of enqueued message and exit 0',
|
|
264
|
-
cliTest(['enqueue', 'testQueue', 'true'], function (result, stdout, stderr) {
|
|
265
|
-
expect(stderr).to.contain('Creating fail queue testQueue_failed')
|
|
266
|
-
expect(stderr).to.contain('Creating queue testQueue')
|
|
267
|
-
expect(stderr).to.contain('Enqueued job da68f62c-0c07-4bee-bf5f-7e856EXAMPLE')
|
|
268
|
-
}))
|
|
269
|
-
})
|
|
270
|
-
|
|
271
|
-
describe('qdone enqueue --quiet testQueue true # (queue does not exist)', function () {
|
|
272
|
-
before(function () {
|
|
273
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
274
|
-
const err = new Error('Queue does not exist.')
|
|
275
|
-
err.code = 'AWS.SimpleQueueService.NonExistentQueue'
|
|
276
|
-
callback(err)
|
|
277
|
-
})
|
|
278
|
-
AWS.mock('SQS', 'createQueue', function (params, callback) {
|
|
279
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
280
|
-
})
|
|
281
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
282
|
-
callback(null, {
|
|
283
|
-
Attributes: {
|
|
284
|
-
ApproximateNumberOfMessages: '0',
|
|
285
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
286
|
-
ApproximateNumberOfMessagesNotVisible: '0',
|
|
287
|
-
CreatedTimestamp: '1442426968',
|
|
288
|
-
DelaySeconds: '0',
|
|
289
|
-
LastModifiedTimestamp: '1442426968',
|
|
290
|
-
MaximumMessageSize: '262144',
|
|
291
|
-
MessageRetentionPeriod: '345600',
|
|
292
|
-
QueueArn: 'arn:aws:sqs:us-east-1:80398EXAMPLE:MyNewQueue',
|
|
293
|
-
ReceiveMessageWaitTimeSeconds: '0',
|
|
294
|
-
RedrivePolicy: `{'deadLetterTargetArn':'arn:aws:sqs:us-east-1:80398EXAMPLE:${params.QueueName}','maxReceiveCount':1000}`,
|
|
295
|
-
VisibilityTimeout: '30'
|
|
296
|
-
}
|
|
297
|
-
})
|
|
298
|
-
})
|
|
299
|
-
AWS.mock('SQS', 'sendMessage', function (params, callback) {
|
|
300
|
-
callback(null, {
|
|
301
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
302
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
303
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE'
|
|
304
|
-
})
|
|
305
|
-
})
|
|
306
|
-
})
|
|
307
|
-
it('should create queues, print nothing and exit 0',
|
|
308
|
-
cliTest(['enqueue', '--quiet', 'testQueue', 'true'], function (result, stdout, stderr) {
|
|
309
|
-
expect(stderr).to.equal('')
|
|
310
|
-
expect(stdout).to.equal('')
|
|
311
|
-
}))
|
|
312
|
-
})
|
|
313
|
-
|
|
314
|
-
describe('qdone enqueue testQueue true # (unhandled error on fail queue creation)', function () {
|
|
315
|
-
before(function () {
|
|
316
|
-
var code = 'AWS.SimpleQueueService.NonExistentQueue'
|
|
317
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
318
|
-
const err = new Error('Queue does not exist.')
|
|
319
|
-
err.code = code
|
|
320
|
-
code = 'AWS.SimpleQueueService.SomeOtherError'
|
|
321
|
-
callback(err)
|
|
322
|
-
})
|
|
323
|
-
AWS.mock('SQS', 'createQueue', function (params, callback) {
|
|
324
|
-
// callback(null, {QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}`})
|
|
325
|
-
const err = new Error('Some Other Error.')
|
|
326
|
-
err.code = 'AWS.SimpleQueueService.SomeOtherError'
|
|
327
|
-
callback(err)
|
|
328
|
-
})
|
|
329
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
330
|
-
callback(null, {
|
|
331
|
-
Attributes: {
|
|
332
|
-
ApproximateNumberOfMessages: '0',
|
|
333
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
334
|
-
ApproximateNumberOfMessagesNotVisible: '0',
|
|
335
|
-
CreatedTimestamp: '1442426968',
|
|
336
|
-
DelaySeconds: '0',
|
|
337
|
-
LastModifiedTimestamp: '1442426968',
|
|
338
|
-
MaximumMessageSize: '262144',
|
|
339
|
-
MessageRetentionPeriod: '345600',
|
|
340
|
-
QueueArn: 'arn:aws:sqs:us-east-1:80398EXAMPLE:MyNewQueue',
|
|
341
|
-
ReceiveMessageWaitTimeSeconds: '0',
|
|
342
|
-
RedrivePolicy: `{'deadLetterTargetArn':'arn:aws:sqs:us-east-1:80398EXAMPLE:${params.QueueName}','maxReceiveCount':1000}`,
|
|
343
|
-
VisibilityTimeout: '30'
|
|
344
|
-
}
|
|
345
|
-
})
|
|
346
|
-
})
|
|
347
|
-
AWS.mock('SQS', 'sendMessage', function (params, callback) {
|
|
348
|
-
callback(null, {
|
|
349
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
350
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
351
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE'
|
|
352
|
-
})
|
|
353
|
-
})
|
|
354
|
-
})
|
|
355
|
-
it('should print traceback and exit 1 with error',
|
|
356
|
-
cliTest(['enqueue', '--verbose', 'testQueue', 'true'], null, function (err, stdout, stderr) {
|
|
357
|
-
expect(err).to.be.an('error')
|
|
358
|
-
}))
|
|
359
|
-
})
|
|
360
|
-
|
|
361
|
-
// Enqueue batch
|
|
362
|
-
describe('qdone enqueue-batch', function () {
|
|
363
|
-
it('should print usage and exit 1 with error',
|
|
364
|
-
cliTest(['enqueue-batch'], null, function (err, stdout, stderr) {
|
|
365
|
-
expect(stdout).to.contain('usage: ')
|
|
366
|
-
expect(stderr).to.contain('<file>')
|
|
367
|
-
expect(err).to.be.an('error')
|
|
368
|
-
}))
|
|
369
|
-
})
|
|
370
|
-
|
|
371
|
-
describe('qdone enqueue-batch --help', function () {
|
|
372
|
-
it('should print usage and exit 0',
|
|
373
|
-
cliTest(['enqueue-batch', '--help'], function (result, stdout, stderr) {
|
|
374
|
-
expect(stdout).to.contain('usage: ')
|
|
375
|
-
expect(stdout).to.contain('enqueue-batch')
|
|
376
|
-
}))
|
|
377
|
-
})
|
|
378
|
-
|
|
379
|
-
describe('qdone enqueue-batch some_non_existent_file', function () {
|
|
380
|
-
it('should exit 1 with error',
|
|
381
|
-
cliTest(['enqueue-batch', 'some_non_existent_file'], null, function (err, stdout, stderr) {
|
|
382
|
-
expect(stderr).to.contain('no such file or directory')
|
|
383
|
-
expect(err).to.be.an('error')
|
|
384
|
-
}))
|
|
385
|
-
})
|
|
386
|
-
|
|
387
|
-
describe('qdone enqueue-batch test/fixtures/test-unique01-x24.batch # (with no credentials)', function () {
|
|
388
|
-
before(function () {
|
|
389
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
390
|
-
const err = new Error('Access to the resource https://sqs.us-east-1.amazonaws.com/ is denied.')
|
|
391
|
-
err.code = 'AccessDenied'
|
|
392
|
-
callback(err)
|
|
393
|
-
})
|
|
394
|
-
})
|
|
395
|
-
it('should print usage and exit 1 with error',
|
|
396
|
-
cliTest(['enqueue-batch', 'test/fixtures/test-unique01-x24.batch'], null, function (err, stdout, stderr) {
|
|
397
|
-
expect(stdout).to.contain('You must provide')
|
|
398
|
-
expect(stderr).to.contain('Access to the resource https://sqs.us-east-1.amazonaws.com/ is denied.')
|
|
399
|
-
expect(err).to.be.an('error')
|
|
400
|
-
}))
|
|
401
|
-
})
|
|
402
|
-
|
|
403
|
-
describe('qdone enqueue-batch test/fixtures/test-unique01-x24.batch # (queue exists)', function () {
|
|
404
|
-
before(function () {
|
|
405
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
406
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
407
|
-
})
|
|
408
|
-
var messageId = 0
|
|
409
|
-
AWS.mock('SQS', 'sendMessageBatch', function (params, callback) {
|
|
410
|
-
callback(null, {
|
|
411
|
-
Failed: [],
|
|
412
|
-
Successful: params.Entries.map(message => ({
|
|
413
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
414
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
415
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId++
|
|
416
|
-
}))
|
|
417
|
-
})
|
|
418
|
-
})
|
|
419
|
-
})
|
|
420
|
-
it('should print id of enqueued messages, use 3 requests, print total count and exit 0',
|
|
421
|
-
cliTest(['enqueue-batch', 'test/fixtures/test-unique01-x24.batch'], function (result, stdout, stderr) {
|
|
422
|
-
for (var messageId = 0; messageId < 24; messageId++) {
|
|
423
|
-
expect(stderr).to.contain('Enqueued job da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId)
|
|
424
|
-
}
|
|
425
|
-
expect(stderr).to.contain('Enqueued 24 jobs')
|
|
426
|
-
expect(stderr).to.contain('request 1')
|
|
427
|
-
expect(stderr).to.contain('request 2')
|
|
428
|
-
expect(stderr).to.contain('request 3')
|
|
429
|
-
}))
|
|
430
|
-
})
|
|
431
|
-
|
|
432
|
-
describe('qdone enqueue-batch --fifo --group-id-per-message test/fixtures/test-unique01-x24.batch # (queue exists, group ids should be unique)', function () {
|
|
433
|
-
let groupIds
|
|
434
|
-
before(function () {
|
|
435
|
-
groupIds = {}
|
|
436
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
437
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
438
|
-
})
|
|
439
|
-
var messageId = 0
|
|
440
|
-
AWS.mock('SQS', 'sendMessageBatch', function (params, callback) {
|
|
441
|
-
params.Entries.forEach(message => {
|
|
442
|
-
groupIds[message.MessageGroupId] = true
|
|
443
|
-
})
|
|
444
|
-
callback(null, {
|
|
445
|
-
Failed: [],
|
|
446
|
-
Successful: params.Entries.map(message => ({
|
|
447
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
448
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
449
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId++
|
|
450
|
-
}))
|
|
451
|
-
})
|
|
452
|
-
})
|
|
453
|
-
})
|
|
454
|
-
it('should print id of enqueued messages, use 3 requests, use unique group ids for every message, print total count and exit 0',
|
|
455
|
-
cliTest(['enqueue-batch', '--fifo', '--group-id-per-message', 'test/fixtures/test-unique01-x24.batch'], function (result, stdout, stderr) {
|
|
456
|
-
for (var messageId = 0; messageId < 24; messageId++) {
|
|
457
|
-
expect(stderr).to.contain('Enqueued job da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId)
|
|
458
|
-
}
|
|
459
|
-
expect(Object.keys(groupIds).length).to.equal(24)
|
|
460
|
-
expect(stderr).to.contain('Enqueued 24 jobs')
|
|
461
|
-
expect(stderr).to.contain('request 1')
|
|
462
|
-
expect(stderr).to.contain('request 2')
|
|
463
|
-
expect(stderr).to.contain('request 3')
|
|
464
|
-
}))
|
|
465
|
-
})
|
|
466
|
-
|
|
467
|
-
describe('qdone enqueue-batch test/fixtures/test-unique01-x24.batch # (queue exists, some failures)', function () {
|
|
468
|
-
before(function () {
|
|
469
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
470
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
471
|
-
})
|
|
472
|
-
var messageId = 0
|
|
473
|
-
AWS.mock('SQS', 'sendMessageBatch', function (params, callback) {
|
|
474
|
-
callback(null, {
|
|
475
|
-
Failed: params.Entries.slice(0, 2).map(message => ({
|
|
476
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
477
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
478
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId++
|
|
479
|
-
})),
|
|
480
|
-
Successful: params.Entries.slice(2).map(message => ({
|
|
481
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
482
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
483
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId++
|
|
484
|
-
}))
|
|
485
|
-
})
|
|
486
|
-
})
|
|
487
|
-
})
|
|
488
|
-
it('should exit 1 and show which messages failed',
|
|
489
|
-
cliTest(['enqueue-batch', '--verbose', 'test/fixtures/test-unique01-x24.batch'], null, function (err, stdout, stderr) {
|
|
490
|
-
expect(stderr).to.contain('Error: One or more message failures')
|
|
491
|
-
expect(err).to.be.an('error')
|
|
492
|
-
// Expect some ids of failed messages
|
|
493
|
-
for (var messageId = 0; messageId < 2; messageId++) {
|
|
494
|
-
expect(stderr).to.contain('da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId)
|
|
495
|
-
}
|
|
496
|
-
}))
|
|
497
|
-
})
|
|
498
|
-
|
|
499
|
-
describe('qdone enqueue-batch --quiet test/fixtures/test-unique01-x24.batch # (queue exists)', function () {
|
|
500
|
-
before(function () {
|
|
501
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
502
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
503
|
-
})
|
|
504
|
-
var messageId = 0
|
|
505
|
-
AWS.mock('SQS', 'sendMessageBatch', function (params, callback) {
|
|
506
|
-
callback(null, {
|
|
507
|
-
Failed: [],
|
|
508
|
-
Successful: params.Entries.map(message => ({
|
|
509
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
510
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
511
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId++
|
|
512
|
-
}))
|
|
513
|
-
})
|
|
514
|
-
})
|
|
515
|
-
})
|
|
516
|
-
it('should have no output and exit 0',
|
|
517
|
-
cliTest(['enqueue-batch', '--quiet', 'test/fixtures/test-unique01-x24.batch'], function (result, stdout, stderr) {
|
|
518
|
-
expect(stderr).to.equal('')
|
|
519
|
-
expect(stdout).to.equal('')
|
|
520
|
-
}))
|
|
521
|
-
})
|
|
522
|
-
|
|
523
|
-
describe('qdone enqueue-batch --fifo test/fixtures/test-fifo01-x24.batch # (queue does not exist)', function () {
|
|
524
|
-
before(function () {
|
|
525
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
526
|
-
const err = new Error('Queue does not exist.')
|
|
527
|
-
err.code = 'AWS.SimpleQueueService.NonExistentQueue'
|
|
528
|
-
callback(err)
|
|
529
|
-
})
|
|
530
|
-
AWS.mock('SQS', 'createQueue', function (params, callback) {
|
|
531
|
-
expect(params.QueueName.slice(-'.fifo'.length) === '.fifo')
|
|
532
|
-
expect(params.FifoQueue === 'true')
|
|
533
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
534
|
-
})
|
|
535
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
536
|
-
callback(null, {
|
|
537
|
-
Attributes: {
|
|
538
|
-
ApproximateNumberOfMessages: '0',
|
|
539
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
540
|
-
ApproximateNumberOfMessagesNotVisible: '0',
|
|
541
|
-
CreatedTimestamp: '1442426968',
|
|
542
|
-
DelaySeconds: '0',
|
|
543
|
-
LastModifiedTimestamp: '1442426968',
|
|
544
|
-
MaximumMessageSize: '262144',
|
|
545
|
-
MessageRetentionPeriod: '345600',
|
|
546
|
-
QueueArn: 'arn:aws:sqs:us-east-1:80398EXAMPLE:MyNewQueue',
|
|
547
|
-
ReceiveMessageWaitTimeSeconds: '0',
|
|
548
|
-
RedrivePolicy: `{'deadLetterTargetArn':'arn:aws:sqs:us-east-1:80398EXAMPLE:${params.QueueName}','maxReceiveCount':1000}`,
|
|
549
|
-
VisibilityTimeout: '30'
|
|
550
|
-
}
|
|
551
|
-
})
|
|
552
|
-
})
|
|
553
|
-
var messageId = 0
|
|
554
|
-
AWS.mock('SQS', 'sendMessageBatch', function (params, callback) {
|
|
555
|
-
callback(null, {
|
|
556
|
-
Failed: [],
|
|
557
|
-
Successful: params.Entries.map(message => ({
|
|
558
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
559
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
560
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId++
|
|
561
|
-
}))
|
|
562
|
-
})
|
|
563
|
-
})
|
|
564
|
-
})
|
|
565
|
-
it('should print id of enqueued messages, use 3 requests, print total count and exit 0',
|
|
566
|
-
cliTest(['enqueue-batch', '--verbose', '--fifo', 'test/fixtures/test-fifo01-x24.batch'], function (result, stdout, stderr) {
|
|
567
|
-
for (var messageId = 0; messageId < 24; messageId++) {
|
|
568
|
-
expect(stderr).to.contain('Enqueued job da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId)
|
|
569
|
-
}
|
|
570
|
-
expect(stderr).to.contain('Enqueued 24 jobs')
|
|
571
|
-
expect(stderr).to.contain('request 1')
|
|
572
|
-
expect(stderr).to.contain('request 2')
|
|
573
|
-
expect(stderr).to.contain('request 3')
|
|
574
|
-
expect(stderr).to.not.contain('request 4')
|
|
575
|
-
}))
|
|
576
|
-
})
|
|
577
|
-
|
|
578
|
-
describe('qdone enqueue-batch test/fixtures/test-unique01-x24.batch # (queue does not exist)', function () {
|
|
579
|
-
before(function () {
|
|
580
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
581
|
-
const err = new Error('Queue does not exist.')
|
|
582
|
-
err.code = 'AWS.SimpleQueueService.NonExistentQueue'
|
|
583
|
-
callback(err)
|
|
584
|
-
})
|
|
585
|
-
AWS.mock('SQS', 'createQueue', function (params, callback) {
|
|
586
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
587
|
-
})
|
|
588
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
589
|
-
callback(null, {
|
|
590
|
-
Attributes: {
|
|
591
|
-
ApproximateNumberOfMessages: '0',
|
|
592
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
593
|
-
ApproximateNumberOfMessagesNotVisible: '0',
|
|
594
|
-
CreatedTimestamp: '1442426968',
|
|
595
|
-
DelaySeconds: '0',
|
|
596
|
-
LastModifiedTimestamp: '1442426968',
|
|
597
|
-
MaximumMessageSize: '262144',
|
|
598
|
-
MessageRetentionPeriod: '345600',
|
|
599
|
-
QueueArn: 'arn:aws:sqs:us-east-1:80398EXAMPLE:MyNewQueue',
|
|
600
|
-
ReceiveMessageWaitTimeSeconds: '0',
|
|
601
|
-
RedrivePolicy: `{'deadLetterTargetArn':'arn:aws:sqs:us-east-1:80398EXAMPLE:${params.QueueName}','maxReceiveCount':1000}`,
|
|
602
|
-
VisibilityTimeout: '30'
|
|
603
|
-
}
|
|
604
|
-
})
|
|
605
|
-
})
|
|
606
|
-
var messageId = 0
|
|
607
|
-
AWS.mock('SQS', 'sendMessageBatch', function (params, callback) {
|
|
608
|
-
callback(null, {
|
|
609
|
-
Failed: [],
|
|
610
|
-
Successful: params.Entries.map(message => ({
|
|
611
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
612
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
613
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId++
|
|
614
|
-
}))
|
|
615
|
-
})
|
|
616
|
-
})
|
|
617
|
-
})
|
|
618
|
-
it('should create queues, print ids of enqueued messages, use 3 requests, print total count and exit 0',
|
|
619
|
-
cliTest(['enqueue-batch', 'test/fixtures/test-unique01-x24.batch'], function (result, stdout, stderr) {
|
|
620
|
-
expect(stderr).to.contain('Creating fail queue test_failed')
|
|
621
|
-
expect(stderr).to.contain('Creating queue test')
|
|
622
|
-
for (var messageId = 0; messageId < 24; messageId++) {
|
|
623
|
-
expect(stderr).to.contain('Enqueued job da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId)
|
|
624
|
-
}
|
|
625
|
-
expect(stderr).to.contain('Enqueued 24 jobs')
|
|
626
|
-
expect(stderr).to.contain('request 1')
|
|
627
|
-
expect(stderr).to.contain('request 2')
|
|
628
|
-
expect(stderr).to.contain('request 3')
|
|
629
|
-
}))
|
|
630
|
-
})
|
|
631
|
-
|
|
632
|
-
describe('qdone enqueue-batch test/fixtures/test-unique{01-x24.batch,02-x24.batch,24-x24.batch,24-x240.batch} # (ensemble fixtures, queue exists)', function () {
|
|
633
|
-
before(function () {
|
|
634
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
635
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
636
|
-
})
|
|
637
|
-
var messageId = 0
|
|
638
|
-
AWS.mock('SQS', 'sendMessageBatch', function (params, callback) {
|
|
639
|
-
callback(null, {
|
|
640
|
-
Failed: [],
|
|
641
|
-
Successful: params.Entries.map(message => ({
|
|
642
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
643
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
644
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId++
|
|
645
|
-
}))
|
|
646
|
-
})
|
|
647
|
-
})
|
|
648
|
-
})
|
|
649
|
-
it('should print id of enqueued messages, use 53 requests, print total count and exit 0',
|
|
650
|
-
cliTest([
|
|
651
|
-
'enqueue-batch',
|
|
652
|
-
'test/fixtures/test-unique01-x24.batch',
|
|
653
|
-
'test/fixtures/test-unique02-x24.batch',
|
|
654
|
-
'test/fixtures/test-unique24-x24.batch',
|
|
655
|
-
'test/fixtures/test-unique24-x240.batch'
|
|
656
|
-
], function (result, stdout, stderr) {
|
|
657
|
-
for (var messageId = 0; messageId < 312; messageId++) {
|
|
658
|
-
expect(stderr).to.contain('Enqueued job da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId)
|
|
659
|
-
}
|
|
660
|
-
expect(stderr).to.contain('Enqueued 312 jobs')
|
|
661
|
-
expect(stderr).to.contain('request 1')
|
|
662
|
-
expect(stderr).to.contain('request 2')
|
|
663
|
-
expect(stderr).to.contain('request 53')
|
|
664
|
-
}))
|
|
665
|
-
})
|
|
666
|
-
|
|
667
|
-
describe('qdone enqueue-batch test/fixtures/test-too-big-1.batch # (messages too big for full batch)', function () {
|
|
668
|
-
before(function () {
|
|
669
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
670
|
-
const err = new Error('Queue does not exist.')
|
|
671
|
-
err.code = 'AWS.SimpleQueueService.NonExistentQueue'
|
|
672
|
-
callback(err)
|
|
673
|
-
})
|
|
674
|
-
AWS.mock('SQS', 'createQueue', function (params, callback) {
|
|
675
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
676
|
-
})
|
|
677
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
678
|
-
callback(null, {
|
|
679
|
-
Attributes: {
|
|
680
|
-
ApproximateNumberOfMessages: '0',
|
|
681
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
682
|
-
ApproximateNumberOfMessagesNotVisible: '0',
|
|
683
|
-
CreatedTimestamp: '1442426968',
|
|
684
|
-
DelaySeconds: '0',
|
|
685
|
-
LastModifiedTimestamp: '1442426968',
|
|
686
|
-
MaximumMessageSize: '262144',
|
|
687
|
-
MessageRetentionPeriod: '345600',
|
|
688
|
-
QueueArn: 'arn:aws:sqs:us-east-1:80398EXAMPLE:MyNewQueue',
|
|
689
|
-
ReceiveMessageWaitTimeSeconds: '0',
|
|
690
|
-
RedrivePolicy: `{'deadLetterTargetArn':'arn:aws:sqs:us-east-1:80398EXAMPLE:${params.QueueName}','maxReceiveCount':1000}`,
|
|
691
|
-
VisibilityTimeout: '30'
|
|
692
|
-
}
|
|
693
|
-
})
|
|
694
|
-
})
|
|
695
|
-
var messageId = 0
|
|
696
|
-
AWS.mock('SQS', 'sendMessageBatch', function (params, callback) {
|
|
697
|
-
callback(null, {
|
|
698
|
-
Failed: [],
|
|
699
|
-
Successful: params.Entries.map(message => ({
|
|
700
|
-
MD5OfMessageAttributes: '00484c68...59e48f06',
|
|
701
|
-
MD5OfMessageBody: '51b0a325...39163aa0',
|
|
702
|
-
MessageId: 'da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId++
|
|
703
|
-
}))
|
|
704
|
-
})
|
|
705
|
-
})
|
|
706
|
-
})
|
|
707
|
-
it('should print ids of enqueued messages, use 5 requests, print total count and exit 0',
|
|
708
|
-
cliTest(['enqueue-batch', 'test/fixtures/test-too-big-1.batch'], function (result, stdout, stderr) {
|
|
709
|
-
for (var messageId = 0; messageId < 10; messageId++) {
|
|
710
|
-
expect(stderr).to.contain('Enqueued job da68f62c-0c07-4bee-bf5f-56EXAMPLE-' + messageId)
|
|
711
|
-
}
|
|
712
|
-
expect(stderr).to.contain('Enqueued 10 jobs')
|
|
713
|
-
expect(stderr).to.contain('request 1')
|
|
714
|
-
expect(stderr).to.contain('request 2')
|
|
715
|
-
expect(stderr).to.contain('request 3')
|
|
716
|
-
expect(stderr).to.contain('request 4')
|
|
717
|
-
expect(stderr).to.contain('request 5')
|
|
718
|
-
}))
|
|
719
|
-
})
|
|
720
|
-
|
|
721
|
-
// Worker
|
|
722
|
-
describe('qdone worker', function () {
|
|
723
|
-
it('should print usage and exit 1 with error',
|
|
724
|
-
cliTest(['worker'], null, function (err, stdout, stderr) {
|
|
725
|
-
expect(stdout).to.contain('usage: ')
|
|
726
|
-
expect(stderr).to.contain('<queue>')
|
|
727
|
-
expect(err).to.be.an('error')
|
|
728
|
-
}))
|
|
729
|
-
})
|
|
730
|
-
|
|
731
|
-
describe('qdone worker --help', function () {
|
|
732
|
-
it('should print usage and exit 0',
|
|
733
|
-
cliTest(['worker', '--help'], function (result, stdout, stderr) {
|
|
734
|
-
expect(stdout).to.contain('usage: ')
|
|
735
|
-
expect(stdout).to.contain('worker')
|
|
736
|
-
}))
|
|
737
|
-
})
|
|
738
|
-
|
|
739
|
-
describe('qdone worker some_non_existent_queue --drain', function () {
|
|
740
|
-
before(function () {
|
|
741
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
742
|
-
const err = new Error('Queue does not exist.')
|
|
743
|
-
err.code = 'AWS.SimpleQueueService.NonExistentQueue'
|
|
744
|
-
callback(err)
|
|
745
|
-
})
|
|
746
|
-
})
|
|
747
|
-
it('should complain and exit 0',
|
|
748
|
-
cliTest(['worker', 'some_non_existent_queue', '--drain'], null, function (result, stdout, stderr) {
|
|
749
|
-
expect(stderr).to.contain('AWS.SimpleQueueService.NonExistentQueue')
|
|
750
|
-
}))
|
|
751
|
-
})
|
|
752
|
-
|
|
753
|
-
describe('qdone worker test --drain # (no jobs)', function () {
|
|
754
|
-
before(function () {
|
|
755
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
756
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
757
|
-
})
|
|
758
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
759
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
760
|
-
})
|
|
761
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
762
|
-
callback(null, {})
|
|
763
|
-
})
|
|
764
|
-
AWS.mock('SQS', 'deleteMessage', function (params, callback) {
|
|
765
|
-
callback(null, {})
|
|
766
|
-
})
|
|
767
|
-
})
|
|
768
|
-
it('should execute the job successfully and exit 0',
|
|
769
|
-
cliTest(['worker', 'test', '--drain'], function (result, stdout, stderr) {
|
|
770
|
-
expect(stderr).to.contain('Looking for work on test')
|
|
771
|
-
expect(stderr).to.contain('Ran 0 jobs: 0 succeeded 0 failed')
|
|
772
|
-
}))
|
|
773
|
-
})
|
|
774
|
-
|
|
775
|
-
describe('qdone worker test --drain # (1 successful job)', function () {
|
|
776
|
-
before(function () {
|
|
777
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
778
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
779
|
-
})
|
|
780
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
781
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
782
|
-
})
|
|
783
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
784
|
-
callback(null, { Messages: [
|
|
785
|
-
{ MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE', Body: 'true', ReceiptHandle: 'AQEBzbVv...fqNzFw==' }
|
|
786
|
-
] })
|
|
787
|
-
AWS.restore('SQS', 'receiveMessage')
|
|
788
|
-
// Subsequent calls return no message
|
|
789
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
790
|
-
callback(null, {})
|
|
791
|
-
})
|
|
792
|
-
})
|
|
793
|
-
AWS.mock('SQS', 'deleteMessage', function (params, callback) {
|
|
794
|
-
callback(null, {})
|
|
795
|
-
})
|
|
796
|
-
})
|
|
797
|
-
it('should execute the job successfully and exit 0',
|
|
798
|
-
cliTest(['worker', 'test', '--drain'], function (result, stdout, stderr) {
|
|
799
|
-
expect(stderr).to.contain('Looking for work on test')
|
|
800
|
-
expect(stderr).to.contain('Found job da68f62c-0c07-4bee-bf5f-7e856EXAMPLE')
|
|
801
|
-
expect(stderr).to.contain('SUCCESS')
|
|
802
|
-
expect(stderr).to.contain('Ran 1 jobs: 1 succeeded 0 failed')
|
|
803
|
-
}))
|
|
804
|
-
})
|
|
805
|
-
|
|
806
|
-
describe('qdone worker test --drain --quiet # (1 failed job)', function () {
|
|
807
|
-
before(function () {
|
|
808
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
809
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
810
|
-
})
|
|
811
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
812
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
813
|
-
})
|
|
814
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
815
|
-
callback(null, { Messages: [
|
|
816
|
-
{ MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE', Body: 'false', ReceiptHandle: 'AQEBzbVv...fqNzFw==' }
|
|
817
|
-
] })
|
|
818
|
-
AWS.restore('SQS', 'receiveMessage')
|
|
819
|
-
// Subsequent calls return no message
|
|
820
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
821
|
-
callback(null, {})
|
|
822
|
-
})
|
|
823
|
-
})
|
|
824
|
-
AWS.mock('SQS', 'deleteMessage', function (params, callback) {
|
|
825
|
-
callback(null, {})
|
|
826
|
-
})
|
|
827
|
-
})
|
|
828
|
-
it('should execute the job successfully and exit 0',
|
|
829
|
-
cliTest(['worker', 'test', '--drain', '--quiet'], function (result, stdout, stderr) {
|
|
830
|
-
expect(stdout).to.contain('"event":"JOB_FAILED"')
|
|
831
|
-
expect(stdout).to.contain('"command":"false"')
|
|
832
|
-
expect(stdout).to.contain('"timestamp"')
|
|
833
|
-
expect(stdout).to.contain('"job"')
|
|
834
|
-
expect(stdout).to.contain('"exitCode"')
|
|
835
|
-
}))
|
|
836
|
-
})
|
|
837
|
-
|
|
838
|
-
describe('qdone worker test --drain --kill-after 1 --wait-time 1 --quiet # (job runs past kill timer)', function () {
|
|
839
|
-
before(function () {
|
|
840
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
841
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
842
|
-
})
|
|
843
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
844
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
845
|
-
})
|
|
846
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
847
|
-
callback(null, { Messages: [
|
|
848
|
-
{ MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE', Body: 'bash test/fixtures/test-child-kill-linux.sh', ReceiptHandle: 'AQEBzbVv...fqNzFw==' }
|
|
849
|
-
] })
|
|
850
|
-
AWS.restore('SQS', 'receiveMessage')
|
|
851
|
-
// Subsequent calls return no message
|
|
852
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
853
|
-
callback(null, {})
|
|
854
|
-
})
|
|
855
|
-
process.nextTick(function () {
|
|
856
|
-
clock.tick(1500)
|
|
857
|
-
})
|
|
858
|
-
})
|
|
859
|
-
AWS.mock('SQS', 'deleteMessage', function (params, callback) {
|
|
860
|
-
callback(null, {})
|
|
861
|
-
})
|
|
862
|
-
})
|
|
863
|
-
it('should execute the job successfully and exit 0',
|
|
864
|
-
cliTest(['worker', 'test', '--drain', '--kill-after', '1', '--wait-time', '1'], function (result, stdout, stderr) {
|
|
865
|
-
expect(stderr).to.contain('FAILED')
|
|
866
|
-
// Check that file does not continue to be written to
|
|
867
|
-
expect(fs.readFileSync('/tmp/qdone-test-child-kill-linux.out').toString()).to.equal('terminated\n')
|
|
868
|
-
}))
|
|
869
|
-
})
|
|
870
|
-
|
|
871
|
-
describe('qdone worker "test*" --drain # (9 queues, 1 successful job per queue)', function () {
|
|
872
|
-
before(function () {
|
|
873
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
874
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
875
|
-
})
|
|
876
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
877
|
-
callback(null, { QueueUrls: [
|
|
878
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}1`,
|
|
879
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}2`,
|
|
880
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}3`,
|
|
881
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}4`,
|
|
882
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}5`,
|
|
883
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}6`,
|
|
884
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}7`,
|
|
885
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}8`,
|
|
886
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}9`
|
|
887
|
-
] })
|
|
888
|
-
})
|
|
889
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
890
|
-
callback(null, { Messages: [
|
|
891
|
-
{ MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE-' + params.QueueUrl.slice(-1), Body: 'true', ReceiptHandle: 'AQEBzbVv...fqNzFw==' }
|
|
892
|
-
] })
|
|
893
|
-
if (params.QueueUrl === params.QueueUrl.slice(0, -1) + '9') {
|
|
894
|
-
AWS.restore('SQS', 'receiveMessage')
|
|
895
|
-
// Subsequent calls return no message
|
|
896
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
897
|
-
callback(null, {})
|
|
898
|
-
})
|
|
899
|
-
}
|
|
900
|
-
})
|
|
901
|
-
AWS.mock('SQS', 'deleteMessage', function (params, callback) {
|
|
902
|
-
callback(null, {})
|
|
903
|
-
})
|
|
904
|
-
})
|
|
905
|
-
it('should execute the job successfully and exit 0',
|
|
906
|
-
cliTest(['worker', 'test*', '--drain'], function (result, stdout, stderr) {
|
|
907
|
-
[1, 2, 3, 4, 5, 5, 6, 7, 8, 9].forEach(index => {
|
|
908
|
-
expect(stderr).to.contain('Looking for work on test' + index)
|
|
909
|
-
expect(stderr).to.contain('Found job da68f62c-0c07-4bee-bf5f-7e856EXAMPLE-' + index)
|
|
910
|
-
})
|
|
911
|
-
expect(stderr).to.contain('Ran 9 jobs: 9 succeeded 0 failed')
|
|
912
|
-
}))
|
|
913
|
-
})
|
|
914
|
-
|
|
915
|
-
describe('qdone worker test --drain # (1 successful job, time extended)', function () {
|
|
916
|
-
before(function () {
|
|
917
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
918
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
919
|
-
})
|
|
920
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
921
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
922
|
-
})
|
|
923
|
-
AWS.mock('SQS', 'changeMessageVisibility', function (params, callback) {
|
|
924
|
-
callback(null, {})
|
|
925
|
-
})
|
|
926
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
927
|
-
callback(null, { Messages: [
|
|
928
|
-
{ MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE', Body: 'sleep 1', ReceiptHandle: 'AQEBzbVv...fqNzFw==' }
|
|
929
|
-
] })
|
|
930
|
-
AWS.restore('SQS', 'receiveMessage')
|
|
931
|
-
// Subsequent calls return no message
|
|
932
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
933
|
-
callback(null, {})
|
|
934
|
-
})
|
|
935
|
-
process.nextTick(function () {
|
|
936
|
-
clock.tick(15000)
|
|
937
|
-
})
|
|
938
|
-
})
|
|
939
|
-
AWS.mock('SQS', 'deleteMessage', function (params, callback) {
|
|
940
|
-
callback(null, {})
|
|
941
|
-
})
|
|
942
|
-
})
|
|
943
|
-
it('should execute the job successfully and exit 0',
|
|
944
|
-
cliTest(['worker', 'test', '--drain'], function (result, stdout, stderr) {
|
|
945
|
-
expect(stderr).to.contain('Looking for work on test')
|
|
946
|
-
expect(stderr).to.contain('Found job da68f62c-0c07-4bee-bf5f-7e856EXAMPLE')
|
|
947
|
-
expect(stderr).to.contain('seconds, requesting another')
|
|
948
|
-
expect(stderr).to.contain('SUCCESS')
|
|
949
|
-
expect(stderr).to.contain('Ran 1 jobs: 1 succeeded 0 failed')
|
|
950
|
-
}))
|
|
951
|
-
})
|
|
952
|
-
|
|
953
|
-
describe('qdone worker test --drain --quiet # (1 successful job, time extended)', function () {
|
|
954
|
-
before(function () {
|
|
955
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
956
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
957
|
-
})
|
|
958
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
959
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
960
|
-
})
|
|
961
|
-
AWS.mock('SQS', 'changeMessageVisibility', function (params, callback) {
|
|
962
|
-
callback(null, {})
|
|
963
|
-
})
|
|
964
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
965
|
-
callback(null, { Messages: [
|
|
966
|
-
{ MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE', Body: 'sleep 1', ReceiptHandle: 'AQEBzbVv...fqNzFw==' }
|
|
967
|
-
] })
|
|
968
|
-
AWS.restore('SQS', 'receiveMessage')
|
|
969
|
-
// Subsequent calls return no message
|
|
970
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
971
|
-
callback(null, {})
|
|
972
|
-
})
|
|
973
|
-
process.nextTick(function () {
|
|
974
|
-
clock.tick(15000)
|
|
975
|
-
})
|
|
976
|
-
})
|
|
977
|
-
AWS.mock('SQS', 'deleteMessage', function (params, callback) {
|
|
978
|
-
callback(null, {})
|
|
979
|
-
})
|
|
980
|
-
})
|
|
981
|
-
it('should have no output and exit 0',
|
|
982
|
-
cliTest(['worker', 'test', '--drain', '--quiet'], function (result, stdout, stderr) {
|
|
983
|
-
expect(stderr).to.equal('')
|
|
984
|
-
expect(stdout).to.equal('')
|
|
985
|
-
}))
|
|
986
|
-
})
|
|
987
|
-
|
|
988
|
-
describe('qdone worker "test*" --drain --active-only # (4 queues, 2 full, 2 empty)', function () {
|
|
989
|
-
before(function () {
|
|
990
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
991
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
992
|
-
})
|
|
993
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
994
|
-
callback(null, { QueueUrls: [
|
|
995
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}1`,
|
|
996
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}2`,
|
|
997
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}3`,
|
|
998
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}4`
|
|
999
|
-
] })
|
|
1000
|
-
})
|
|
1001
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1002
|
-
const lastLetter = params.QueueUrl.slice(-1)
|
|
1003
|
-
callback(null, {
|
|
1004
|
-
Attributes: {
|
|
1005
|
-
ApproximateNumberOfMessages: (lastLetter === '1' || lastLetter === '2') ? '1' : '0',
|
|
1006
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1007
|
-
ApproximateNumberOfMessagesNotVisible: '0',
|
|
1008
|
-
CreatedTimestamp: '1442426968',
|
|
1009
|
-
DelaySeconds: '0',
|
|
1010
|
-
LastModifiedTimestamp: '1442426968',
|
|
1011
|
-
MaximumMessageSize: '262144',
|
|
1012
|
-
MessageRetentionPeriod: '345600',
|
|
1013
|
-
QueueArn: 'arn:aws:sqs:us-east-1:80398EXAMPLE:MyNewQueue',
|
|
1014
|
-
ReceiveMessageWaitTimeSeconds: '0',
|
|
1015
|
-
RedrivePolicy: `{'deadLetterTargetArn':'arn:aws:sqs:us-east-1:80398EXAMPLE:${params.QueueName}','maxReceiveCount':1000}`,
|
|
1016
|
-
VisibilityTimeout: '30'
|
|
1017
|
-
}
|
|
1018
|
-
})
|
|
1019
|
-
})
|
|
1020
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
1021
|
-
callback(null, { Messages: [
|
|
1022
|
-
{ MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE-' + params.QueueUrl.slice(-1), Body: 'true', ReceiptHandle: 'AQEBzbVv...fqNzFw==' }
|
|
1023
|
-
] })
|
|
1024
|
-
if (params.QueueUrl === params.QueueUrl.slice(0, -1) + '2') {
|
|
1025
|
-
AWS.restore('SQS', 'receiveMessage')
|
|
1026
|
-
// Subsequent calls return no message
|
|
1027
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
1028
|
-
callback(null, {})
|
|
1029
|
-
})
|
|
1030
|
-
}
|
|
1031
|
-
})
|
|
1032
|
-
AWS.mock('SQS', 'deleteMessage', function (params, callback) {
|
|
1033
|
-
callback(null, {})
|
|
1034
|
-
})
|
|
1035
|
-
})
|
|
1036
|
-
it('should execute the job successfully and exit 0',
|
|
1037
|
-
cliTest(['worker', 'test*', '--drain', '--active-only'], function (result, stdout, stderr) {
|
|
1038
|
-
expect(stderr).to.contain('Found job da68f62c-0c07-4bee-bf5f-7e856EXAMPLE-1')
|
|
1039
|
-
expect(stderr).to.contain('Found job da68f62c-0c07-4bee-bf5f-7e856EXAMPLE-2')
|
|
1040
|
-
expect(stderr).to.not.contain('Found job da68f62c-0c07-4bee-bf5f-7e856EXAMPLE-3')
|
|
1041
|
-
expect(stderr).to.not.contain('Found job da68f62c-0c07-4bee-bf5f-7e856EXAMPLE-4')
|
|
1042
|
-
expect(stderr).to.contain('Ran 2 jobs: 2 succeeded 0 failed')
|
|
1043
|
-
}))
|
|
1044
|
-
})
|
|
1045
|
-
|
|
1046
|
-
describe('qdone worker test # (1 successful job + SIGTERM)', function () {
|
|
1047
|
-
before(function () {
|
|
1048
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1049
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1050
|
-
})
|
|
1051
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1052
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
1053
|
-
})
|
|
1054
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
1055
|
-
callback(null, { Messages: [
|
|
1056
|
-
{ MessageId: 'da68f62c-0c07-4bee-bf5f-7e856EXAMPLE', Body: 'sleep 1', ReceiptHandle: 'AQEBzbVv...fqNzFw==' }
|
|
1057
|
-
] })
|
|
1058
|
-
AWS.restore('SQS', 'receiveMessage')
|
|
1059
|
-
// Subsequent calls return no message
|
|
1060
|
-
AWS.mock('SQS', 'receiveMessage', function (params, callback) {
|
|
1061
|
-
callback(null, {})
|
|
1062
|
-
})
|
|
1063
|
-
// And here we trigger a SIGTERM
|
|
1064
|
-
process.kill(process.pid, 'SIGTERM')
|
|
1065
|
-
})
|
|
1066
|
-
AWS.mock('SQS', 'deleteMessage', function (params, callback) {
|
|
1067
|
-
callback(null, {})
|
|
1068
|
-
})
|
|
1069
|
-
})
|
|
1070
|
-
it('should begin executing the job, acknowledge a SIGTERM and successfully and exit 0 after the job completes',
|
|
1071
|
-
cliTest(['worker', 'test'], function (result, stdout, stderr) {
|
|
1072
|
-
expect(stderr).to.contain('Looking for work on test')
|
|
1073
|
-
expect(stderr).to.contain('Found job da68f62c-0c07-4bee-bf5f-7e856EXAMPLE')
|
|
1074
|
-
expect(stderr).to.contain('Shutdown requested')
|
|
1075
|
-
expect(stderr).to.contain('SUCCESS')
|
|
1076
|
-
}))
|
|
1077
|
-
})
|
|
1078
|
-
|
|
1079
|
-
// Idle queues
|
|
1080
|
-
|
|
1081
|
-
describe('qdone idle-queues', function () {
|
|
1082
|
-
it('should print usage and exit 1 with error',
|
|
1083
|
-
cliTest(['idle-queues'], null, function (err, stdout, stderr) {
|
|
1084
|
-
expect(stdout).to.contain('usage: ')
|
|
1085
|
-
expect(stderr).to.contain('<queue>')
|
|
1086
|
-
expect(err).to.be.an('error')
|
|
1087
|
-
}))
|
|
1088
|
-
})
|
|
1089
|
-
|
|
1090
|
-
describe('qdone idle-queues --help', function () {
|
|
1091
|
-
it('should print usage and exit 0',
|
|
1092
|
-
cliTest(['idle-queues', '--help'], function (result, stdout, stderr) {
|
|
1093
|
-
expect(stdout).to.contain('usage: ')
|
|
1094
|
-
expect(stdout).to.contain('idle-queues')
|
|
1095
|
-
}))
|
|
1096
|
-
})
|
|
1097
|
-
|
|
1098
|
-
describe('qdone idle-queues test --include-failed', function () {
|
|
1099
|
-
it('should print usage and note about --include-failed and exit 1 with error',
|
|
1100
|
-
cliTest(['idle-queues', 'test', '--include-failed'], null, function (err, stdout, stderr) {
|
|
1101
|
-
expect(stdout).to.contain('usage: ')
|
|
1102
|
-
expect(stderr).to.contain('--include-failed should be used with --unpair')
|
|
1103
|
-
expect(err).to.be.an('error')
|
|
1104
|
-
}))
|
|
1105
|
-
})
|
|
1106
|
-
|
|
1107
|
-
describe('qdone idle-queues test # (active queue shortcut via SQS API)', function () {
|
|
1108
|
-
before(function () {
|
|
1109
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1110
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1111
|
-
})
|
|
1112
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1113
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
1114
|
-
})
|
|
1115
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1116
|
-
callback(null, {
|
|
1117
|
-
Attributes: {
|
|
1118
|
-
ApproximateNumberOfMessages: '1',
|
|
1119
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1120
|
-
ApproximateNumberOfMessagesNotVisible: '0'
|
|
1121
|
-
}
|
|
1122
|
-
})
|
|
1123
|
-
})
|
|
1124
|
-
})
|
|
1125
|
-
it('should make no CloudWatch calls, print nothing to stdout and exit 0',
|
|
1126
|
-
cliTest(['idle-queues', 'test'], function (result, stdout, stderr) {
|
|
1127
|
-
expect(stderr).to.contain('Queue test has been active in the last 60 minutes.')
|
|
1128
|
-
expect(stdout).to.equal('')
|
|
1129
|
-
}))
|
|
1130
|
-
})
|
|
1131
|
-
|
|
1132
|
-
describe('qdone idle-queues test --unpair # (active queue shortcut via SQS API)', function () {
|
|
1133
|
-
before(function () {
|
|
1134
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1135
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1136
|
-
})
|
|
1137
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1138
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
1139
|
-
})
|
|
1140
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1141
|
-
callback(null, {
|
|
1142
|
-
Attributes: {
|
|
1143
|
-
ApproximateNumberOfMessages: '1',
|
|
1144
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1145
|
-
ApproximateNumberOfMessagesNotVisible: '0'
|
|
1146
|
-
}
|
|
1147
|
-
})
|
|
1148
|
-
})
|
|
1149
|
-
})
|
|
1150
|
-
it('should make no CloudWatch calls, print nothing to stdout and exit 0',
|
|
1151
|
-
cliTest(['idle-queues', 'test', '--unpair'], function (result, stdout, stderr) {
|
|
1152
|
-
expect(stderr).to.contain('Queue test has been active in the last 60 minutes.')
|
|
1153
|
-
expect(stdout).to.equal('')
|
|
1154
|
-
}))
|
|
1155
|
-
})
|
|
1156
|
-
|
|
1157
|
-
describe('qdone idle-queues test --cache-uri redis://localhost # (cached getQueueAttributes call)', function () {
|
|
1158
|
-
before(function () {
|
|
1159
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1160
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1161
|
-
})
|
|
1162
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1163
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
1164
|
-
})
|
|
1165
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1166
|
-
callback(null, {
|
|
1167
|
-
Attributes: {
|
|
1168
|
-
ApproximateNumberOfMessages: '1',
|
|
1169
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1170
|
-
ApproximateNumberOfMessagesNotVisible: '0'
|
|
1171
|
-
}
|
|
1172
|
-
})
|
|
1173
|
-
})
|
|
1174
|
-
})
|
|
1175
|
-
it('should make one call to getQueueAttributes, print nothing to stdout and exit 0',
|
|
1176
|
-
cliTest(['idle-queues', 'test', '--cache-uri', 'redis://localhost'], function (result, stdout, stderr) {
|
|
1177
|
-
expect(stderr).to.contain('Queue test has been active in the last 60 minutes.')
|
|
1178
|
-
expect(stdout).to.equal('')
|
|
1179
|
-
}))
|
|
1180
|
-
})
|
|
1181
|
-
|
|
1182
|
-
describe('qdone idle-queues test # (active queue, multiple CloudWatch calls)', function () {
|
|
1183
|
-
before(function () {
|
|
1184
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1185
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1186
|
-
})
|
|
1187
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1188
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
1189
|
-
})
|
|
1190
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1191
|
-
callback(null, {
|
|
1192
|
-
Attributes: {
|
|
1193
|
-
ApproximateNumberOfMessages: '0',
|
|
1194
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1195
|
-
ApproximateNumberOfMessagesNotVisible: '0'
|
|
1196
|
-
}
|
|
1197
|
-
})
|
|
1198
|
-
})
|
|
1199
|
-
AWS.mock('CloudWatch', 'getMetricStatistics', function (params, callback) {
|
|
1200
|
-
if (params.MetricName === 'ApproximateNumberOfMessagesDelayed') {
|
|
1201
|
-
callback(null, {
|
|
1202
|
-
Label: params.MetricName,
|
|
1203
|
-
Datapoints: [
|
|
1204
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' },
|
|
1205
|
-
{ Timestamp: new Date(), Sum: 1, Metric: 'Count' }
|
|
1206
|
-
]
|
|
1207
|
-
})
|
|
1208
|
-
} else {
|
|
1209
|
-
callback(null, {
|
|
1210
|
-
Label: params.MetricName,
|
|
1211
|
-
Datapoints: [
|
|
1212
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' },
|
|
1213
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' }
|
|
1214
|
-
]
|
|
1215
|
-
})
|
|
1216
|
-
}
|
|
1217
|
-
})
|
|
1218
|
-
})
|
|
1219
|
-
it('should make CloudWatch calls, print nothing to stdout and exit 0',
|
|
1220
|
-
cliTest(['idle-queues', 'test'], function (result, stdout, stderr) {
|
|
1221
|
-
expect(stderr).to.contain('Queue test has been active in the last 60 minutes.')
|
|
1222
|
-
expect(stdout).to.equal('')
|
|
1223
|
-
}))
|
|
1224
|
-
})
|
|
1225
|
-
|
|
1226
|
-
describe('qdone idle-queues test # (inactive queue)', function () {
|
|
1227
|
-
before(function () {
|
|
1228
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1229
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1230
|
-
})
|
|
1231
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1232
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
1233
|
-
})
|
|
1234
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1235
|
-
callback(null, {
|
|
1236
|
-
Attributes: {
|
|
1237
|
-
ApproximateNumberOfMessages: '0',
|
|
1238
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1239
|
-
ApproximateNumberOfMessagesNotVisible: '0'
|
|
1240
|
-
}
|
|
1241
|
-
})
|
|
1242
|
-
})
|
|
1243
|
-
AWS.mock('CloudWatch', 'getMetricStatistics', function (params, callback) {
|
|
1244
|
-
// Always return 0s
|
|
1245
|
-
callback(null, {
|
|
1246
|
-
Label: params.MetricName,
|
|
1247
|
-
Datapoints: [
|
|
1248
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' },
|
|
1249
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' }
|
|
1250
|
-
]
|
|
1251
|
-
})
|
|
1252
|
-
})
|
|
1253
|
-
})
|
|
1254
|
-
it('should print queue name to stdout and exit 0',
|
|
1255
|
-
cliTest(['idle-queues', 'test'], function (result, stdout, stderr) {
|
|
1256
|
-
expect(stderr).to.contain('Queue test has been idle for the last 60 minutes.')
|
|
1257
|
-
expect(stdout).to.contain('test\n')
|
|
1258
|
-
}))
|
|
1259
|
-
})
|
|
1260
|
-
|
|
1261
|
-
describe('qdone idle-queues test --delete # (inactive queue)', function () {
|
|
1262
|
-
before(function () {
|
|
1263
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1264
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1265
|
-
})
|
|
1266
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1267
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
1268
|
-
})
|
|
1269
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1270
|
-
callback(null, {
|
|
1271
|
-
Attributes: {
|
|
1272
|
-
ApproximateNumberOfMessages: '0',
|
|
1273
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1274
|
-
ApproximateNumberOfMessagesNotVisible: '0'
|
|
1275
|
-
}
|
|
1276
|
-
})
|
|
1277
|
-
})
|
|
1278
|
-
AWS.mock('CloudWatch', 'getMetricStatistics', function (params, callback) {
|
|
1279
|
-
// Always return 0s
|
|
1280
|
-
callback(null, {
|
|
1281
|
-
Label: params.MetricName,
|
|
1282
|
-
Datapoints: [
|
|
1283
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' },
|
|
1284
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' }
|
|
1285
|
-
]
|
|
1286
|
-
})
|
|
1287
|
-
})
|
|
1288
|
-
AWS.mock('SQS', 'deleteQueue', function (params, callback) {
|
|
1289
|
-
callback(null, {})
|
|
1290
|
-
})
|
|
1291
|
-
})
|
|
1292
|
-
it('should print queue name to stdout and exit 0',
|
|
1293
|
-
cliTest(['idle-queues', 'test', '--delete'], function (result, stdout, stderr) {
|
|
1294
|
-
expect(stderr).to.contain('Queue test has been idle for the last 60 minutes.')
|
|
1295
|
-
expect(stderr).to.contain('Deleted test')
|
|
1296
|
-
expect(stdout).to.contain('test\n')
|
|
1297
|
-
}))
|
|
1298
|
-
})
|
|
1299
|
-
|
|
1300
|
-
describe('qdone idle-queues test --unpair # (inactive queue)', function () {
|
|
1301
|
-
before(function () {
|
|
1302
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1303
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1304
|
-
})
|
|
1305
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1306
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
1307
|
-
})
|
|
1308
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1309
|
-
callback(null, {
|
|
1310
|
-
Attributes: {
|
|
1311
|
-
ApproximateNumberOfMessages: '0',
|
|
1312
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1313
|
-
ApproximateNumberOfMessagesNotVisible: '0'
|
|
1314
|
-
}
|
|
1315
|
-
})
|
|
1316
|
-
})
|
|
1317
|
-
AWS.mock('CloudWatch', 'getMetricStatistics', function (params, callback) {
|
|
1318
|
-
// Always return 0s
|
|
1319
|
-
callback(null, {
|
|
1320
|
-
Label: params.MetricName,
|
|
1321
|
-
Datapoints: [
|
|
1322
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' },
|
|
1323
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' }
|
|
1324
|
-
]
|
|
1325
|
-
})
|
|
1326
|
-
})
|
|
1327
|
-
})
|
|
1328
|
-
it('should print queue name to stdout and exit 0',
|
|
1329
|
-
cliTest(['idle-queues', 'test', '--unpair'], function (result, stdout, stderr) {
|
|
1330
|
-
expect(stderr).to.contain('Queue test has been idle for the last 60 minutes.')
|
|
1331
|
-
expect(stdout).to.contain('test\n')
|
|
1332
|
-
}))
|
|
1333
|
-
})
|
|
1334
|
-
|
|
1335
|
-
describe('qdone idle-queues test --unpair --delete # (inactive queue)', function () {
|
|
1336
|
-
before(function () {
|
|
1337
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1338
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1339
|
-
})
|
|
1340
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1341
|
-
callback(null, { QueueUrls: [`https://q.amazonaws.com/123456789101/${params.QueueName}`] })
|
|
1342
|
-
})
|
|
1343
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1344
|
-
callback(null, {
|
|
1345
|
-
Attributes: {
|
|
1346
|
-
ApproximateNumberOfMessages: '0',
|
|
1347
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1348
|
-
ApproximateNumberOfMessagesNotVisible: '0'
|
|
1349
|
-
}
|
|
1350
|
-
})
|
|
1351
|
-
})
|
|
1352
|
-
AWS.mock('CloudWatch', 'getMetricStatistics', function (params, callback) {
|
|
1353
|
-
// Always return 0s
|
|
1354
|
-
callback(null, {
|
|
1355
|
-
Label: params.MetricName,
|
|
1356
|
-
Datapoints: [
|
|
1357
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' },
|
|
1358
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' }
|
|
1359
|
-
]
|
|
1360
|
-
})
|
|
1361
|
-
})
|
|
1362
|
-
AWS.mock('SQS', 'deleteQueue', function (params, callback) {
|
|
1363
|
-
callback(null, {})
|
|
1364
|
-
})
|
|
1365
|
-
})
|
|
1366
|
-
it('should print queue name to stdout and exit 0',
|
|
1367
|
-
cliTest(['idle-queues', 'test', '--unpair', '--delete'], function (result, stdout, stderr) {
|
|
1368
|
-
expect(stderr).to.contain('Queue test has been idle for the last 60 minutes.')
|
|
1369
|
-
expect(stderr).to.contain('Deleted test')
|
|
1370
|
-
expect(stdout).to.contain('test\n')
|
|
1371
|
-
}))
|
|
1372
|
-
})
|
|
1373
|
-
|
|
1374
|
-
describe('qdone idle-queues test # (primary queue is idle, failed queue is active)', function () {
|
|
1375
|
-
before(function () {
|
|
1376
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1377
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1378
|
-
})
|
|
1379
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1380
|
-
callback(null, { QueueUrls: [
|
|
1381
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}`,
|
|
1382
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}_failed`
|
|
1383
|
-
] })
|
|
1384
|
-
})
|
|
1385
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1386
|
-
callback(null, {
|
|
1387
|
-
Attributes: {
|
|
1388
|
-
ApproximateNumberOfMessages: '0',
|
|
1389
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1390
|
-
ApproximateNumberOfMessagesNotVisible: '0'
|
|
1391
|
-
}
|
|
1392
|
-
})
|
|
1393
|
-
})
|
|
1394
|
-
AWS.mock('CloudWatch', 'getMetricStatistics', function (params, callback) {
|
|
1395
|
-
// Always return data for failed queue
|
|
1396
|
-
if (params.Dimensions[0].Value === 'qdone_test_failed') {
|
|
1397
|
-
callback(null, {
|
|
1398
|
-
Label: params.MetricName,
|
|
1399
|
-
Datapoints: [
|
|
1400
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' },
|
|
1401
|
-
{ Timestamp: new Date(), Sum: 1, Metric: 'Count' }
|
|
1402
|
-
]
|
|
1403
|
-
})
|
|
1404
|
-
} else {
|
|
1405
|
-
callback(null, {
|
|
1406
|
-
Label: params.MetricName,
|
|
1407
|
-
Datapoints: [
|
|
1408
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' },
|
|
1409
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' }
|
|
1410
|
-
]
|
|
1411
|
-
})
|
|
1412
|
-
}
|
|
1413
|
-
})
|
|
1414
|
-
})
|
|
1415
|
-
it('should print queue name to stdout and exit 0',
|
|
1416
|
-
cliTest(['idle-queues', 'test'], function (result, stdout, stderr) {
|
|
1417
|
-
expect(stderr).to.contain('Queue test has been idle for the last 60 minutes.')
|
|
1418
|
-
expect(stderr).to.contain('Queue test_failed has been active in the last 60 minutes.')
|
|
1419
|
-
}))
|
|
1420
|
-
})
|
|
1421
|
-
|
|
1422
|
-
describe('qdone idle-queues test.fifo # (primary queue is idle and a FIFO, failed queue is active)', function () {
|
|
1423
|
-
before(function () {
|
|
1424
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1425
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1426
|
-
})
|
|
1427
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1428
|
-
callback(null, { QueueUrls: [
|
|
1429
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}`,
|
|
1430
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}_failed.fifo`
|
|
1431
|
-
] })
|
|
1432
|
-
})
|
|
1433
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1434
|
-
callback(null, {
|
|
1435
|
-
Attributes: {
|
|
1436
|
-
ApproximateNumberOfMessages: '0',
|
|
1437
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1438
|
-
ApproximateNumberOfMessagesNotVisible: '0'
|
|
1439
|
-
}
|
|
1440
|
-
})
|
|
1441
|
-
})
|
|
1442
|
-
AWS.mock('CloudWatch', 'getMetricStatistics', function (params, callback) {
|
|
1443
|
-
// Always return data for failed queue
|
|
1444
|
-
if (params.Dimensions[0].Value === 'qdone_test_failed.fifo') {
|
|
1445
|
-
callback(null, {
|
|
1446
|
-
Label: params.MetricName,
|
|
1447
|
-
Datapoints: [
|
|
1448
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' },
|
|
1449
|
-
{ Timestamp: new Date(), Sum: 1, Metric: 'Count' }
|
|
1450
|
-
]
|
|
1451
|
-
})
|
|
1452
|
-
} else {
|
|
1453
|
-
callback(null, {
|
|
1454
|
-
Label: params.MetricName,
|
|
1455
|
-
Datapoints: [
|
|
1456
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' },
|
|
1457
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' }
|
|
1458
|
-
]
|
|
1459
|
-
})
|
|
1460
|
-
}
|
|
1461
|
-
})
|
|
1462
|
-
})
|
|
1463
|
-
it('should print queue name to stdout and exit 0',
|
|
1464
|
-
cliTest(['idle-queues', 'test.fifo'], function (result, stdout, stderr) {
|
|
1465
|
-
expect(stderr).to.contain('Queue test.fifo has been idle for the last 60 minutes.')
|
|
1466
|
-
expect(stderr).to.contain('Queue test_failed.fifo has been active in the last 60 minutes.')
|
|
1467
|
-
}))
|
|
1468
|
-
})
|
|
1469
|
-
|
|
1470
|
-
describe('qdone idle-queues \'test*\' --unpair --include-failed # (inactive queue)', function () {
|
|
1471
|
-
before(function () {
|
|
1472
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1473
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1474
|
-
})
|
|
1475
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1476
|
-
callback(null, { QueueUrls: [
|
|
1477
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}`,
|
|
1478
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}_failed`
|
|
1479
|
-
] })
|
|
1480
|
-
})
|
|
1481
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1482
|
-
callback(null, {
|
|
1483
|
-
Attributes: {
|
|
1484
|
-
ApproximateNumberOfMessages: '0',
|
|
1485
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1486
|
-
ApproximateNumberOfMessagesNotVisible: '0'
|
|
1487
|
-
}
|
|
1488
|
-
})
|
|
1489
|
-
})
|
|
1490
|
-
AWS.mock('CloudWatch', 'getMetricStatistics', function (params, callback) {
|
|
1491
|
-
// Always return 0s
|
|
1492
|
-
callback(null, {
|
|
1493
|
-
Label: params.MetricName,
|
|
1494
|
-
Datapoints: [
|
|
1495
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' },
|
|
1496
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' }
|
|
1497
|
-
]
|
|
1498
|
-
})
|
|
1499
|
-
})
|
|
1500
|
-
})
|
|
1501
|
-
it('should print queue and fail queue name to stdout and exit 0',
|
|
1502
|
-
cliTest(['idle-queues', 'test*', '--unpair', '--include-failed'], function (result, stdout, stderr) {
|
|
1503
|
-
expect(stderr).to.contain('Queue test has been idle for the last 60 minutes.')
|
|
1504
|
-
expect(stderr).to.contain('Queue test_failed has been idle for the last 60 minutes.')
|
|
1505
|
-
expect(stdout).to.contain('test\n')
|
|
1506
|
-
expect(stdout).to.contain('test_failed\n')
|
|
1507
|
-
}))
|
|
1508
|
-
})
|
|
1509
|
-
|
|
1510
|
-
describe('qdone idle-queues test # (no queues exist)', function () {
|
|
1511
|
-
before(function () {
|
|
1512
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1513
|
-
const err = new Error('Queue does not exist.')
|
|
1514
|
-
err.code = 'AWS.SimpleQueueService.NonExistentQueue'
|
|
1515
|
-
callback(err)
|
|
1516
|
-
})
|
|
1517
|
-
})
|
|
1518
|
-
it('should print nothing to stdout and exit 0',
|
|
1519
|
-
cliTest(['idle-queues', 'test'], null, function (result, stdout, stderr) {
|
|
1520
|
-
expect(stderr).to.contain('Queue does not exist.')
|
|
1521
|
-
}))
|
|
1522
|
-
})
|
|
1523
|
-
|
|
1524
|
-
describe('qdone idle-queues \'test*\' # (main queue was recently deleted)', function () {
|
|
1525
|
-
before(function () {
|
|
1526
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1527
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1528
|
-
})
|
|
1529
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1530
|
-
callback(null, { QueueUrls: [
|
|
1531
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}`,
|
|
1532
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}_failed`
|
|
1533
|
-
] })
|
|
1534
|
-
})
|
|
1535
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1536
|
-
const err = new Error('Queue does not exist.')
|
|
1537
|
-
err.code = 'AWS.SimpleQueueService.NonExistentQueue'
|
|
1538
|
-
callback(err)
|
|
1539
|
-
})
|
|
1540
|
-
})
|
|
1541
|
-
it('should print nothing to stdout and exit 0',
|
|
1542
|
-
cliTest(['idle-queues', 'test*'], null, function (result, stdout, stderr) {
|
|
1543
|
-
expect(stderr).to.contain('Queue does not exist.')
|
|
1544
|
-
expect(stderr).to.contain('This error can occur when you run this command immediately after deleting a queue. Wait 60 seconds and try again.')
|
|
1545
|
-
}))
|
|
1546
|
-
})
|
|
1547
|
-
|
|
1548
|
-
describe('qdone idle-queues --delete \'test*\' # (failed queue was recently deleted)', function () {
|
|
1549
|
-
before(function () {
|
|
1550
|
-
AWS.mock('SQS', 'getQueueUrl', function (params, callback) {
|
|
1551
|
-
if (params.QueueName === 'qdone_test_failed') {
|
|
1552
|
-
const err = new Error('Queue does not exist.')
|
|
1553
|
-
err.code = 'AWS.SimpleQueueService.NonExistentQueue'
|
|
1554
|
-
callback(err, null)
|
|
1555
|
-
} else {
|
|
1556
|
-
callback(null, { QueueUrl: `https://q.amazonaws.com/123456789101/${params.QueueName}` })
|
|
1557
|
-
}
|
|
1558
|
-
})
|
|
1559
|
-
AWS.mock('SQS', 'listQueues', function (params, callback) {
|
|
1560
|
-
callback(null, { QueueUrls: [
|
|
1561
|
-
`https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}`
|
|
1562
|
-
// `https://q.amazonaws.com/123456789101/${params.QueueNamePrefix}_failed`
|
|
1563
|
-
] })
|
|
1564
|
-
})
|
|
1565
|
-
AWS.mock('SQS', 'deleteQueue', function (params, callback) {
|
|
1566
|
-
if (params.QueueUrl === 'https://q.amazonaws.com/123456789101/qdone_test_failed') {
|
|
1567
|
-
const err = new Error('Queue does not exist.')
|
|
1568
|
-
err.code = 'AWS.SimpleQueueService.NonExistentQueue'
|
|
1569
|
-
callback(err)
|
|
1570
|
-
callback(err, null)
|
|
1571
|
-
} else {
|
|
1572
|
-
callback(null, {})
|
|
1573
|
-
}
|
|
1574
|
-
})
|
|
1575
|
-
AWS.mock('SQS', 'getQueueAttributes', function (params, callback) {
|
|
1576
|
-
if (params.QueueUrl === 'https://q.amazonaws.com/123456789101/qdone_test_failed') {
|
|
1577
|
-
const err = new Error('Queue does not exist.')
|
|
1578
|
-
err.code = 'AWS.SimpleQueueService.NonExistentQueue'
|
|
1579
|
-
callback(err, null)
|
|
1580
|
-
} else {
|
|
1581
|
-
callback(null, {
|
|
1582
|
-
Attributes: {
|
|
1583
|
-
ApproximateNumberOfMessages: '0',
|
|
1584
|
-
ApproximateNumberOfMessagesDelayed: '0',
|
|
1585
|
-
ApproximateNumberOfMessagesNotVisible: '0'
|
|
1586
|
-
}
|
|
1587
|
-
})
|
|
1588
|
-
}
|
|
1589
|
-
})
|
|
1590
|
-
AWS.mock('CloudWatch', 'getMetricStatistics', function (params, callback) {
|
|
1591
|
-
// Always return 0s
|
|
1592
|
-
callback(null, {
|
|
1593
|
-
Label: params.MetricName,
|
|
1594
|
-
Datapoints: [
|
|
1595
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' },
|
|
1596
|
-
{ Timestamp: new Date(), Sum: 0, Metric: 'Count' }
|
|
1597
|
-
]
|
|
1598
|
-
})
|
|
1599
|
-
})
|
|
1600
|
-
})
|
|
1601
|
-
it('should note the missing failed queue, print deleted queue to stdout and exit 0',
|
|
1602
|
-
cliTest(['idle-queues', '--delete', 'test*'], function (result, stdout, stderr) {
|
|
1603
|
-
expect(stderr).to.contain('Queue test_failed does not exist.')
|
|
1604
|
-
expect(stderr).to.contain('Deleted test')
|
|
1605
|
-
expect(stdout).to.contain('test\n')
|
|
1606
|
-
expect(stdout).to.not.contain('test_failed')
|
|
1607
|
-
}))
|
|
1608
|
-
})
|
|
1609
|
-
})
|