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,1033 +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 OrderedQueue', mq: require ('../backends/redis-oq')},
19
- {label: 'Mongo IntraOrder', mq: require ('../backends/intraorder')},
20
- ].forEach(function (MQ_item) {
21
- describe('reserve-commit-rollback with ' + MQ_item.label + ' queue backend', function () {
22
- var MQ = MQ_item.mq;
23
-
24
- before(function (done) {
25
- var opts = {
26
- url: 'mongodb://localhost/keuss_test_backends_rcr',
27
- signaller: { provider: LocalSignal},
28
- stats: {provider: MemStats}
29
- };
30
-
31
- MQ(opts, function (err, fct) {
32
- if (err) return done(err);
33
- factory = fct;
34
- done();
35
- });
36
- });
37
-
38
- after (done => async.series ([
39
- cb => setTimeout (cb, 1000),
40
- cb => factory.close (cb),
41
- cb => MongoClient.connect ('mongodb://localhost/keuss_test_backends_rcr', (err, cl) => {
42
- if (err) return done (err);
43
- cl.db().dropDatabase (() => cl.close (cb))
44
- })
45
- ], done));
46
-
47
- it('queue is created empty and ok', done => {
48
- var q = factory.queue('test_queue_1');
49
- should.equal(q.nextMatureDate(), null);
50
-
51
- async.series([
52
- cb => q.stats(cb),
53
- cb => q.size(cb),
54
- cb => q.totalSize(cb),
55
- cb => q.schedSize(cb),
56
- cb => q.next_t(cb),
57
- ], (err, results) => {
58
- if (err) return done (err);
59
- results.should.eql([{
60
- get: 0,
61
- put: 0,
62
- reserve: 0,
63
- commit: 0,
64
- rollback: 0,
65
- deadletter: 0
66
- }, 0, 0, 0, null]);
67
- done();
68
- });
69
- });
70
-
71
- it('sequential push & pops with no delay, go as expected', function (done) {
72
- var q = factory.queue('test_queue_2');
73
-
74
- async.series([
75
- cb => q.push({elem: 1, pl: 'twetrwte'}, cb),
76
- cb => q.push({elem: 2, pl: 'twetrwte'}, cb),
77
- cb => {
78
- q.size ((err, size) => {
79
- size.should.equal(2);
80
- cb();
81
- })
82
- },
83
- cb => q.stats((err, res) => {
84
- res.should.match({
85
- get: 0,
86
- put: 2,
87
- reserve: 0,
88
- commit: 0,
89
- rollback: 0,
90
- deadletter: 0
91
- });
92
- cb();
93
- }),
94
- cb=> q.next_t((err, res) => {
95
- res.getTime().should.be.approximately(new Date().getTime(), 500);
96
- cb();
97
- }),
98
- cb => q.pop('c1', cb),
99
- cb => q.size((err, size) => {
100
- size.should.equal(1);
101
- cb();
102
- }),
103
- cb => q.stats((err, res) => {
104
- res.should.match({
105
- get: 1,
106
- put: 2,
107
- reserve: 0,
108
- commit: 0,
109
- rollback: 0,
110
- deadletter: 0
111
- });
112
- cb();
113
- }),
114
- cb => q.pop('c2', cb),
115
- function (cb) {
116
- q.size(function (err, size) {
117
- size.should.equal(0);
118
- cb();
119
- })
120
- },
121
- cb => setTimeout (cb, 1000),
122
- cb => q.stats((err, res) => {
123
- res.should.match({
124
- get: 2,
125
- put: 2,
126
- reserve: 0,
127
- commit: 0,
128
- rollback: 0,
129
- deadletter: 0
130
- });
131
- cb();
132
- }),
133
- cb => q.next_t((err, res) => {
134
- if (q.type () != 'mongo:intraorder') {
135
- should.equal(res, null);
136
- }
137
- cb();
138
- })
139
- ], (err, results) => {
140
- done();
141
- });
142
- });
143
-
144
- it('sequential push & pops with delays, go as expected', function (done) {
145
- var q = factory.queue('test_queue_3');
146
-
147
- async.series([
148
- function (cb) {
149
- q.push({
150
- elem: 1,
151
- pl: 'twetrwte'
152
- }, {
153
- delay: 2
154
- }, cb)
155
- },
156
- function (cb) {
157
- setTimeout(function () {
158
- cb()
159
- }, 150)
160
- },
161
- function (cb) {
162
- q.push({
163
- elem: 2,
164
- pl: 'twetrwte'
165
- }, {
166
- delay: 1
167
- }, cb)
168
- },
169
- function (cb) {
170
- q.size(function (err, size) {
171
- size.should.equal(0);
172
- cb();
173
- })
174
- },
175
- function (cb) {
176
- q.stats(function (err, res) {
177
- res.should.match({
178
- get: 0,
179
- put: 2,
180
- reserve: 0,
181
- commit: 0,
182
- rollback: 0,
183
- deadletter: 0
184
- });
185
- cb();
186
- })
187
- },
188
- function (cb) {
189
- q.next_t(function (err, res) {
190
- res.getTime().should.be.approximately(new Date().getTime() + 1000, 100);
191
- cb();
192
- })
193
- },
194
- function (cb) {
195
- q.pop('c1', function (err, ret) {
196
- ret.payload.should.eql({
197
- elem: 2,
198
- pl: 'twetrwte'
199
- });
200
- cb(err, ret);
201
- })
202
- },
203
- function (cb) {
204
- q.size(function (err, size) {
205
- size.should.equal(0);
206
- cb();
207
- })
208
- },
209
- function (cb) {
210
- q.stats(function (err, res) {
211
- res.should.match({
212
- get: 1,
213
- put: 2,
214
- reserve: 0,
215
- commit: 0,
216
- rollback: 0,
217
- deadletter: 0
218
- });
219
- cb();
220
- });
221
- },
222
- function (cb) {
223
- q.next_t(function (err, res) {
224
- res.getTime().should.be.approximately(new Date().getTime() + 1000, 500);
225
- cb();
226
- })
227
- },
228
- function (cb) {
229
- q.pop('c2', function (err, ret) {
230
- ret.payload.should.eql({
231
- elem: 1,
232
- pl: 'twetrwte'
233
- });
234
- cb(err, ret);
235
- })
236
- },
237
- function (cb) {
238
- q.size(function (err, size) {
239
- size.should.equal(0);
240
- cb();
241
- })
242
- },
243
- function (cb) {
244
- q.stats(function (err, res) {
245
- res.should.match({
246
- get: 2,
247
- put: 2,
248
- reserve: 0,
249
- commit: 0,
250
- rollback: 0,
251
- deadletter: 0
252
- });
253
- cb();
254
- })
255
- },
256
- function (cb) {
257
- q.next_t(function (err, res) {
258
- if (q.type () != 'mongo:intraorder') {
259
- should.equal(res, null);
260
- }
261
- cb();
262
- });
263
- }
264
- ], function (err, results) {
265
- done();
266
- });
267
- });
268
-
269
- it('timed-out pops work as expected', function (done) {
270
- var q = factory.queue('test_queue_4');
271
-
272
- async.series([
273
- function (cb) {
274
- q.push({
275
- elem: 1,
276
- pl: 'twetrwte'
277
- }, {
278
- delay: 6
279
- }, cb)
280
- },
281
- function (cb) {
282
- setTimeout(function () {
283
- cb()
284
- }, 150)
285
- },
286
- function (cb) {
287
- q.push({
288
- elem: 2,
289
- pl: 'twetrwte'
290
- }, {
291
- delay: 5
292
- }, cb)
293
- },
294
- function (cb) {
295
- q.size(function (err, size) {
296
- size.should.equal(0);
297
- cb();
298
- })
299
- },
300
- function (cb) {
301
- q.stats(function (err, res) {
302
- res.should.match({
303
- get: 0,
304
- put: 2,
305
- reserve: 0,
306
- commit: 0,
307
- rollback: 0,
308
- deadletter: 0
309
- });
310
- cb();
311
- })
312
- },
313
- function (cb) {
314
- q.pop('c1', {
315
- timeout: 2000
316
- }, function (err, ret) {
317
- should.equal(ret, null);
318
- cb();
319
- })
320
- },
321
- function (cb) {
322
- q.size(function (err, size) {
323
- size.should.equal(0);
324
- cb();
325
- })
326
- },
327
- function (cb) {
328
- q.stats(function (err, res) {
329
- res.should.match({
330
- get: 0,
331
- put: 2,
332
- reserve: 0,
333
- commit: 0,
334
- rollback: 0,
335
- deadletter: 0
336
- });
337
- cb();
338
- })
339
- },
340
- function (cb) {
341
- q.pop('c2', {
342
- timeout: 2000
343
- }, function (err, ret) {
344
- should.equal(ret, null);
345
- cb();
346
- })
347
- },
348
- function (cb) {
349
- q.size(function (err, size) {
350
- size.should.equal(0);
351
- cb();
352
- })
353
- },
354
- function (cb) {
355
- q.stats(function (err, res) {
356
- res.should.match({
357
- get: 0,
358
- put: 2,
359
- reserve: 0,
360
- commit: 0,
361
- rollback: 0,
362
- deadletter: 0
363
- });
364
- cb();
365
- })
366
- },
367
- function (cb) {
368
- q.pop('c3', {
369
- timeout: 5000
370
- }, function (err, ret) {
371
- ret.payload.should.eql({
372
- elem: 2,
373
- pl: 'twetrwte'
374
- });
375
- cb(err, ret);
376
- })
377
- },
378
- function (cb) {
379
- q.pop('c4', {
380
- timeout: 5000
381
- }, function (err, ret) {
382
- ret.payload.should.eql({
383
- elem: 1,
384
- pl: 'twetrwte'
385
- });
386
- cb(err, ret);
387
- })
388
- },
389
- function (cb) {
390
- q.size(function (err, size) {
391
- size.should.equal(0);
392
- cb();
393
- })
394
- },
395
- function (cb) {
396
- q.stats(function (err, res) {
397
- res.should.match({
398
- get: 2,
399
- put: 2,
400
- reserve: 0,
401
- commit: 0,
402
- rollback: 0,
403
- deadletter: 0
404
- });
405
- cb();
406
- })
407
- },
408
- ], function (err, results) {
409
- done();
410
- });
411
- });
412
-
413
- it('pop cancellation works as expected', function (done) {
414
- var q = factory.queue('test_queue_5');
415
-
416
- async.series([
417
- function (cb) {
418
- q.push({
419
- elem: 1,
420
- pl: 'twetrwte'
421
- }, {
422
- delay: 6
423
- }, cb)
424
- },
425
- function (cb) {
426
- q.push({
427
- elem: 2,
428
- pl: 'twetrwte'
429
- }, {
430
- delay: 5
431
- }, cb)
432
- },
433
- function (cb) {
434
- q.consumers().length.should.equal(0);
435
- cb();
436
- },
437
- function (cb) {
438
- var tid1 = q.pop('c1', {timeout: 2000}, function (err, ret) {err.should.equal('cancel')});
439
- q.consumers().length.should.equal(1);
440
- var tid2 = q.pop('c2', {timeout: 2000}, function (err, ret) {err.should.equal('cancel')});
441
- q.nConsumers().should.equal(2);
442
- q.cancel(tid1);
443
- q.nConsumers().should.equal(1);
444
- q.cancel(tid2);
445
- q.nConsumers().should.equal(0);
446
- cb();
447
- },
448
- function (cb) {
449
- q.pop('c3', {
450
- timeout: 15000
451
- }, function (err, ret) {
452
- ret.payload.should.eql({
453
- elem: 2,
454
- pl: 'twetrwte'
455
- });
456
- cb(err, ret);
457
- })
458
- },
459
- function (cb) {
460
- q.pop('c4', {
461
- timeout: 15000
462
- }, function (err, ret) {
463
- ret.payload.should.eql({
464
- elem: 1,
465
- pl: 'twetrwte'
466
- });
467
- cb(err, ret);
468
- })
469
- },
470
- function (cb) {
471
- q.size(function (err, size) {
472
- size.should.equal(0);
473
- cb();
474
- })
475
- },
476
- function (cb) {
477
- q.stats(function (err, res) {
478
- res.should.match({
479
- get: 2,
480
- put: 2,
481
- reserve: 0,
482
- commit: 0,
483
- rollback: 0,
484
- deadletter: 0
485
- });
486
- cb();
487
- })
488
- },
489
- ], function (err, results) {
490
- done();
491
- });
492
- });
493
-
494
- it('simultaneous timed out pops on delayed items go in the expected order', function (done) {
495
- var q = factory.queue('test_queue_6');
496
-
497
- var hrTime = process.hrtime()
498
-
499
- async.series([
500
- function (cb) {
501
- q.push({
502
- elem: 1,
503
- pl: 'twetrwte'
504
- }, {
505
- delay: 6
506
- }, cb)
507
- },
508
- function (cb) {
509
- q.push({
510
- elem: 2,
511
- pl: 'twetrwte'
512
- }, {
513
- delay: 5
514
- }, cb)
515
- },
516
- function (cb) {
517
- setTimeout(function () {
518
- cb()
519
- }, 150)
520
- },
521
- function (cb) {
522
- q.push({
523
- elem: 3,
524
- pl: 'twetrwte'
525
- }, {
526
- delay: 4
527
- }, cb)
528
- },
529
- function (cb) {
530
- q.consumers().length.should.equal(0);
531
- cb();
532
- },
533
- function (cb) {
534
- q.stats(function (err, res) {
535
- res.should.match({
536
- get: 0,
537
- put: 3,
538
- reserve: 0,
539
- commit: 0,
540
- rollback: 0,
541
- deadletter: 0
542
- });
543
- cb();
544
- })
545
- },
546
- function (cb) {
547
- async.parallel([
548
- function (cb) {
549
- q.pop('c1', {
550
- timeout: 12000
551
- }, function (err, ret) {
552
- cb(err, ret);
553
- })
554
- },
555
- function (cb) {
556
- var tid = q.pop('c0', {timeout: 12000}, function (err, ret) {err.should.equal('cancel')});
557
-
558
- setTimeout(function () {
559
- q.cancel(tid);
560
- cb();
561
- }, 3000)
562
- },
563
- function (cb) {
564
- q.pop('c2', {
565
- timeout: 12000
566
- }, function (err, ret) {
567
- cb(err, ret);
568
- })
569
- },
570
- function (cb) {
571
- q.pop('c3', {
572
- timeout: 12000
573
- }, function (err, ret) {
574
- cb(err, ret);
575
- })
576
- }
577
- ], cb);
578
- },
579
- function (cb) {
580
- var diff = process.hrtime(hrTime);
581
- var delta = (diff[0] * 1000 + diff[1] / 1000000)
582
- delta.should.be.approximately(6000, 500)
583
- cb();
584
- },
585
- function (cb) {
586
- q.size(function (err, size) {
587
- size.should.equal(0);
588
- cb();
589
- })
590
- },
591
- function (cb) {
592
- q.stats(function (err, res) {
593
- res.should.match({
594
- get: 3,
595
- put: 3,
596
- reserve: 0,
597
- commit: 0,
598
- rollback: 0,
599
- deadletter: 0
600
- });
601
- cb();
602
- })
603
- }
604
- ], function (err, results) {
605
- done();
606
- });
607
- });
608
-
609
- it('should do raw reserve & commit as expected', function (done) {
610
- var q = factory.queue('test_queue_7');
611
- var id = null;
612
- var obj = null;
613
-
614
- async.series([
615
- cb => q.push({elem: 1, pl: 'twetrwte'}, cb),
616
- cb => q.size((err, size) => {
617
- size.should.equal(1);
618
- cb();
619
- }),
620
- cb => q.next_t((err, res) => {
621
- res.getTime().should.be.approximately(new Date().getTime(), 500);
622
- cb();
623
- }),
624
- cb => q.reserve((err, res) => {
625
- id = res._id;
626
- obj = res;
627
- res.payload.should.eql({
628
- elem: 1,
629
- pl: 'twetrwte'
630
- });
631
- res.tries.should.equal(0);
632
- cb();
633
- }),
634
- cb => q.size((err, size) => {
635
- size.should.equal(0);
636
- cb();
637
- }),
638
- cb => q.totalSize((err, size) => {
639
- size.should.equal(1);
640
- cb();
641
- }),
642
- cb => q.next_t((err, res) => {
643
- res.getTime().should.be.approximately(new Date().getTime() + 120000, 500);
644
- cb();
645
- }),
646
- cb => q.commit(id, (err, res) => {
647
- res.should.equal(true);
648
- cb();
649
- }, obj),
650
- cb => q.size((err, size) => {
651
- size.should.equal(0);
652
- cb();
653
- }),
654
- cb => q.totalSize((err, size) => {
655
- size.should.equal(0);
656
- cb();
657
- }),
658
- cb => q.next_t((err, res) => {
659
- if (q.type () != 'mongo:intraorder') {
660
- should.equal(res, null);
661
- }
662
- cb();
663
- }),
664
- ], (err, results) => {
665
- done(err);
666
- });
667
- });
668
-
669
- it('should do raw reserve & rollback as expected', function (done) {
670
- var q = factory.queue('test_queue_8');
671
- var id = null;
672
- var obj = null;
673
-
674
- async.series([
675
- function (cb) {
676
- q.push({
677
- elem: 1,
678
- pl: 'twetrwte'
679
- }, cb)
680
- },
681
- function (cb) {
682
- q.size(function (err, size) {
683
- size.should.equal(1);
684
- cb();
685
- })
686
- },
687
- function (cb) {
688
- q.next_t(function (err, res) {
689
- res.getTime().should.be.approximately(new Date().getTime(), 500);
690
- cb();
691
- })
692
- },
693
- function (cb) {
694
- q.reserve(function (err, res) {
695
- id = res._id;
696
- obj = res;
697
- res.payload.should.eql({
698
- elem: 1,
699
- pl: 'twetrwte'
700
- });
701
- res.tries.should.equal(0);
702
- cb();
703
- })
704
- },
705
- function (cb) {
706
- q.size(function (err, size) {
707
- size.should.equal(0);
708
- cb();
709
- })
710
- },
711
- function (cb) {
712
- q.totalSize(function (err, size) {
713
- size.should.equal(1);
714
- cb();
715
- })
716
- },
717
- function (cb) {
718
- q.next_t(function (err, res) {
719
- res.getTime().should.be.approximately(new Date().getTime() + 120000, 500);
720
- cb();
721
- })
722
- },
723
- function (cb) {
724
- q.rollback(id, function (err, res) {
725
- res.should.equal(true);
726
- cb();
727
- })
728
- },
729
- function (cb) {
730
- q.size(function (err, size) {
731
- size.should.equal(1);
732
- cb();
733
- })
734
- },
735
- function (cb) {
736
- q.totalSize(function (err, size) {
737
- size.should.equal(1);
738
- cb();
739
- })
740
- },
741
- function (cb) {
742
- q.next_t(function (err, res) {
743
- res.getTime().should.be.approximately(new Date().getTime(), 500);
744
- cb();
745
- })
746
- },
747
- function (cb) {
748
- q.commit(id, function (err, res) {
749
- res.should.equal(false);
750
- cb();
751
- }, obj)
752
- },
753
- function (cb) {
754
- q.size(function (err, size) {
755
- size.should.equal(1);
756
- cb();
757
- })
758
- },
759
- function (cb) {
760
- q.totalSize(function (err, size) {
761
- size.should.equal(1);
762
- cb();
763
- })
764
- },
765
- function (cb) {
766
- q.next_t(function (err, res) {
767
- res.getTime().should.be.approximately(new Date().getTime(), 500);
768
- cb();
769
- })
770
- },
771
- function (cb) {
772
- q.get(function (err, res) {
773
- res._id.should.eql(id);
774
- res.payload.should.eql({
775
- elem: 1,
776
- pl: 'twetrwte'
777
- });
778
- res.tries.should.equal(1);
779
- cb();
780
- })
781
- },
782
- function (cb) {
783
- q.size(function (err, size) {
784
- size.should.equal(0);
785
- cb();
786
- })
787
- },
788
- function (cb) {
789
- q.totalSize(function (err, size) {
790
- size.should.equal(0);
791
- cb();
792
- })
793
- },
794
- function (cb) {
795
- q.next_t(function (err, res) {
796
- if (q.type () != 'mongo:intraorder') {
797
- should.equal(res, null);
798
- }
799
- cb();
800
- })
801
- },
802
- ], function (err, results) {
803
- done();
804
- });
805
- });
806
-
807
- it('should do get.reserve & ok as expected', function (done) {
808
- var q = factory.queue('test_queue_9');
809
- var id = null;
810
- var obj = null;
811
-
812
- async.series([
813
- function (cb) {
814
- q.push({
815
- elem: 1,
816
- pl: 'twetrwte'
817
- }, cb)
818
- },
819
- function (cb) {
820
- q.pop('c1', {
821
- reserve: true
822
- }, function (err, res) {
823
- id = res._id;
824
- obj = res;
825
- res.payload.should.eql({
826
- elem: 1,
827
- pl: 'twetrwte'
828
- });
829
- res.tries.should.equal(0);
830
- cb();
831
- })
832
- },
833
- function (cb) {
834
- q.size(function (err, size) {
835
- size.should.equal(0);
836
- cb();
837
- })
838
- },
839
- function (cb) {
840
- q.totalSize(function (err, size) {
841
- size.should.equal(1);
842
- cb();
843
- })
844
- },
845
- function (cb) {
846
- q.next_t(function (err, res) {
847
- res.getTime().should.be.approximately(new Date().getTime() + 120000, 500);
848
- cb();
849
- })
850
- },
851
- function (cb) {
852
- q.ok(obj, function (err, res) {
853
- res.should.equal(true);
854
- cb();
855
- })
856
- },
857
- function (cb) {
858
- q.size(function (err, size) {
859
- size.should.equal(0);
860
- cb();
861
- })
862
- },
863
- function (cb) {
864
- q.totalSize(function (err, size) {
865
- size.should.equal(0);
866
- cb();
867
- })
868
- },
869
- function (cb) {
870
- q.next_t(function (err, res) {
871
- if (q.type () != 'mongo:intraorder') {
872
- should.equal(res, null);
873
- }
874
- cb();
875
- })
876
- },
877
- cb => setTimeout (cb, 1000),
878
- cb => q.stats((err, res) => {
879
- res.should.match({
880
- get: 0,
881
- put: 1,
882
- reserve: 1,
883
- commit: 1,
884
- rollback: 0,
885
- deadletter: 0
886
- });
887
- cb();
888
- }),
889
- ], function (err, results) {
890
- done();
891
- });
892
- });
893
-
894
- it('should manage rollback on invalid id as expected', function (done) {
895
- var q = factory.queue('test_queue_10');
896
-
897
- if (q.type () == 'redis:oq') return done ();
898
- if (q.type () == 'mongo:intraorder') return done ();
899
-
900
- async.series([
901
- function (cb) {
902
- q.rollback('invalid-id', function (err, res) {
903
- err.should.not.be.null
904
- should(res).equal(undefined);
905
- cb();
906
- })
907
- }
908
- ], function (err, results) {
909
- done(err);
910
- });
911
- });
912
-
913
- it('should show coherent values of size, schedSize, resvSize on push, pop, reserve, commit, rollback', done => {
914
- function _get_all_sizes (q, cb) {
915
- async.parallel ([
916
- cb => q.totalSize (cb),
917
- cb => q.size (cb),
918
- cb => q.schedSize (cb),
919
- cb => q.resvSize (cb)
920
- ], cb);
921
- };
922
-
923
- if (MQ_item.label == 'Redis OrderedQueue') return done ();
924
-
925
- var q = factory.queue('test_queue_11');
926
- var state = {};
927
-
928
- async.series([
929
- cb => _get_all_sizes (q, cb),
930
- cb => q.push ({a:1, b:2}, {delay: 2}, cb),
931
- cb => q.push ({a:2, b:2}, cb),
932
- cb => q.push ({a:3, b:2}, cb),
933
- cb => _get_all_sizes (q, cb),
934
- cb => q.pop ('me', {reserve: true}, (err, res) => {
935
- if (err) return db (err);
936
- state.reserved_id = res._id;
937
- cb (null, res._id);
938
- }),
939
- cb => _get_all_sizes (q, cb),
940
- cb => q.ko (state.reserved_id, cb),
941
- cb => _get_all_sizes (q, cb),
942
- cb => q.pop ('me', {reserve: true}, (err, res) => {
943
- if (err) return db (err);
944
- state.reserved_id = res._id;
945
- state.reserved_obj = res;
946
- cb (null, res._id);
947
- }),
948
- cb => _get_all_sizes (q, cb),
949
- cb => q.ok (state.reserved_id, cb, state.reserved_obj),
950
- cb => _get_all_sizes (q, cb),
951
- cb => q.pop ('me', cb),
952
- cb => q.pop ('me', cb),
953
- cb => _get_all_sizes (q, cb),
954
- ], (err, res) => {
955
- if (err) return done (err);
956
- var figs = res.filter (i => _.isArray (i));
957
- figs.should.eql ([
958
- [ 0, 0, 0, 0 ],
959
- [ 3, 2, 1, 0 ],
960
- [ 3, 1, 1, 1 ],
961
- [ 3, 2, 1, 0 ],
962
- [ 3, 1, 1, 1 ],
963
- [ 2, 1, 1, 0 ],
964
- [ 0, 0, 0, 0 ] ]);
965
-
966
- done ();
967
- });
968
- });
969
-
970
- it('should manage rollback on unknown id as expected', function (done) {
971
- var q = factory.queue('test_queue_12');
972
-
973
- async.series([
974
- function (cb) {
975
- q.rollback('112233445566778899001122', function (err, res) {
976
- should(err).equal(null)
977
- should(res).equal(false);
978
- cb();
979
- })
980
- }
981
- ], function (err, results) {
982
- done(err);
983
- });
984
- });
985
-
986
-
987
- it('should rollback ok using full object', done => {
988
- var q = factory.queue('test_queue_13');
989
- var state = {};
990
-
991
- async.series([
992
- cb => q.push ({a:1, b:2}, {delay: 2}, cb),
993
- cb => q.pop ('me', {reserve: true}, (err, res) => {
994
- if (err) return db (err);
995
- state.reserved_obj = res;
996
- res.payload.should.eql ({a:1, b:2});
997
- res.tries.should.equal (0);
998
- cb (null, res);
999
- }),
1000
- cb => q.ko (state.reserved_obj, cb),
1001
- cb => q.pop ('me', {reserve: true}, (err, res) => {
1002
- if (err) return db (err);
1003
- state.reserved_obj = res;
1004
- res.payload.should.eql ({a:1, b:2});
1005
- res.tries.should.equal (1);
1006
- cb (null, res);
1007
- }),
1008
- cb => q.ko (state.reserved_obj, cb),
1009
- cb => q.pop ('me', {reserve: true}, (err, res) => {
1010
- if (err) return db (err);
1011
- state.reserved_obj = res;
1012
- res.payload.should.eql ({a:1, b:2});
1013
- res.tries.should.equal (2);
1014
- cb (null, res);
1015
- }),
1016
- cb => q.ok (state.reserved_obj, cb),
1017
- cb => setTimeout (cb, 1000),
1018
- cb => q.stats((err, res) => {
1019
- res.should.match({
1020
- get: 0,
1021
- put: 1,
1022
- reserve: 3,
1023
- commit: 1,
1024
- rollback: 2,
1025
- deadletter: 0
1026
- });
1027
- cb();
1028
- }),
1029
- ], done);
1030
- });
1031
-
1032
- });
1033
- });