keuss 1.7.3 → 2.0.0

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.
Files changed (65) hide show
  1. package/Pipeline/Queue.js +0 -1
  2. package/QFactory.js +11 -6
  3. package/Queue.js +1 -4
  4. package/README.md +2 -1
  5. package/TODO +0 -9
  6. package/backends/bucket-mongo-safe.js +11 -11
  7. package/backends/intraorder.js +13 -11
  8. package/backends/mongo.js +12 -9
  9. package/backends/pl-mongo.js +8 -5
  10. package/backends/postgres.js +380 -0
  11. package/backends/ps-mongo.js +11 -8
  12. package/backends/redis-list.js +8 -8
  13. package/backends/redis-oq.js +8 -3
  14. package/backends/stream-mongo.js +10 -15
  15. package/package.json +14 -10
  16. package/stats/mem.js +0 -1
  17. package/.github/workflows/codeql-analysis.yml +0 -72
  18. package/bench/all-mongo.js +0 -108
  19. package/bench/multi-q.js +0 -85
  20. package/bench/redis-oq-consumer-producer.js +0 -52
  21. package/bench/redis-oq-consumer.js +0 -40
  22. package/bench/redis-oq-producer.js +0 -43
  23. package/docker-compose/docker-compose.yaml +0 -18
  24. package/docker-compose.yaml +0 -18
  25. package/examples/pipelines/builder/index.js +0 -99
  26. package/examples/pipelines/fromRecipe/index.js +0 -127
  27. package/examples/pipelines/simplest/index.js +0 -38
  28. package/examples/pipelines/simulation-fork/index.js +0 -115
  29. package/examples/snippets/01-simplest-pop-push.js +0 -49
  30. package/examples/snippets/02-simplest-reserve-rollback-commit.js +0 -44
  31. package/examples/snippets/03-simplest-producer-consumer-loops.js +0 -77
  32. package/examples/snippets/04-bucket-mongo-safe-insert-reserve-commit.js +0 -78
  33. package/examples/snippets/05-insert-reserve-rollback-deadletter.js +0 -105
  34. package/examples/snippets/06-random-consumer-producer.js +0 -270
  35. package/examples/snippets/07-stream-simple.js +0 -53
  36. package/examples/snippets/redislabs-consumer-producer.js +0 -44
  37. package/examples/snippets/with-redis-stats-and-signaller-consumer-producer.js +0 -52
  38. package/examples/webhooks/README.md +0 -36
  39. package/examples/webhooks/app.js +0 -70
  40. package/examples/webhooks/consumer.js +0 -98
  41. package/examples/webhooks/index.js +0 -55
  42. package/examples/webhooks/package-lock.json +0 -500
  43. package/examples/webhooks/package.json +0 -23
  44. package/examples/webhooks/wh-payload.json +0 -38
  45. package/playground/irc.js +0 -53
  46. package/playground/pl-rollback.js +0 -55
  47. package/playground/pl1.js +0 -74
  48. package/playground/q1.js +0 -34
  49. package/playground/simple-pl.js +0 -42
  50. package/playground/stream-loops.js +0 -114
  51. package/test/backends_bucket-at-least-once.js +0 -302
  52. package/test/backends_deadletter.js +0 -227
  53. package/test/backends_payload.js +0 -542
  54. package/test/backends_push-pop.js +0 -170
  55. package/test/backends_remove.js +0 -320
  56. package/test/backends_reserve-commit-rollback.js +0 -1033
  57. package/test/intraorder.js +0 -325
  58. package/test/pause.js +0 -220
  59. package/test/pipeline-Builder.js +0 -285
  60. package/test/pipeline-ChoiceLink.js +0 -241
  61. package/test/pipeline-DirectLink.js +0 -376
  62. package/test/pipeline-Sink.js +0 -175
  63. package/test/signal.js +0 -196
  64. package/test/stats.js +0 -296
  65. package/test/stream-mongo.js +0 -166
