keuss 1.7.4 → 2.0.1
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/Pipeline/Queue.js +0 -1
- package/QFactory.js +49 -17
- package/Queue.js +1 -4
- package/README.md +2 -1
- package/TODO +0 -9
- package/backends/bucket-mongo-safe.js +11 -11
- package/backends/intraorder.js +13 -11
- package/backends/mongo.js +12 -9
- package/backends/pl-mongo.js +8 -5
- package/backends/postgres.js +380 -0
- package/backends/ps-mongo.js +11 -8
- package/backends/redis-list.js +8 -8
- package/backends/redis-oq.js +8 -3
- package/backends/stream-mongo.js +10 -15
- package/package.json +12 -8
- package/stats/mem.js +0 -1
- package/.github/workflows/codeql-analysis.yml +0 -72
- package/bench/all-mongo.js +0 -108
- package/bench/multi-q.js +0 -85
- package/bench/redis-oq-consumer-producer.js +0 -52
- package/bench/redis-oq-consumer.js +0 -40
- package/bench/redis-oq-producer.js +0 -43
- package/docker-compose/docker-compose.yaml +0 -18
- package/docker-compose.yaml +0 -18
- package/examples/pipelines/builder/index.js +0 -99
- package/examples/pipelines/fromRecipe/index.js +0 -127
- package/examples/pipelines/simplest/index.js +0 -38
- package/examples/pipelines/simulation-fork/index.js +0 -115
- package/examples/snippets/01-simplest-pop-push.js +0 -49
- package/examples/snippets/02-simplest-reserve-rollback-commit.js +0 -44
- package/examples/snippets/03-simplest-producer-consumer-loops.js +0 -77
- package/examples/snippets/04-bucket-mongo-safe-insert-reserve-commit.js +0 -78
- package/examples/snippets/05-insert-reserve-rollback-deadletter.js +0 -105
- package/examples/snippets/06-random-consumer-producer.js +0 -270
- package/examples/snippets/07-stream-simple.js +0 -53
- package/examples/snippets/redislabs-consumer-producer.js +0 -44
- package/examples/snippets/with-redis-stats-and-signaller-consumer-producer.js +0 -52
- package/examples/webhooks/README.md +0 -36
- package/examples/webhooks/app.js +0 -70
- package/examples/webhooks/consumer.js +0 -98
- package/examples/webhooks/index.js +0 -55
- package/examples/webhooks/package-lock.json +0 -500
- package/examples/webhooks/package.json +0 -23
- package/examples/webhooks/wh-payload.json +0 -38
- package/playground/irc.js +0 -53
- package/playground/pl-rollback.js +0 -55
- package/playground/pl1.js +0 -74
- package/playground/q1.js +0 -34
- package/playground/simple-pl.js +0 -42
- package/playground/stream-loops.js +0 -114
- package/test/backends_bucket-at-least-once.js +0 -302
- package/test/backends_deadletter.js +0 -227
- package/test/backends_payload.js +0 -542
- package/test/backends_push-pop.js +0 -170
- package/test/backends_remove.js +0 -320
- package/test/backends_reserve-commit-rollback.js +0 -1033
- package/test/intraorder.js +0 -325
- package/test/pause.js +0 -220
- package/test/pipeline-Builder.js +0 -285
- package/test/pipeline-ChoiceLink.js +0 -241
- package/test/pipeline-DirectLink.js +0 -376
- package/test/pipeline-Sink.js +0 -175
- package/test/signal.js +0 -196
- package/test/stats.js +0 -296
- package/test/stream-mongo.js +0 -166
|
@@ -1,376 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
var async = require ('async');
|
|
3
|
-
var should = require ('should');
|
|
4
|
-
|
|
5
|
-
var LocalSignal = require ('../signal/local');
|
|
6
|
-
var MemStats = require ('../stats/mem');
|
|
7
|
-
|
|
8
|
-
var PDL = require ('../Pipeline/DirectLink');
|
|
9
|
-
|
|
10
|
-
const MongoClient = require ('mongodb').MongoClient;
|
|
11
|
-
|
|
12
|
-
var factory = null;
|
|
13
|
-
|
|
14
|
-
[
|
|
15
|
-
{label: 'Pipelined MongoDB', mq: require ('../backends/pl-mongo')}
|
|
16
|
-
].forEach (function (MQ_item) {
|
|
17
|
-
describe ('Pipeline/DirectLink operations over ' + MQ_item.label, function () {
|
|
18
|
-
var MQ = MQ_item.mq;
|
|
19
|
-
|
|
20
|
-
before (done => {
|
|
21
|
-
var opts = {
|
|
22
|
-
url: 'mongodb://localhost/__test_pipeline_directlink__',
|
|
23
|
-
opts: { useUnifiedTopology: true },
|
|
24
|
-
signaller: { provider: LocalSignal},
|
|
25
|
-
stats: {provider: MemStats}
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
MQ (opts, (err, fct) => {
|
|
29
|
-
if (err) return done (err);
|
|
30
|
-
factory = fct;
|
|
31
|
-
done();
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
after (done => async.series ([
|
|
36
|
-
cb => setTimeout (cb, 1000),
|
|
37
|
-
cb => factory.close (cb),
|
|
38
|
-
cb => MongoClient.connect ('mongodb://localhost/__test_pipeline_directlink__', (err, cl) => {
|
|
39
|
-
if (err) return done (err);
|
|
40
|
-
cl.db().dropDatabase (() => cl.close (cb))
|
|
41
|
-
})
|
|
42
|
-
], done));
|
|
43
|
-
|
|
44
|
-
it ('3-elem pipeline flows begin to end, no payload changes', done => {
|
|
45
|
-
var q_opts = {};
|
|
46
|
-
var q1 = factory.queue ('test_1_pl_1', q_opts);
|
|
47
|
-
var q2 = factory.queue ('test_1_pl_2', q_opts);
|
|
48
|
-
var q3 = factory.queue ('test_1_pl_3', q_opts);
|
|
49
|
-
|
|
50
|
-
// tie them up, q1 -> q2 -> q3
|
|
51
|
-
var pll1 = new PDL (q1, q2);
|
|
52
|
-
var pll2 = new PDL (q2, q3);
|
|
53
|
-
|
|
54
|
-
pll1.start ((elem, done0) => {
|
|
55
|
-
done0();
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
pll2.start ((elem, done0) => {
|
|
59
|
-
done0();
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
var pop_opts = {};
|
|
63
|
-
|
|
64
|
-
q3.pop ('c', pop_opts, (err, res) => {
|
|
65
|
-
if (err) return done (err);
|
|
66
|
-
|
|
67
|
-
pll1.stop();
|
|
68
|
-
pll2.stop();
|
|
69
|
-
|
|
70
|
-
res.payload.should.eql ({ a: 5, b: 'see it run...'});
|
|
71
|
-
res.tries.should.equal (0);
|
|
72
|
-
res._q.should.equal ('test_1_pl_3');
|
|
73
|
-
|
|
74
|
-
setTimeout (done, 250);
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
q1.push ({a:5, b:'see it run...'}, {}, () => {});
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it ('3-elem pipeline flows begin to end, full payload overwrite', done => {
|
|
81
|
-
var q_opts = {};
|
|
82
|
-
var q1 = factory.queue ('test_1_pl_1', q_opts);
|
|
83
|
-
var q2 = factory.queue ('test_1_pl_2', q_opts);
|
|
84
|
-
var q3 = factory.queue ('test_1_pl_3', q_opts);
|
|
85
|
-
|
|
86
|
-
// tie them up, q1 -> q2 -> q3
|
|
87
|
-
var pll1 = new PDL (q1, q2);
|
|
88
|
-
var pll2 = new PDL (q2, q3);
|
|
89
|
-
|
|
90
|
-
pll1.start ((elem, done0) => {
|
|
91
|
-
var pl = elem.payload;
|
|
92
|
-
pl.pll1 = 'done';
|
|
93
|
-
done0(null, {payload: pl});
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
pll2.start ((elem, done0) => {
|
|
97
|
-
var pl = elem.payload;
|
|
98
|
-
pl.pll2 = 'done';
|
|
99
|
-
done0(null, {payload: pl});
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
var pop_opts = {};
|
|
103
|
-
|
|
104
|
-
q3.pop ('c', pop_opts, (err, res) => {
|
|
105
|
-
if (err) return done (err);
|
|
106
|
-
|
|
107
|
-
pll1.stop();
|
|
108
|
-
pll2.stop();
|
|
109
|
-
|
|
110
|
-
res.payload.should.eql ({ a: 5, b: 'see it run...', pll1: 'done', pll2: 'done' });
|
|
111
|
-
res.tries.should.equal (0);
|
|
112
|
-
res._q.should.equal ('test_1_pl_3');
|
|
113
|
-
|
|
114
|
-
setTimeout (done, 250);
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
q1.push ({a:5, b:'see it run...'}, {}, () => {});
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
it ('3-elem pipeline flows begin to end, payload update', done => {
|
|
122
|
-
var q_opts = {};
|
|
123
|
-
var q1 = factory.queue ('test_1_pl_1', q_opts);
|
|
124
|
-
var q2 = factory.queue ('test_1_pl_2', q_opts);
|
|
125
|
-
var q3 = factory.queue ('test_1_pl_3', q_opts);
|
|
126
|
-
|
|
127
|
-
// tie them up, q1 -> q2 -> q3
|
|
128
|
-
var pll1 = new PDL (q1, q2);
|
|
129
|
-
var pll2 = new PDL (q2, q3);
|
|
130
|
-
|
|
131
|
-
pll1.start ((elem, done0) => {
|
|
132
|
-
done0(null, {update: {$set: {pll1: 'done'}}});
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
pll2.start ((elem, done0) => {
|
|
136
|
-
done0(null, {update: {$set: {pll2: 'done'}}});
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
var pop_opts = {};
|
|
140
|
-
|
|
141
|
-
q3.pop ('c', pop_opts, (err, res) => {
|
|
142
|
-
if (err) return done (err);
|
|
143
|
-
|
|
144
|
-
pll1.stop();
|
|
145
|
-
pll2.stop();
|
|
146
|
-
|
|
147
|
-
res.payload.should.eql ({ a: 5, b: 'see it run...', pll1: 'done', pll2: 'done' });
|
|
148
|
-
res.tries.should.equal (0);
|
|
149
|
-
res._q.should.equal ('test_1_pl_3');
|
|
150
|
-
|
|
151
|
-
setTimeout (done, 250);
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
q1.push ({a:5, b:'see it run...'}, {}, () => {});
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
it ('3-elem pipeline flows begin to end with retries and various elements', done => {
|
|
159
|
-
var q_opts = {};
|
|
160
|
-
var q1 = factory.queue ('test_2_pl_1', q_opts);
|
|
161
|
-
var q2 = factory.queue ('test_2_pl_2', q_opts);
|
|
162
|
-
var q3 = factory.queue ('test_2_pl_3', q_opts);
|
|
163
|
-
|
|
164
|
-
// intermediate state
|
|
165
|
-
var stage1_retries = 0;
|
|
166
|
-
var stage2_retries = 0;
|
|
167
|
-
|
|
168
|
-
// tie them up, q1 -> q2 -> q3
|
|
169
|
-
var pll1 = new PDL (q1, q2);
|
|
170
|
-
var pll2 = new PDL (q2, q3);
|
|
171
|
-
|
|
172
|
-
pll1.start ((elem, done0) => {
|
|
173
|
-
const pl = elem.payload;
|
|
174
|
-
if ((pl.a == 3) && (elem.tries < 3)) {
|
|
175
|
-
stage1_retries++;
|
|
176
|
-
done0 ({e: 'error, retry'});
|
|
177
|
-
}
|
|
178
|
-
else
|
|
179
|
-
done0(null, {update: {$inc: {pll1: 1}}});
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
pll2.start ((elem, done0) => {
|
|
183
|
-
const pl = elem.payload;
|
|
184
|
-
if ((pl.a == 1) && (elem.tries < 3)) {
|
|
185
|
-
stage2_retries++;
|
|
186
|
-
done0 ({e: 'error, retry'});
|
|
187
|
-
}
|
|
188
|
-
else
|
|
189
|
-
done0(null, {update: {$inc: {pll2: 1}}});
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
var pop_opts = {};
|
|
193
|
-
|
|
194
|
-
async.timesLimit (5, 1, (n, next) => {
|
|
195
|
-
q3.pop ('c', pop_opts, (err, res) => next (err, res));
|
|
196
|
-
}, (err, res) => {
|
|
197
|
-
stage1_retries.should.equal (3);
|
|
198
|
-
stage2_retries.should.equal (3);
|
|
199
|
-
|
|
200
|
-
res[0].payload.should.eql ({ a: 0, b: 'see it run...', pll1: 1, pll2: 1 });
|
|
201
|
-
res[0].tries.should.equal (0);
|
|
202
|
-
res[0]._q.should.equal ('test_2_pl_3');
|
|
203
|
-
|
|
204
|
-
res[1].payload.should.eql ({ a: 2, b: 'see it run...', pll1: 1, pll2: 1 });
|
|
205
|
-
res[1].tries.should.equal (0);
|
|
206
|
-
res[1]._q.should.equal ('test_2_pl_3');
|
|
207
|
-
|
|
208
|
-
res[2].payload.should.eql ({ a: 4, b: 'see it run...', pll1: 1, pll2: 1 });
|
|
209
|
-
res[2].tries.should.equal (0);
|
|
210
|
-
res[2]._q.should.equal ('test_2_pl_3');
|
|
211
|
-
|
|
212
|
-
res[3].payload.should.eql ({ a: 1, b: 'see it run...', pll1: 1, pll2: 1 });
|
|
213
|
-
res[3].tries.should.equal (0);
|
|
214
|
-
res[3]._q.should.equal ('test_2_pl_3');
|
|
215
|
-
|
|
216
|
-
res[4].payload.should.eql ({ a: 3, b: 'see it run...', pll1: 1, pll2: 1 });
|
|
217
|
-
res[4].tries.should.equal (0);
|
|
218
|
-
res[4]._q.should.equal ('test_2_pl_3');
|
|
219
|
-
|
|
220
|
-
pll1.stop();
|
|
221
|
-
pll2.stop ();
|
|
222
|
-
|
|
223
|
-
setTimeout (done, 250);
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
async.timesLimit (5, 1, (n, next) =>
|
|
227
|
-
q1.push ({a:n, b:'see it run...', pll1: 0, pll2: 0}, {}, () => setTimeout (next, 200))
|
|
228
|
-
);
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
it ('3-elem pipeline flows begin to end, sink at the end using res==false', done => {
|
|
232
|
-
var q_opts = {};
|
|
233
|
-
var q1 = factory.queue ('test_1_pl_1', q_opts);
|
|
234
|
-
var q2 = factory.queue ('test_1_pl_2', q_opts);
|
|
235
|
-
var q3 = factory.queue ('test_1_pl_3', q_opts);
|
|
236
|
-
|
|
237
|
-
// tie them up, q1 -> q2 -> q3
|
|
238
|
-
var pll1 = new PDL (q1, q2);
|
|
239
|
-
var pll2 = new PDL (q2, q3);
|
|
240
|
-
|
|
241
|
-
pll1.start ((elem, done0) => {
|
|
242
|
-
elem.should.match ({
|
|
243
|
-
payload: { a: 5, b: 'see it run...' },
|
|
244
|
-
tries: 0,
|
|
245
|
-
_q: 'test_1_pl_1'
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
done0();
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
pll2.start ((elem, done0) => {
|
|
252
|
-
elem.should.match ({
|
|
253
|
-
payload: { a: 5, b: 'see it run...' },
|
|
254
|
-
tries: 0,
|
|
255
|
-
_q: 'test_1_pl_2'
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
done0(null, false);
|
|
259
|
-
|
|
260
|
-
setTimeout (() => {
|
|
261
|
-
pll1.stop();
|
|
262
|
-
pll2.stop();
|
|
263
|
-
|
|
264
|
-
async.series ([
|
|
265
|
-
cb => q1.totalSize(cb),
|
|
266
|
-
cb => q2.totalSize(cb),
|
|
267
|
-
cb => q3.totalSize(cb)
|
|
268
|
-
], (err, res) => {
|
|
269
|
-
if (err) return done (err);
|
|
270
|
-
res.should.eql ([0,0,0]);
|
|
271
|
-
setTimeout (done, 250);
|
|
272
|
-
});
|
|
273
|
-
}, 500);
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
q1.push ({a:5, b:'see it run...'}, {}, () => {});
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
it ('3-elem pipeline flows begin to end, sink at the end using res.drop == true', done => {
|
|
280
|
-
var q_opts = {};
|
|
281
|
-
var q1 = factory.queue ('test_1_pl_1', q_opts);
|
|
282
|
-
var q2 = factory.queue ('test_1_pl_2', q_opts);
|
|
283
|
-
var q3 = factory.queue ('test_1_pl_3', q_opts);
|
|
284
|
-
|
|
285
|
-
// tie them up, q1 -> q2 -> q3
|
|
286
|
-
var pll1 = new PDL (q1, q2);
|
|
287
|
-
var pll2 = new PDL (q2, q3);
|
|
288
|
-
|
|
289
|
-
pll1.start ((elem, done0) => {
|
|
290
|
-
elem.should.match ({
|
|
291
|
-
payload: { a: 5, b: 'see it run...' },
|
|
292
|
-
tries: 0,
|
|
293
|
-
_q: 'test_1_pl_1'
|
|
294
|
-
});
|
|
295
|
-
|
|
296
|
-
done0();
|
|
297
|
-
});
|
|
298
|
-
|
|
299
|
-
pll2.start ((elem, done0) => {
|
|
300
|
-
elem.should.match ({
|
|
301
|
-
payload: { a: 5, b: 'see it run...' },
|
|
302
|
-
tries: 0,
|
|
303
|
-
_q: 'test_1_pl_2'
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
done0(null, {drop: true});
|
|
307
|
-
|
|
308
|
-
setTimeout (() => {
|
|
309
|
-
pll1.stop();
|
|
310
|
-
pll2.stop();
|
|
311
|
-
|
|
312
|
-
async.series ([
|
|
313
|
-
cb => q1.totalSize(cb),
|
|
314
|
-
cb => q2.totalSize(cb),
|
|
315
|
-
cb => q3.totalSize(cb)
|
|
316
|
-
], (err, res) => {
|
|
317
|
-
if (err) return done (err);
|
|
318
|
-
res.should.eql ([0,0,0]);
|
|
319
|
-
setTimeout (done, 250);
|
|
320
|
-
});
|
|
321
|
-
}, 500);
|
|
322
|
-
});
|
|
323
|
-
|
|
324
|
-
q1.push ({a:5, b:'see it run...'}, {}, () => {});
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
it ('3-elem pipeline flows begin to end, sink at the end using err.drop == true', done => {
|
|
328
|
-
var q_opts = {};
|
|
329
|
-
var q1 = factory.queue ('test_1_pl_1', q_opts);
|
|
330
|
-
var q2 = factory.queue ('test_1_pl_2', q_opts);
|
|
331
|
-
var q3 = factory.queue ('test_1_pl_3', q_opts);
|
|
332
|
-
|
|
333
|
-
// tie them up, q1 -> q2 -> q3
|
|
334
|
-
var pll1 = new PDL (q1, q2);
|
|
335
|
-
var pll2 = new PDL (q2, q3);
|
|
336
|
-
|
|
337
|
-
pll1.start ((elem, done0) => {
|
|
338
|
-
elem.should.match ({
|
|
339
|
-
payload: { a: 5, b: 'see it run...' },
|
|
340
|
-
tries: 0,
|
|
341
|
-
_q: 'test_1_pl_1'
|
|
342
|
-
});
|
|
343
|
-
|
|
344
|
-
done0();
|
|
345
|
-
});
|
|
346
|
-
|
|
347
|
-
pll2.start ((elem, done0) => {
|
|
348
|
-
elem.should.match ({
|
|
349
|
-
payload: { a: 5, b: 'see it run...' },
|
|
350
|
-
tries: 0,
|
|
351
|
-
_q: 'test_1_pl_2'
|
|
352
|
-
});
|
|
353
|
-
|
|
354
|
-
done0({drop: true});
|
|
355
|
-
|
|
356
|
-
setTimeout (() => {
|
|
357
|
-
pll1.stop();
|
|
358
|
-
pll2.stop();
|
|
359
|
-
|
|
360
|
-
async.series ([
|
|
361
|
-
cb => q1.totalSize(cb),
|
|
362
|
-
cb => q2.totalSize(cb),
|
|
363
|
-
cb => q3.totalSize(cb)
|
|
364
|
-
], (err, res) => {
|
|
365
|
-
if (err) return done (err);
|
|
366
|
-
res.should.eql ([0,0,0]);
|
|
367
|
-
setTimeout (done, 250);
|
|
368
|
-
});
|
|
369
|
-
}, 500);
|
|
370
|
-
});
|
|
371
|
-
|
|
372
|
-
q1.push ({a:5, b:'see it run...'}, {}, () => {});
|
|
373
|
-
});
|
|
374
|
-
|
|
375
|
-
});
|
|
376
|
-
});
|
package/test/pipeline-Sink.js
DELETED
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
var async = require ('async');
|
|
3
|
-
var should = require ('should');
|
|
4
|
-
|
|
5
|
-
var LocalSignal = require ('../signal/local');
|
|
6
|
-
var MemStats = require ('../stats/mem');
|
|
7
|
-
|
|
8
|
-
var PDL = require ('../Pipeline/DirectLink');
|
|
9
|
-
var PS = require ('../Pipeline/Sink');
|
|
10
|
-
|
|
11
|
-
const MongoClient = require ('mongodb').MongoClient;
|
|
12
|
-
|
|
13
|
-
var factory = null;
|
|
14
|
-
|
|
15
|
-
[
|
|
16
|
-
{label: 'Pipelined MongoDB', mq: require ('../backends/pl-mongo')}
|
|
17
|
-
].forEach (function (MQ_item) {
|
|
18
|
-
describe ('Pipeline/Sink operations over ' + MQ_item.label, function () {
|
|
19
|
-
var MQ = MQ_item.mq;
|
|
20
|
-
|
|
21
|
-
before (done => {
|
|
22
|
-
var opts = {
|
|
23
|
-
url: 'mongodb://localhost/__test_pipeline_sink__',
|
|
24
|
-
opts: { useUnifiedTopology: true },
|
|
25
|
-
signaller: { provider: LocalSignal},
|
|
26
|
-
stats: {provider: MemStats}
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
MQ (opts, (err, fct) => {
|
|
30
|
-
if (err) return done (err);
|
|
31
|
-
factory = fct;
|
|
32
|
-
done();
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
after (done => async.series ([
|
|
37
|
-
cb => setTimeout (cb, 1000),
|
|
38
|
-
cb => factory.close (cb),
|
|
39
|
-
cb => MongoClient.connect ('mongodb://localhost/__test_pipeline_sink__', (err, cl) => {
|
|
40
|
-
if (err) return done (err);
|
|
41
|
-
cl.db().dropDatabase (() => cl.close (cb))
|
|
42
|
-
})
|
|
43
|
-
], done));
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
it ('3-elem pipeline flows begin to end, sink at the end', done => {
|
|
47
|
-
var q_opts = {};
|
|
48
|
-
var q1 = factory.queue ('test_1_pl_1', q_opts);
|
|
49
|
-
var q2 = factory.queue ('test_1_pl_2', q_opts);
|
|
50
|
-
var q3 = factory.queue ('test_1_pl_3', q_opts);
|
|
51
|
-
|
|
52
|
-
// tie them up, q1 -> q2 -> q3 -> sink
|
|
53
|
-
var pll1 = new PDL (q1, q2);
|
|
54
|
-
var pll2 = new PDL (q2, q3);
|
|
55
|
-
var snk1 = new PS (q3);
|
|
56
|
-
|
|
57
|
-
pll1.start ((elem, done0) => {
|
|
58
|
-
elem.should.match ({
|
|
59
|
-
payload: { a: 5, b: 'see it run...' },
|
|
60
|
-
tries: 0,
|
|
61
|
-
_q: 'test_1_pl_1'
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
done0();
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
pll2.start ((elem, done0) => {
|
|
68
|
-
elem.should.match ({
|
|
69
|
-
payload: { a: 5, b: 'see it run...' },
|
|
70
|
-
tries: 0,
|
|
71
|
-
_q: 'test_1_pl_2'
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
done0();
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
snk1.start ((elem, done0) => {
|
|
78
|
-
elem.should.match ({
|
|
79
|
-
payload: { a: 5, b: 'see it run...' },
|
|
80
|
-
tries: 0,
|
|
81
|
-
_q: 'test_1_pl_3'
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
done0();
|
|
85
|
-
|
|
86
|
-
setTimeout (() => {
|
|
87
|
-
pll1.stop();
|
|
88
|
-
pll2.stop();
|
|
89
|
-
snk1.stop();
|
|
90
|
-
|
|
91
|
-
async.series ([
|
|
92
|
-
cb => q1.totalSize(cb),
|
|
93
|
-
cb => q2.totalSize(cb),
|
|
94
|
-
cb => q3.totalSize(cb)
|
|
95
|
-
], (err, res) => {
|
|
96
|
-
if (err) return done (err);
|
|
97
|
-
res.should.eql ([0,0,0]);
|
|
98
|
-
done ();
|
|
99
|
-
});
|
|
100
|
-
}, 500);
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
q1.push ({a:5, b:'see it run...'}, {}, () => {});
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
it ('3-elem pipeline flows begin to end, sink at the end, with sink retries', done => {
|
|
108
|
-
var q_opts = {};
|
|
109
|
-
var q1 = factory.queue ('test_1_pl_1', q_opts);
|
|
110
|
-
var q2 = factory.queue ('test_1_pl_2', q_opts);
|
|
111
|
-
var q3 = factory.queue ('test_1_pl_3', q_opts);
|
|
112
|
-
|
|
113
|
-
// tie them up, q1 -> q2 -> q3 -> sink
|
|
114
|
-
var pll1 = new PDL (q1, q2);
|
|
115
|
-
var pll2 = new PDL (q2, q3);
|
|
116
|
-
var snk1 = new PS (q3);
|
|
117
|
-
|
|
118
|
-
var try_count = 0;
|
|
119
|
-
|
|
120
|
-
pll1.start ((elem, done0) => {
|
|
121
|
-
elem.should.match ({
|
|
122
|
-
payload: { a: 5, b: 'see it run...' },
|
|
123
|
-
tries: 0,
|
|
124
|
-
_q: 'test_1_pl_1'
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
done0();
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
pll2.start ((elem, done0) => {
|
|
131
|
-
elem.should.match ({
|
|
132
|
-
payload: { a: 5, b: 'see it run...' },
|
|
133
|
-
tries: 0,
|
|
134
|
-
_q: 'test_1_pl_2'
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
done0();
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
snk1.start ((elem, done0) => {
|
|
141
|
-
if (try_count < 2) {
|
|
142
|
-
try_count++;
|
|
143
|
-
return done0 ({e: 'error, retry'});
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
elem.should.match ({
|
|
147
|
-
payload: { a: 5, b: 'see it run...' },
|
|
148
|
-
tries: 2,
|
|
149
|
-
_q: 'test_1_pl_3'
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
done0();
|
|
153
|
-
|
|
154
|
-
setTimeout (() => {
|
|
155
|
-
pll1.stop();
|
|
156
|
-
pll2.stop();
|
|
157
|
-
snk1.stop();
|
|
158
|
-
|
|
159
|
-
async.series ([
|
|
160
|
-
cb => q1.totalSize(cb),
|
|
161
|
-
cb => q2.totalSize(cb),
|
|
162
|
-
cb => q3.totalSize(cb)
|
|
163
|
-
], (err, res) => {
|
|
164
|
-
if (err) return done (err);
|
|
165
|
-
res.should.eql ([0,0,0]);
|
|
166
|
-
done ();
|
|
167
|
-
});
|
|
168
|
-
}, 500);
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
q1.push ({a:5, b:'see it run...'}, {}, () => {});
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
});
|
|
175
|
-
});
|