@@ -1,542 +0,0 @@
1
- var async = require ('async');
2
- var should = require ('should');
3
- var _ = require ('lodash');
4
-
5
- var LocalSignal = require ('../signal/local');
6
- var MemStats = require ('../stats/mem');
7
-
8
- var MongoClient = require ('mongodb').MongoClient;
9
-
10
- var factory = null;
11
-
12
- [
13
- {label: 'Simple MongoDB', mq: require ('../backends/mongo')},
14
- {label: 'Pipelined MongoDB', mq: require ('../backends/pl-mongo')},
15
- {label: 'Tape MongoDB', mq: require ('../backends/ps-mongo')},
16
- {label: 'Stream MongoDB', mq: require ('../backends/stream-mongo')},
17
- {label: 'Safe MongoDB Buckets', mq: require ('../backends/bucket-mongo-safe')},
18
- {label: 'Redis List', mq: require ('../backends/redis-list')},
19
- {label: 'Redis OrderedQueue', mq: require ('../backends/redis-oq')},
20
- {label: 'Mongo IntraOrder', mq: require ('../backends/intraorder')},
21
- ].forEach(function (MQ_item) {
22
- describe('payload aspects on ' + MQ_item.label + ' queue backend, round 1', function () {
23
- var MQ = MQ_item.mq;
24
-
25
- before(done => {
26
- var opts = {
27
- url: 'mongodb://localhost/keuss_test_backends_payload',
28
- signaller: { provider: LocalSignal},
29
- stats: {provider: MemStats}
30
- };
31
-
32
- MQ (opts, (err, fct) => {
33
- if (err) return done(err);
34
- factory = fct;
35
- done();
36
- });
37
- });
38
-
39
- after (done => async.series ([
40
- cb => setTimeout (cb, 1000),
41
- cb => factory.close (cb),
42
- cb => MongoClient.connect ('mongodb://localhost/keuss_test_backends_payload', (err, cl) => {
43
- if (err) return done (err);
44
- cl.db().dropDatabase (() => cl.close (cb))
45
- })
46
- ], done));
47
-
48
-
49
- it('should insert and pop json object payloads ok', done => {
50
- var q = factory.queue('test_queue_1');
51
-
52
- async.series([
53
- cb => q.push ({a:1, b:'2'}, cb),
54
- cb => q.pop ('me', (err, res) => {
55
- if (err) return db (err);
56
- res.payload.should.eql ({a:1, b:'2'});
57
- res.tries.should.equal (0);
58
- res.hdrs.should.eql ({});
59
- cb (null, res);
60
- }),
61
- ], (err, res) => {
62
- done (err);
63
- });
64
- });
65
-
66
-
67
- it('should insert and pop json array payloads ok', done => {
68
- var q = factory.queue('test_queue_1');
69
-
70
- async.series([
71
- cb => q.push ([{a:1}, {b:'2'}, 4, 'yyy'], cb),
72
- cb => q.pop ('me', (err, res) => {
73
- if (err) return db (err);
74
- res.payload.should.eql ([{a:1}, {b:'2'}, 4, 'yyy']);
75
- res.tries.should.equal (0);
76
- res.hdrs.should.eql ({});
77
- cb (null, res);
78
- }),
79
- ], (err, res) => {
80
- done (err);
81
- });
82
- });
83
-
84
-
85
- it('should insert and pop string payloads ok', done => {
86
- var q = factory.queue('test_queue_1');
87
-
88
- async.series([
89
- cb => q.push ("das payload", cb),
90
- cb => q.pop ('me', (err, res) => {
91
- if (err) return db (err);
92
- res.payload.should.eql ("das payload");
93
- res.tries.should.equal (0);
94
- res.hdrs.should.eql ({});
95
- cb (null, res);
96
- }),
97
- ], (err, res) => {
98
- done (err);
99
- });
100
- });
101
-
102
-
103
- it('should insert and pop number payloads ok', done => {
104
- var q = factory.queue('test_queue_1');
105
-
106
- async.series([
107
- cb => q.push (123456, cb),
108
- cb => q.pop ('me', (err, res) => {
109
- if (err) return db (err);
110
- res.payload.should.eql (123456);
111
- res.tries.should.equal (0);
112
- res.hdrs.should.eql ({});
113
- cb (null, res);
114
- }),
115
- ], (err, res) => {
116
- done (err);
117
- });
118
- });
119
-
120
-
121
- it('should insert and pop Buffer payloads ok', done => {
122
- var q = factory.queue('test_queue_1');
123
- const bf = Buffer.from ([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
124
- async.series([
125
- cb => q.push (bf, cb),
126
- cb => q.pop ('me', (err, res) => {
127
- if (err) return db (err);
128
- res.payload.should.eql (bf);
129
- res.tries.should.equal (0);
130
- res.hdrs.should.eql ({});
131
- cb (null, res);
132
- }),
133
- ], (err, res) => {
134
- done (err);
135
- });
136
- });
137
-
138
-
139
-
140
- it('should insert and pop json object payloads ok with headers', done => {
141
- var q = factory.queue('test_queue_1');
142
- var hdrs = {
143
- aaa: 'qwerty',
144
- bbb: 12,
145
- ccc: true,
146
- ddd: 12.34
147
- };
148
-
149
- async.series([
150
- cb => q.push ({a:1, b:'2'}, {hdrs}, cb),
151
- cb => q.pop ('me', (err, res) => {
152
- if (err) return db (err);
153
- res.payload.should.eql ({a:1, b:'2'});
154
- res.tries.should.equal (0);
155
- res.hdrs.should.eql (hdrs);
156
- cb (null, res);
157
- }),
158
- ], (err, res) => {
159
- done (err);
160
- });
161
- });
162
-
163
-
164
- it('should insert and pop json array payloads ok with headers', done => {
165
- var q = factory.queue('test_queue_1');
166
- var hdrs = {
167
- aaa: 'qwerty',
168
- bbb: 12,
169
- ccc: true,
170
- ddd: 12.34
171
- };
172
-
173
- async.series([
174
- cb => q.push ([{a:1}, {b:'2'}, 4, 'yyy'], {hdrs}, cb),
175
- cb => q.pop ('me', (err, res) => {
176
- if (err) return db (err);
177
- res.payload.should.eql ([{a:1}, {b:'2'}, 4, 'yyy']);
178
- res.tries.should.equal (0);
179
- res.hdrs.should.eql (hdrs);
180
- cb (null, res);
181
- }),
182
- ], (err, res) => {
183
- done (err);
184
- });
185
- });
186
-
187
-
188
- it('should insert and pop string payloads ok with headers', done => {
189
- var q = factory.queue('test_queue_1');
190
- var hdrs = {
191
- aaa: 'qwerty',
192
- bbb: 12,
193
- ccc: true,
194
- ddd: 12.34
195
- };
196
-
197
- async.series([
198
- cb => q.push ("das payload", {hdrs}, cb),
199
- cb => q.pop ('me', (err, res) => {
200
- if (err) return db (err);
201
- res.payload.should.eql ("das payload");
202
- res.tries.should.equal (0);
203
- res.hdrs.should.eql (hdrs);
204
- cb (null, res);
205
- }),
206
- ], (err, res) => {
207
- done (err);
208
- });
209
- });
210
-
211
-
212
- it('should insert and pop number payloads ok with headers', done => {
213
- var q = factory.queue('test_queue_1');
214
- var hdrs = {
215
- aaa: 'qwerty',
216
- bbb: 12,
217
- ccc: true,
218
- ddd: 12.34
219
- };
220
-
221
- async.series([
222
- cb => q.push (123456, {hdrs}, cb),
223
- cb => q.pop ('me', (err, res) => {
224
- if (err) return db (err);
225
- res.payload.should.eql (123456);
226
- res.tries.should.equal (0);
227
- res.hdrs.should.eql (hdrs);
228
- cb (null, res);
229
- }),
230
- ], (err, res) => {
231
- done (err);
232
- });
233
- });
234
-
235
-
236
- it('should insert and pop Buffer payloads ok with headers', done => {
237
- var q = factory.queue('test_queue_1');
238
- const bf = Buffer.from ([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
239
- var hdrs = {
240
- aaa: 'qwerty',
241
- bbb: 12,
242
- ccc: true,
243
- ddd: 12.34
244
- };
245
-
246
- async.series([
247
- cb => q.push (bf, {hdrs}, cb),
248
- cb => q.pop ('me', (err, res) => {
249
- if (err) return db (err);
250
- res.payload.should.eql (bf);
251
- res.tries.should.equal (0);
252
- res.hdrs.should.eql (hdrs);
253
- cb (null, res);
254
- }),
255
- ], (err, res) => {
256
- done (err);
257
- });
258
- });
259
-
260
- });
261
- });
262
-
263
-
264
- [
265
- {label: 'Simple MongoDB', mq: require ('../backends/mongo')},
266
- {label: 'Pipelined MongoDB', mq: require ('../backends/pl-mongo')},
267
- {label: 'Tape MongoDB', mq: require ('../backends/ps-mongo')},
268
- {label: 'Stream MongoDB', mq: require ('../backends/stream-mongo')},
269
- {label: 'Safe MongoDB Buckets', mq: require ('../backends/bucket-mongo-safe')},
270
- {label: 'Redis OrderedQueue', mq: require ('../backends/redis-oq')},
271
- ].forEach(function (MQ_item) {
272
- describe('payload aspects on ' + MQ_item.label + ' queue backend, round 2', function () {
273
- var MQ = MQ_item.mq;
274
-
275
- before(done => {
276
- var opts = {
277
- url: 'mongodb://localhost/keuss_test_backends_payload',
278
- signaller: { provider: LocalSignal},
279
- stats: {provider: MemStats}
280
- };
281
-
282
- MQ (opts, (err, fct) => {
283
- if (err) return done(err);
284
- factory = fct;
285
- done();
286
- });
287
- });
288
-
289
- after (done => async.series ([
290
- cb => setTimeout (cb, 1000),
291
- cb => factory.close (cb),
292
- cb => MongoClient.connect ('mongodb://localhost/keuss_test_backends_payload', (err, cl) => {
293
- if (err) return done (err);
294
- cl.db().dropDatabase (() => cl.close (cb))
295
- })
296
- ], done));
297
-
298
-
299
- it('should insert and reserve json object payloads ok', done => {
300
- var q = factory.queue('test_queue_1');
301
- var state = {};
302
-
303
- async.series([
304
- cb => q.push ({a:1, b:'2'}, cb),
305
- cb => q.pop ('me', {reserve: true}, (err, res) => {
306
- if (err) return db (err);
307
- state.reserved_id = res._id;
308
- res.payload.should.eql ({a:1, b:'2'});
309
- res.tries.should.equal (0);
310
- res.hdrs.should.eql ({});
311
- cb (null, res);
312
- }),
313
- cb => q.ok (state.reserved_id, cb),
314
- ], (err, res) => {
315
- done (err);
316
- });
317
- });
318
-
319
-
320
- it('should insert and reserve json array payloads ok', done => {
321
- var q = factory.queue('test_queue_1');
322
- var state = {};
323
-
324
- async.series([
325
- cb => q.push ([{a:1}, {b:'2'}, 4, 'yyy'], cb),
326
- cb => q.pop ('me', {reserve: true}, (err, res) => {
327
- if (err) return db (err);
328
- state.reserved_id = res._id;
329
- res.payload.should.eql ([{a:1}, {b:'2'}, 4, 'yyy']);
330
- res.tries.should.equal (0);
331
- res.hdrs.should.eql ({});
332
- cb (null, res);
333
- }),
334
- cb => q.ok (state.reserved_id, cb),
335
- ], (err, res) => {
336
- done (err);
337
- });
338
- });
339
-
340
-
341
- it('should insert and reserve string payloads ok', done => {
342
- var q = factory.queue('test_queue_1');
343
- var state = {};
344
-
345
- async.series([
346
- cb => q.push ("das payload", cb),
347
- cb => q.pop ('me', {reserve: true}, (err, res) => {
348
- if (err) return db (err);
349
- state.reserved_id = res._id;
350
- res.payload.should.eql ("das payload");
351
- res.tries.should.equal (0);
352
- res.hdrs.should.eql ({});
353
- cb (null, res);
354
- }),
355
- cb => q.ok (state.reserved_id, cb),
356
- ], (err, res) => {
357
- done (err);
358
- });
359
- });
360
-
361
-
362
- it('should insert and reserve number payloads ok', done => {
363
- var q = factory.queue('test_queue_1');
364
- var state = {};
365
-
366
- async.series([
367
- cb => q.push (123456, cb),
368
- cb => q.pop ('me', {reserve: true}, (err, res) => {
369
- if (err) return db (err);
370
- state.reserved_id = res._id;
371
- res.payload.should.eql (123456);
372
- res.tries.should.equal (0);
373
- res.hdrs.should.eql ({});
374
- cb (null, res);
375
- }),
376
- cb => q.ok (state.reserved_id, cb),
377
- ], (err, res) => {
378
- done (err);
379
- });
380
- });
381
-
382
-
383
- it('should insert and reserve Buffer payloads ok', done => {
384
- var q = factory.queue('test_queue_1');
385
- var state = {};
386
- const bf = Buffer.from ([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
387
- async.series([
388
- cb => q.push (bf, cb),
389
- cb => q.pop ('me', {reserve: true}, (err, res) => {
390
- if (err) return db (err);
391
- state.reserved_id = res._id;
392
- res.payload.should.eql (bf);
393
- res.tries.should.equal (0);
394
- res.hdrs.should.eql ({});
395
- cb (null, res);
396
- }),
397
- cb => q.ok (state.reserved_id, cb),
398
- ], (err, res) => {
399
- done (err);
400
- });
401
- });
402
-
403
-
404
-
405
- it('should insert and reserve json object payloads ok with headers', done => {
406
- var q = factory.queue('test_queue_1');
407
- var state = {};
408
- var hdrs = {
409
- aaa: 'qwerty',
410
- bbb: 12,
411
- ccc: true,
412
- ddd: 12.34
413
- };
414
-
415
- async.series([
416
- cb => q.push ({a:1, b:'2'}, {hdrs}, cb),
417
- cb => q.pop ('me', {reserve: true}, (err, res) => {
418
- if (err) return db (err);
419
- state.reserved_id = res._id;
420
- res.payload.should.eql ({a:1, b:'2'});
421
- res.tries.should.equal (0);
422
- res.hdrs.should.eql (hdrs);
423
- cb (null, res);
424
- }),
425
- cb => q.ok (state.reserved_id, cb),
426
- ], (err, res) => {
427
- done (err);
428
- });
429
- });
430
-
431
-
432
- it('should insert and reserve json array payloads ok with headers', done => {
433
- var q = factory.queue('test_queue_1');
434
- var state = {};
435
- var hdrs = {
436
- aaa: 'qwerty',
437
- bbb: 12,
438
- ccc: true,
439
- ddd: 12.34
440
- };
441
-
442
- async.series([
443
- cb => q.push ([{a:1}, {b:'2'}, 4, 'yyy'], {hdrs}, cb),
444
- cb => q.pop ('me', {reserve: true}, (err, res) => {
445
- if (err) return db (err);
446
- state.reserved_id = res._id;
447
- res.payload.should.eql ([{a:1}, {b:'2'}, 4, 'yyy']);
448
- res.tries.should.equal (0);
449
- res.hdrs.should.eql (hdrs);
450
- cb (null, res);
451
- }),
452
- cb => q.ok (state.reserved_id, cb),
453
- ], (err, res) => {
454
- done (err);
455
- });
456
- });
457
-
458
-
459
- it('should insert and reserve string payloads ok with headers', done => {
460
- var q = factory.queue('test_queue_1');
461
- var state = {};
462
- var hdrs = {
463
- aaa: 'qwerty',
464
- bbb: 12,
465
- ccc: true,
466
- ddd: 12.34
467
- };
468
-
469
- async.series([
470
- cb => q.push ("das payload", {hdrs}, cb),
471
- cb => q.pop ('me', {reserve: true}, (err, res) => {
472
- if (err) return db (err);
473
- state.reserved_id = res._id;
474
- res.payload.should.eql ("das payload");
475
- res.tries.should.equal (0);
476
- res.hdrs.should.eql (hdrs);
477
- cb (null, res);
478
- }),
479
- cb => q.ok (state.reserved_id, cb),
480
- ], (err, res) => {
481
- done (err);
482
- });
483
- });
484
-
485
-
486
- it('should insert and reserve number payloads ok with headers', done => {
487
- var q = factory.queue('test_queue_1');
488
- var state = {};
489
- var hdrs = {
490
- aaa: 'qwerty',
491
- bbb: 12,
492
- ccc: true,
493
- ddd: 12.34
494
- };
495
-
496
- async.series([
497
- cb => q.push (123456, {hdrs}, cb),
498
- cb => q.pop ('me', {reserve: true}, (err, res) => {
499
- if (err) return db (err);
500
- state.reserved_id = res._id;
501
- res.payload.should.eql (123456);
502
- res.tries.should.equal (0);
503
- res.hdrs.should.eql (hdrs);
504
- cb (null, res);
505
- }),
506
- cb => q.ok (state.reserved_id, cb),
507
- ], (err, res) => {
508
- done (err);
509
- });
510
- });
511
-
512
-
513
- it('should insert and reserve Buffer payloads ok with headers', done => {
514
- var q = factory.queue('test_queue_1');
515
- var state = {};
516
- var hdrs = {
517
- aaa: 'qwerty',
518
- bbb: 12,
519
- ccc: true,
520
- ddd: 12.34
521
- };
522
-
523
- const bf = Buffer.from ([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
524
- async.series([
525
- cb => q.push (bf, {hdrs}, cb),
526
- cb => q.pop ('me', {reserve: true}, (err, res) => {
527
- if (err) return db (err);
528
- state.reserved_id = res._id;
529
- res.payload.should.eql (bf);
530
- res.tries.should.equal (0);
531
- res.hdrs.should.eql (hdrs);
532
- cb (null, res);
533
- }),
534
- cb => q.ok (state.reserved_id, cb),
535
- ], (err, res) => {
536
- done (err);
537
- });
538
- });
539
-
540
-
541
- });
542
- });
@@ -1,170 +0,0 @@
1
-
2
- var async = require ('async');
3
- var should = require ('should');
4
-
5
- var factory = null;
6
-
7
- [
8
- {label: 'Redis List', mq: require ('../backends/redis-list')}
9
- ].forEach (function (MQ_item) {
10
-
11
- describe ('push-pop with ' + MQ_item.label + ' queue backend', function () {
12
- var MQ = MQ_item.mq;
13
-
14
- before (function (done) {
15
- var opts = {};
16
-
17
- MQ (opts, function (err, fct) {
18
- if (err) return done (err);
19
- factory = fct;
20
- done();
21
- });
22
- });
23
-
24
-
25
- after (done => async.series ([
26
- cb => setTimeout (cb, 1000),
27
- cb => factory.close (cb)
28
- ], done));
29
-
30
- it ('queue is created empty and ok', function (done){
31
- var q = factory.queue('test_queue');
32
- should.equal (q.nextMatureDate (), null);
33
- q.name ().should.equal ('test_queue');
34
-
35
- async.series([
36
- function (cb) {q.stats(cb)},
37
- function (cb) {q.size (cb)},
38
- function (cb) {q.totalSize (cb)},
39
- function (cb) {q.next_t (cb)},
40
- ], function(err, results) {
41
- results.should.eql ([{get: 0, put: 0}, 0, 0, null])
42
- done();
43
- });
44
- });
45
-
46
- it ('sequential push & pops with no delay, go as expected', function (done){
47
- var q = factory.queue('test_queue');
48
-
49
- async.series([
50
- function (cb) {q.push ({elem:1, pl:'twetrwte'}, cb)},
51
- function (cb) {q.push ({elem:2, pl:'twetrwte'}, cb)},
52
- function (cb) {q.size (function (err, size) {
53
- size.should.equal (2);
54
- cb();
55
- })},
56
- function (cb) {q.stats (function (err, res) {
57
- res.should.eql ({get: 0, put: 2});
58
- cb();
59
- })},
60
- function (cb) {q.next_t (function (err, res) {
61
- should.equal (res, null);
62
- cb();
63
- })},
64
- function (cb) {q.pop ('c1', cb)},
65
- function (cb) {q.size (function (err, size) {
66
- size.should.equal (1);
67
- cb();
68
- })},
69
- function (cb) {q.stats (function (err, res) {
70
- res.should.eql ({get: 1, put: 2});
71
- cb();
72
- })},
73
- function (cb) {q.pop ('c2', cb)},
74
- function (cb) {q.size (function (err, size) {
75
- size.should.equal (0);
76
- cb();
77
- })},
78
- function (cb) {q.stats (function (err, res) {
79
- res.should.eql ({get: 2, put: 2});
80
- cb();
81
- })},
82
- ], function(err, results) {
83
- done();
84
- });
85
- });
86
-
87
-
88
- it ('sequential push & pops with delays, go as expected (delays are ignored)', function (done){
89
- var q = factory.queue('test_queue');
90
-
91
- async.series([
92
- function (cb) {q.push ({elem:1, pl:'twetrwte'}, {delay:2}, cb)},
93
- function (cb) {q.push ({elem:2, pl:'twetrwte'}, {delay:1}, cb)},
94
- function (cb) {q.size (function (err, size) {
95
- size.should.equal (2);
96
- cb();
97
- })},
98
- function (cb) {q.stats (function (err, res) {
99
- res.should.eql ({get: 0, put: 2});
100
- cb();
101
- })},
102
- function (cb) {q.pop ('c1', function (err, ret) {
103
- ret.payload.should.eql ({elem:1, pl:'twetrwte'});
104
- cb (err, ret);
105
- })},
106
- function (cb) {q.size (function (err, size) {
107
- size.should.equal (1);
108
- cb();
109
- })},
110
- function (cb) {q.stats (function (err, res) {
111
- res.should.eql ({get: 1, put: 2});
112
- cb();
113
- })},
114
- function (cb) {q.pop ('c2', function (err, ret) {
115
- ret.payload.should.eql ({elem:2, pl:'twetrwte'});
116
- cb (err, ret);
117
- })},
118
- function (cb) {q.size (function (err, size) {
119
- size.should.equal (0);
120
- cb();
121
- })},
122
- function (cb) {q.stats (function (err, res) {
123
- res.should.eql ({get: 2, put: 2});
124
- cb();
125
- })},
126
- ], function(err, results) {
127
- done();
128
- });
129
- });
130
-
131
-
132
- it ('pop cancellation works as expected', function (done){
133
- var q = factory.queue('test_queue');
134
-
135
- async.series([
136
- function (cb) {
137
- var tid1 = q.pop ('c1', {timeout: 2000}, function (err, ret) {err.should.equal('cancel')});
138
- q.consumers().length.should.equal (1);
139
- var tid2 = q.pop ('c2', {timeout: 2000}, function (err, ret) {err.should.equal('cancel')});
140
- q.nConsumers().should.equal (2);
141
- q.cancel (tid1);
142
- q.nConsumers().should.equal (1);
143
- q.cancel (tid2);
144
- q.nConsumers().should.equal (0);
145
- cb();
146
- },
147
- function (cb) {q.push ({elem:2, pl:'twetrwte'}, cb)},
148
- function (cb) {q.push ({elem:1, pl:'twetrwte'}, cb)},
149
- function (cb) {q.pop ('c3', {timeout: 15000}, function (err, ret) {
150
- ret.payload.should.eql ({elem:2, pl:'twetrwte'});
151
- cb (err, ret);
152
- })},
153
- function (cb) {q.pop ('c4', {timeout: 15000}, function (err, ret) {
154
- ret.payload.should.eql ({elem:1, pl:'twetrwte'});
155
- cb (err, ret);
156
- })},
157
- function (cb) {q.size (function (err, size) {
158
- size.should.equal (0);
159
- cb();
160
- })},
161
- function (cb) {q.stats (function (err, res) {
162
- res.should.eql ({get: 2, put: 2});
163
- cb();
164
- })},
165
- ], function(err, results) {
166
- done();
167
- });
168
- });
169
- });
170
- });