node-red-contrib-join-wait 0.5.2 → 0.6.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.
package/test/test_spec.js DELETED
@@ -1,1411 +0,0 @@
1
- // var should = require('should');
2
- var os = require('os');
3
- var path = require('path');
4
- var helper = require('node-red-node-test-helper');
5
- helper.init(require.resolve('node-red'), { userDir: os.tmpdir() });
6
-
7
- var flows = require('./flows');
8
- var joinWaitNode = require('../join-wait.js');
9
-
10
- describe('wait paths node', function () {
11
- before(function (done) {
12
- helper.startServer(done);
13
- });
14
-
15
- after(function (done) {
16
- helper.stopServer(done);
17
- });
18
-
19
- afterEach(function () {
20
- helper.unload();
21
- });
22
-
23
- it('should be loaded', function (done) {
24
- var flow = [{ id: 'n1', type: 'join-wait', name: 'join-wait' }];
25
- helper.load(joinWaitNode, flow, function () {
26
- var n1 = helper.getNode('n1');
27
- n1.should.have.property('name', 'join-wait');
28
- var logEvents = helper.log().args.filter(function (evt) {
29
- return evt[0].type == 'join-wait';
30
- });
31
- logEvents.should.have.length(0);
32
- done();
33
- });
34
- });
35
-
36
- it('should handle any order flow', function (done) {
37
- var flow = flows.getDefault();
38
-
39
- helper.load(joinWaitNode, flow, function () {
40
- var n1 = helper.getNode('n1');
41
- var n2 = helper.getNode('n2');
42
- var n3 = helper.getNode('n3');
43
- n3.on('input', function (msg) {
44
- done(msg);
45
- });
46
- n2.on('input', function (msg) {
47
- msg.should.have.property('payload', 'payload1');
48
- msg.should.have.property('paths').eql({ path_1: 'payload1', path_2: 'payload2', path_3: 'payload3' });
49
- var logEvents = helper.log().args.filter(function (evt) {
50
- return evt[0].type == 'join-wait';
51
- });
52
- logEvents.should.have.length(0);
53
-
54
- done();
55
- });
56
- n1.receive({ paths: 'path_1', payload: 'payload1' });
57
- n1.receive({ paths: 'path_3', payload: 'payload3' });
58
- n1.receive({ paths: 'path_2', payload: 'payload2' });
59
- });
60
- });
61
-
62
- it('should handle any order flow - jsonata', function (done) {
63
- var opts = { correlationTopic: 'paths', correlationTopicType: 'jsonata' };
64
- var flow = flows.getDefault(opts);
65
-
66
- helper.load(joinWaitNode, flow, function () {
67
- var n1 = helper.getNode('n1');
68
- var n2 = helper.getNode('n2');
69
- var n3 = helper.getNode('n3');
70
- n3.on('input', function (msg) {
71
- done(msg);
72
- });
73
- n2.on('input', function (msg) {
74
- msg.should.have.property('payload', 'payload1');
75
- msg.should.have.property('paths').eql({ path_1: 'payload1', path_2: 'payload2', path_3: 'payload3' });
76
- var logEvents = helper.log().args.filter(function (evt) {
77
- return evt[0].type == 'join-wait';
78
- });
79
- logEvents.should.have.length(0);
80
-
81
- done();
82
- });
83
- n1.receive({ paths: 'path_1', payload: 'payload1' });
84
- n1.receive({ paths: 'path_3', payload: 'payload3' });
85
- n1.receive({ paths: 'path_2', payload: 'payload2' });
86
- });
87
- });
88
-
89
- it('should handle any order flow (with expired)', function (done) {
90
- var opts = { paths: '["path_1", "path_1", "path_2", "path_2"]' };
91
- var flow = flows.getDefault(opts);
92
-
93
- helper.load(joinWaitNode, flow, function () {
94
- var n1 = helper.getNode('n1');
95
- var n2 = helper.getNode('n2');
96
- var n3 = helper.getNode('n3');
97
- n3.on('input', function (msg) {
98
- msg.should.have.property('payload', 'payload1');
99
- msg.should.have.property('paths').eql({ path_1: 'payload1' });
100
- done();
101
- });
102
- n2.on('input', function (msg) {
103
- done(msg);
104
- });
105
- n1.receive({ paths: 'path_1', payload: 'payload1' });
106
- n1.receive({ paths: 'path_1', payload: 'payload1' });
107
- n1.receive({ paths: 'path_1', payload: 'payload1' });
108
- });
109
- });
110
-
111
- it('should handle any order flow (with expired #2)', function (done) {
112
- var opts = { paths: '["path_1", "path_1", "path_2", "path_2", "path_3"]' };
113
- var flow = flows.getDefault(opts);
114
-
115
- helper.load(joinWaitNode, flow, function () {
116
- var n1 = helper.getNode('n1');
117
- var n2 = helper.getNode('n2');
118
- var n3 = helper.getNode('n3');
119
- n3.on('input', function (msg) {
120
- done(msg);
121
- });
122
- n2.on('input', function (msg) {
123
- msg.should.have.property('payload', 'payload3');
124
- msg.should.have.property('paths').eql({ path_1: 'payload1', path_2: 'payload2', path_3: 'payload3' });
125
- var logEvents = helper.log().args.filter(function (evt) {
126
- return evt[0].type == 'join-wait';
127
- });
128
- logEvents.should.have.length(0);
129
- done();
130
- });
131
- n1.receive({ paths: 'path_3', payload: 'payload3' });
132
- n1.receive({ paths: 'path_2', payload: 'payload2' });
133
- n1.receive({ paths: 'path_1', payload: 'payload1' });
134
- n1.receive({ paths: 'path_2', payload: 'payload2' });
135
- n1.receive({ paths: 'path_2', payload: 'payload2' });
136
- n1.receive({ paths: 'path_1', payload: 'payload1' });
137
- });
138
- });
139
-
140
- it('should handle any order flow (with expired #3)', function (done) {
141
- var opts = { paths: '["path_1", "path_1", "path_2", "path_2", "path_3"]' };
142
- var flow = flows.getDefault(opts);
143
-
144
- helper.load(joinWaitNode, flow, function () {
145
- var n1 = helper.getNode('n1');
146
- var n2 = helper.getNode('n2');
147
- var n3 = helper.getNode('n3');
148
-
149
- var counter = 0;
150
-
151
- n3.on('input', function () {
152
- counter++;
153
- });
154
- n2.on('input', function (msg) {
155
- counter.should.be.eql(1);
156
- msg.should.have.property('payload', 'payload1');
157
- msg.should.have.property('paths').eql({ path_1: 'payload1', path_2: 'payload2', path_3: 'payload3' });
158
- var logEvents = helper.log().args.filter(function (evt) {
159
- return evt[0].type == 'join-wait';
160
- });
161
- logEvents.should.have.length(0);
162
- done();
163
- });
164
- n1.receive({ paths: 'path_1', payload: 'payload1' });
165
- n1.receive({ paths: 'path_1', payload: 'payload1' });
166
- n1.receive({ paths: { path_1: 'payload1', path_2: 'payload2' }, payload: 'payload1' });
167
- n1.receive({ paths: 'path_2', payload: 'payload2' });
168
- n1.receive({ paths: 'path_2', payload: 'payload2' });
169
- n1.receive({ paths: 'path_2', payload: 'payload2' });
170
- n1.receive({ paths: 'path_2', payload: 'payload2' });
171
- n1.receive({ paths: 'path_2', payload: 'payload2' });
172
- n1.receive({ paths: 'path_3', payload: 'payload3' });
173
- });
174
- });
175
-
176
- it('should handle any order flow - 2 correlation topics', function (done) {
177
- var opts = { correlationTopic: 'group', correlationTopicType: 'msg' };
178
- var flow = flows.getDefault(opts);
179
-
180
- helper.load(joinWaitNode, flow, function () {
181
- var n1 = helper.getNode('n1');
182
- var n2 = helper.getNode('n2');
183
- var n3 = helper.getNode('n3');
184
-
185
- var counter = 0;
186
- n3.on('input', function (msg) {
187
- done(msg);
188
- });
189
- n2.on('input', function (msg) {
190
- counter++;
191
- msg.should.have.property('payload', 'payload1');
192
- msg.should.have.property('paths').eql({ path_1: 'payload1', path_2: 'payload2', path_3: 'payload3' });
193
- var logEvents = helper.log().args.filter(function (evt) {
194
- return evt[0].type == 'join-wait';
195
- });
196
- logEvents.should.have.length(0);
197
-
198
- if (msg.group === '2') {
199
- counter.should.be.eql(2);
200
- done();
201
- }
202
- });
203
- n1.receive({ group: '1', paths: 'path_1', payload: 'payload1' });
204
- n1.receive({ group: '2', paths: 'path_1', payload: 'payload1' });
205
- n1.receive({ group: '1', paths: 'path_3', payload: 'payload3' });
206
- n1.receive({ group: '2', paths: 'path_3', payload: 'payload3' });
207
- n1.receive({ group: '1', paths: 'path_2', payload: 'payload2' });
208
- n1.receive({ group: '2', paths: 'path_2', payload: 'payload2' });
209
- });
210
- });
211
-
212
- it('should handle exact order flow', function (done) {
213
- var opts = { exactOrder: 'true' };
214
- var flow = flows.getDefault(opts);
215
-
216
- helper.load(joinWaitNode, flow, function () {
217
- var n1 = helper.getNode('n1');
218
- var n2 = helper.getNode('n2');
219
- var n3 = helper.getNode('n3');
220
- n3.on('input', function (msg) {
221
- done(msg);
222
- });
223
- n2.on('input', function (msg) {
224
- msg.should.have.property('payload', 'payload1');
225
- msg.should.have.property('paths').eql({ path_1: 'payload1', path_2: 'payload2', path_3: 'payload3' });
226
- var logEvents = helper.log().args.filter(function (evt) {
227
- return evt[0].type == 'join-wait';
228
- });
229
- logEvents.should.have.length(0);
230
- done();
231
- });
232
- n1.receive({ paths: 'path_1', payload: 'payload1' });
233
- n1.receive({ paths: 'path_2', payload: 'payload2' });
234
- n1.receive({ paths: 'path_3', payload: 'payload3' });
235
- });
236
- });
237
-
238
- it('should handle exact order flow - advanced', function (done) {
239
- var opts = {
240
- exactOrder: 'true',
241
- paths: '["path_1", "path_2", "path_3", "path_1", "path_2", "path_3", "path_2"]',
242
- timeout: '5',
243
- };
244
- var flow = flows.getDefault(opts);
245
-
246
- helper.load(joinWaitNode, flow, function () {
247
- var n1 = helper.getNode('n1');
248
- var n2 = helper.getNode('n2');
249
- var n3 = helper.getNode('n3');
250
- n3.on('input', function (msg) {
251
- done(msg);
252
- });
253
- n2.on('input', function (msg) {
254
- msg.should.have.property('payload', 'payload1');
255
- msg.should.have.property('paths').eql({ path_1: 'payload1', path_2: 'payload2', path_3: 'payload3' });
256
- var logEvents = helper.log().args.filter(function (evt) {
257
- return evt[0].type == 'join-wait';
258
- });
259
- logEvents.should.have.length(1);
260
-
261
- var event = logEvents[0][0];
262
- event.should.have.property('level', helper.log().WARN);
263
- event.should.have.property('id', 'n1');
264
- event.should.have.property('type', 'join-wait');
265
- event.should.have.property(
266
- 'msg',
267
- 'join-wait msg.paths["path_4"] doesn\'t exist in pathsToWait or pathsToExpire!',
268
- );
269
- done();
270
- });
271
- n1.receive({ paths: 'path_1', payload: 'payload1' });
272
- n1.receive({ paths: 'path_2', payload: 'payload2' });
273
- n1.receive({ paths: 'path_3', payload: 'payload3' });
274
- n1.receive({ paths: 'path_1', payload: 'payload1' });
275
- n1.receive({ paths: 'path_2', payload: 'payload2' });
276
- n1.receive({ paths: 'path_3', payload: 'payload3' });
277
- n1.receive({ paths: 'path_4', payload: 'payload4' });
278
- n1.receive({ paths: 'path_2', payload: 'payload2' });
279
- setTimeout(function () {
280
- n1.receive({ paths: 'path_2', payload: 'payload2' });
281
- }, 1000);
282
- });
283
- });
284
-
285
- it('should handle exact order flow - advanced (regex)', function (done) {
286
- var opts = {
287
- exactOrder: 'true',
288
- paths: '["path_1", "path_2", "path_3", "path_1", "path_2", "path_[36]", "path_[24]", "path_3"]',
289
- timeout: '5',
290
- useRegex: true,
291
- };
292
- var flow = flows.getDefault(opts);
293
-
294
- helper.load(joinWaitNode, flow, function () {
295
- var n1 = helper.getNode('n1');
296
- var n2 = helper.getNode('n2');
297
- var n3 = helper.getNode('n3');
298
- n3.on('input', function (msg) {
299
- done(msg);
300
- });
301
- n2.on('input', function (msg) {
302
- msg.should.have.property('payload', 'payload1');
303
- msg.should.have.property('paths').eql({
304
- path_1: 'payload1',
305
- path_2: 'payload2',
306
- path_3: 'payload2',
307
- path_4: 'payload2',
308
- path_5: 'payload2',
309
- });
310
- var logEvents = helper.log().args.filter(function (evt) {
311
- return evt[0].type == 'join-wait';
312
- });
313
-
314
- logEvents.should.have.length(1);
315
-
316
- var event = logEvents[0][0];
317
- event.should.have.property('level', helper.log().WARN);
318
- event.should.have.property('id', 'n1');
319
- event.should.have.property('type', 'join-wait');
320
- event.should.have.property(
321
- 'msg',
322
- 'join-wait msg.paths["path_5"] doesn\'t exist in pathsToWait or pathsToExpire!',
323
- );
324
- done();
325
- });
326
- n1.receive({ paths: 'path_1', payload: 'payload1' });
327
- n1.receive({ paths: 'path_2', payload: 'payload2' });
328
- n1.receive({ paths: 'path_3', payload: 'payload3' });
329
- n1.receive({ paths: 'path_1', payload: 'payload1' });
330
- n1.receive({ paths: 'path_2', payload: 'payload2' });
331
- n1.receive({ paths: 'path_3', payload: 'payload3' });
332
- n1.receive({ paths: { path_5: 'payload5', path_4: 'payload2', path_3: 'payload3' }, payload: 'payload2' });
333
- setTimeout(function () {
334
- n1.receive({ paths: 'path_2', payload: 'payload2' });
335
- }, 1000);
336
- });
337
- });
338
-
339
- it('should handle exact order flow (different pathTopic)', function (done) {
340
- var opts = { exactOrder: 'true', pathTopic: 'topic' };
341
- var flow = flows.getDefault(opts);
342
-
343
- helper.load(joinWaitNode, flow, function () {
344
- var n1 = helper.getNode('n1');
345
- var n2 = helper.getNode('n2');
346
- var n3 = helper.getNode('n3');
347
- n3.on('input', function (msg) {
348
- done(msg);
349
- });
350
- n2.on('input', function (msg) {
351
- msg.should.have.property('payload', 'payload1');
352
- msg.should.have.property('topic').eql({ path_1: 'payload1', path_2: 'payload2', path_3: 'payload3' });
353
- var logEvents = helper.log().args.filter(function (evt) {
354
- return evt[0].type == 'join-wait';
355
- });
356
- logEvents.should.have.length(0);
357
- done();
358
- });
359
- n1.receive({ topic: 'path_1', payload: 'payload1' });
360
- n1.receive({ topic: 'path_2', payload: 'payload2' });
361
- n1.receive({ topic: 'path_3', payload: 'payload3' });
362
- });
363
- });
364
-
365
- it('should fail exact order flow with duplicates', function (done) {
366
- var opts = { exactOrder: 'true' };
367
- var flow = flows.getDefault(opts);
368
-
369
- helper.load(joinWaitNode, flow, function () {
370
- var n1 = helper.getNode('n1');
371
- var n2 = helper.getNode('n2');
372
- var n3 = helper.getNode('n3');
373
- var counter = 0;
374
-
375
- n3.on('input', function () {
376
- counter++;
377
- });
378
- n2.on('input', function (msg) {
379
- counter.should.be.eql(3);
380
- msg.should.have.property('payload', 'payload1');
381
- msg.should.have.property('paths').eql({ path_1: 'payload1', path_2: 'payload2', path_3: 'payload3' });
382
- var logEvents = helper.log().args.filter(function (evt) {
383
- return evt[0].type == 'join-wait';
384
- });
385
- logEvents.should.have.length(0);
386
- done();
387
- });
388
- n1.receive({ paths: 'path_1', payload: 'payload1' });
389
- n1.receive({ paths: 'path_2', payload: 'payload2' });
390
- n1.receive({ paths: 'path_2', payload: 'payload2' });
391
- n1.receive({ paths: 'path_1', payload: 'payload1' });
392
- n1.receive({ paths: 'path_2', payload: 'payload2' });
393
- n1.receive({ paths: 'path_3', payload: 'payload3' });
394
- });
395
- });
396
-
397
- it('should fail exact order flow with duplicates (regex)', function (done) {
398
- var opts = { exactOrder: 'true', useRegex: true };
399
- var flow = flows.getDefault(opts);
400
-
401
- helper.load(joinWaitNode, flow, function () {
402
- var n1 = helper.getNode('n1');
403
- var n2 = helper.getNode('n2');
404
- var n3 = helper.getNode('n3');
405
- var counter = 0;
406
-
407
- n3.on('input', function () {
408
- counter++;
409
- });
410
- n2.on('input', function (msg) {
411
- counter.should.be.eql(3);
412
- msg.should.have.property('payload', 'payload1');
413
- msg.should.have.property('paths').eql({ path_1: 'payload1', path_2: 'payload2', path_3: 'payload3' });
414
- var logEvents = helper.log().args.filter(function (evt) {
415
- return evt[0].type == 'join-wait';
416
- });
417
- logEvents.should.have.length(0);
418
- done();
419
- });
420
- n1.receive({ paths: 'path_1', payload: 'payload1' });
421
- n1.receive({ paths: 'path_2', payload: 'payload2' });
422
- n1.receive({ paths: 'path_2', payload: 'payload2' });
423
- n1.receive({ paths: 'path_1', payload: 'payload1' });
424
- n1.receive({ paths: 'path_2', payload: 'payload2' });
425
- n1.receive({ paths: 'path_3', payload: 'payload3' });
426
- });
427
- });
428
-
429
- it('should fail non-exact order flow', function (done) {
430
- var opts = { exactOrder: 'true' };
431
- var flow = flows.getDefault(opts);
432
-
433
- helper.load(joinWaitNode, flow, function () {
434
- var n1 = helper.getNode('n1');
435
- var n2 = helper.getNode('n2');
436
- var n3 = helper.getNode('n3');
437
- var counter = 0;
438
-
439
- n3.on('input', function () {
440
- counter++;
441
-
442
- if (counter === 3) {
443
- var logEvents = helper.log().args.filter(function (evt) {
444
- return evt[0].type == 'join-wait';
445
- });
446
- logEvents.should.have.length(0);
447
- done();
448
- }
449
- });
450
- n2.on('input', function (msg) {
451
- done(msg);
452
- });
453
- n1.receive({ paths: 'path_1', payload: 'payload1' });
454
- n1.receive({ paths: 'path_3', payload: 'payload3' });
455
- n1.receive({ paths: 'path_2', payload: 'payload2' });
456
- });
457
- });
458
-
459
- it('should handle any order flow (regex), 1 expired', function (done) {
460
- var opts = { paths: '["path_[12]", "path_3"]', useRegex: true };
461
- var flow = flows.getDefault(opts);
462
-
463
- helper.load(joinWaitNode, flow, function () {
464
- var n1 = helper.getNode('n1');
465
- var n2 = helper.getNode('n2');
466
- var n3 = helper.getNode('n3');
467
-
468
- var counter = 0;
469
- n3.on('input', function (msg) {
470
- counter.should.be.eql(1);
471
- msg.should.have.property('payload', 'payload3');
472
- msg.should.have.property('paths').eql({ path_1: 'payload3' });
473
- var logEvents = helper.log().args.filter(function (evt) {
474
- return evt[0].type == 'join-wait';
475
- });
476
- logEvents.should.have.length(0);
477
-
478
- done();
479
- });
480
- n2.on('input', function (msg) {
481
- msg.should.have.property('payload', 'payload3');
482
- msg.should.have.property('paths').eql({ path_2: 'payload2', path_3: 'payload3' });
483
- counter++;
484
- });
485
- n1.receive({ paths: 'path_3', payload: 'payload3' });
486
- n1.receive({ paths: 'path_2', payload: 'payload2' });
487
- n1.receive({ paths: 'path_1', payload: 'payload3' });
488
- });
489
- });
490
-
491
- it('should handle exact order flow (regex), 1 expired', function (done) {
492
- var opts = { exactOrder: 'true', paths: '["path_[12]", "path_3"]', useRegex: true };
493
- var flow = flows.getDefault(opts);
494
-
495
- helper.load(joinWaitNode, flow, function () {
496
- var n1 = helper.getNode('n1');
497
- var n2 = helper.getNode('n2');
498
- var n3 = helper.getNode('n3');
499
-
500
- var counter = 0;
501
- n3.on('input', function (msg) {
502
- counter.should.be.eql(1);
503
- msg.should.have.property('payload', 'payload3');
504
- msg.should.have.property('paths').eql({ path_1: 'payload3' });
505
- var logEvents = helper.log().args.filter(function (evt) {
506
- return evt[0].type == 'join-wait';
507
- });
508
- logEvents.should.have.length(0);
509
-
510
- done();
511
- });
512
- n2.on('input', function (msg) {
513
- msg.should.have.property('payload', 'payload2');
514
- msg.should.have.property('paths').eql({ path_2: 'payload2', path_3: 'payload3' });
515
- counter++;
516
- });
517
- n1.receive({ paths: 'path_2', payload: 'payload2' });
518
- n1.receive({ paths: 'path_3', payload: 'payload3' });
519
- n1.receive({ paths: 'path_1', payload: 'payload3' });
520
- });
521
- });
522
-
523
- it('should handle exact order flow (regex - set inline), 1 expired', function (done) {
524
- var opts = { exactOrder: 'true', paths: '["path_[12]", "path_3"]' };
525
- var flow = flows.getDefault(opts);
526
-
527
- helper.load(joinWaitNode, flow, function () {
528
- var n1 = helper.getNode('n1');
529
- var n2 = helper.getNode('n2');
530
- var n3 = helper.getNode('n3');
531
-
532
- var counter = 0;
533
- n3.on('input', function (msg) {
534
- counter.should.be.eql(1);
535
- msg.should.have.property('payload', 'payload3');
536
- msg.should.have.property('paths').eql({ path_1: 'payload3' });
537
- var logEvents = helper.log().args.filter(function (evt) {
538
- return evt[0].type == 'join-wait';
539
- });
540
- logEvents.should.have.length(0);
541
-
542
- done();
543
- });
544
- n2.on('input', function (msg) {
545
- msg.should.have.property('payload', 'payload2');
546
- msg.should.have.property('paths').eql({ path_2: 'payload2', path_3: 'payload3' });
547
- counter++;
548
- });
549
- n1.receive({ paths: 'path_2', useRegex: true, payload: 'payload2' });
550
- n1.receive({ paths: 'path_3', payload: 'payload3' });
551
- n1.receive({ paths: 'path_1', payload: 'payload3' });
552
- });
553
- });
554
-
555
- it('should handle exact order flow (using object)', function (done) {
556
- var opts = { exactOrder: 'true' };
557
- var flow = flows.getDefault(opts);
558
-
559
- helper.load(joinWaitNode, flow, function () {
560
- var n1 = helper.getNode('n1');
561
- var n2 = helper.getNode('n2');
562
- var n3 = helper.getNode('n3');
563
- n3.on('input', function (msg) {
564
- done(msg);
565
- });
566
- n2.on('input', function (msg) {
567
- msg.should.have.property('payload', 'payload1');
568
- msg.should.have.property('paths').eql({ path_1: 'payload1', path_2: 'payload1', path_3: 'payload1' });
569
- var logEvents = helper.log().args.filter(function (evt) {
570
- return evt[0].type == 'join-wait';
571
- });
572
- logEvents.should.have.length(0);
573
- done();
574
- });
575
- n1.receive({ paths: { path_1: 'payload1', path_2: 'payload2', path_3: 'payload3' }, payload: 'payload1' });
576
- });
577
- });
578
-
579
- it('should have last topic', function (done) {
580
- var opts = { firstMsg: 'false' };
581
- var flow = flows.getDefault(opts);
582
-
583
- helper.load(joinWaitNode, flow, function () {
584
- var n1 = helper.getNode('n1');
585
- var n2 = helper.getNode('n2');
586
- var n3 = helper.getNode('n3');
587
- n3.on('input', function (msg) {
588
- done(msg);
589
- });
590
- n2.on('input', function (msg) {
591
- msg.should.have.property('payload', 'payload2');
592
- msg.should.have.property('paths').eql({ path_1: 'payload1', path_2: 'payload2', path_3: 'payload3' });
593
- var logEvents = helper.log().args.filter(function (evt) {
594
- return evt[0].type == 'join-wait';
595
- });
596
- logEvents.should.have.length(0);
597
- done();
598
- });
599
- n1.receive({ paths: 'path_1', payload: 'payload1' });
600
- n1.receive({ paths: 'path_3', payload: 'payload3' });
601
- n1.receive({ paths: 'path_2', payload: 'payload2' });
602
- });
603
- });
604
-
605
- it('should expire msg', function (done) {
606
- var flow = flows.getDefault();
607
-
608
- helper.load(joinWaitNode, flow, function () {
609
- var n1 = helper.getNode('n1');
610
- var n2 = helper.getNode('n2');
611
- var n3 = helper.getNode('n3');
612
- n3.on('input', function (msg) {
613
- msg.should.have.property('payload', 'payload1');
614
- msg.should.have.property('paths').eql({ path_1: 'payload1' });
615
- var logEvents = helper.log().args.filter(function (evt) {
616
- return evt[0].type == 'join-wait';
617
- });
618
- logEvents.should.have.length(0);
619
- done();
620
- });
621
- n2.on('input', function (msg) {
622
- done(msg);
623
- });
624
- n1.receive({ paths: 'path_1', payload: 'payload1' });
625
- });
626
- });
627
-
628
- it('should timeout 2x', function (done) {
629
- var opts = { timeout: 0.4 };
630
- var flow = flows.getDefault(opts);
631
-
632
- helper.load(joinWaitNode, flow, function () {
633
- var n1 = helper.getNode('n1');
634
- var n2 = helper.getNode('n2');
635
- var n3 = helper.getNode('n3');
636
-
637
- var count = 0;
638
- n3.on('input', function (msg) {
639
- msg.should.have.property('payload', 'payload1');
640
- msg.should.have.property('paths');
641
- var logEvents = helper.log().args.filter(function (evt) {
642
- return evt[0].type == 'join-wait';
643
- });
644
- logEvents.should.have.length(0);
645
- count++;
646
- if (count == 3) {
647
- done();
648
- }
649
- });
650
- n2.on('input', function (msg) {
651
- done(msg);
652
- });
653
- n1.receive({ paths: 'path_1', payload: 'payload1' });
654
- setTimeout(function () {
655
- n1.receive({ paths: 'path_1', payload: 'payload1' });
656
- }, 100);
657
- setTimeout(function () {
658
- n1.receive({ paths: 'path_2', payload: 'payload1' });
659
- }, 500);
660
- });
661
- });
662
-
663
- it('should expire with msg.complete', function (done) {
664
- var flow = flows.getDefault();
665
-
666
- helper.load(joinWaitNode, flow, function () {
667
- var n1 = helper.getNode('n1');
668
- var n2 = helper.getNode('n2');
669
- var n3 = helper.getNode('n3');
670
- var counter = 0;
671
-
672
- n3.on('input', function (msg) {
673
- counter++;
674
- if (msg.payload === 'payload1') {
675
- msg.should.have.property('payload', 'payload1');
676
- msg.should.have.property('paths').eql({ path_1: 'payload1' });
677
- } else {
678
- msg.should.have.property('payload', 'payload2');
679
- msg.should.have.property('paths').eql({ path_2: 'payload2' });
680
- counter.should.be.eql(2);
681
- var logEvents = helper.log().args.filter(function (evt) {
682
- return evt[0].type == 'join-wait';
683
- });
684
- logEvents.should.have.length(0);
685
- done();
686
- }
687
- });
688
- n2.on('input', function (msg) {
689
- done(msg);
690
- });
691
- n1.receive({ paths: 'path_1', payload: 'payload1' });
692
- n1.receive({ paths: 'path_2', complete: true, payload: 'payload2' });
693
- });
694
- });
695
-
696
- it('should not expire with msg.complete', function (done) {
697
- var opts = { timeout: 5, disableComplete: true };
698
- var flow = flows.getDefault(opts);
699
-
700
- helper.load(joinWaitNode, flow, function () {
701
- var n1 = helper.getNode('n1');
702
- var n2 = helper.getNode('n2');
703
- var n3 = helper.getNode('n3');
704
-
705
- n3.on('input', function (msg) {
706
- done(msg);
707
- });
708
- n2.on('input', function (msg) {
709
- done(msg);
710
- });
711
- n1.receive({ paths: 'path_1', payload: 'payload1' });
712
- n1.receive({ paths: 'path_2', complete: true, payload: 'payload2' });
713
- setTimeout(function () {
714
- var logEvents = helper.log().args.filter(function (evt) {
715
- return evt[0].type == 'join-wait';
716
- });
717
- logEvents.should.have.length(0);
718
- done();
719
- }, 1000);
720
- });
721
- });
722
-
723
- it('should expire path', function (done) {
724
- var opts = { paths: '["path_1", "path_3"]', pathsToExpire: '["path_2"]', mapPayload: false };
725
- var flow = flows.getDefault(opts);
726
-
727
- helper.load(joinWaitNode, flow, function () {
728
- var n1 = helper.getNode('n1');
729
- var n2 = helper.getNode('n2');
730
- var n3 = helper.getNode('n3');
731
- var counter = 0;
732
-
733
- n3.on('input', function (msg) {
734
- counter++;
735
- if (msg.payload === 'payload1') {
736
- msg.should.have.property('payload', 'payload1');
737
- msg.should.have.property('paths').eql({ path_1: true });
738
- } else {
739
- msg.should.have.property('payload', 'payload2');
740
- msg.should.have.property('paths').eql({ path_2: true });
741
- counter.should.be.eql(2);
742
- var logEvents = helper.log().args.filter(function (evt) {
743
- return evt[0].type == 'join-wait';
744
- });
745
- logEvents.should.have.length(0);
746
- done();
747
- }
748
- });
749
- n2.on('input', function (msg) {
750
- done(msg);
751
- });
752
- n1.receive({ paths: 'path_1', payload: 'payload1' });
753
- n1.receive({ paths: 'path_2', payload: 'payload2' });
754
- });
755
- });
756
-
757
- it('should expire path - regex', function (done) {
758
- var opts = { paths: '["path_1", "path_3"]', pathsToExpire: '["path_1"]', mapPayload: false, useRegex: true };
759
- var flow = flows.getDefault(opts);
760
-
761
- helper.load(joinWaitNode, flow, function () {
762
- var n1 = helper.getNode('n1');
763
- var n2 = helper.getNode('n2');
764
- var n3 = helper.getNode('n3');
765
-
766
- n3.on('input', function (msg) {
767
- msg.should.have.property('payload', 'payload1');
768
- msg.should.have.property('paths').eql({ path_1: true });
769
- var logEvents = helper.log().args.filter(function (evt) {
770
- return evt[0].type == 'join-wait';
771
- });
772
- logEvents.should.have.length(0);
773
- done();
774
- });
775
- n2.on('input', function (msg) {
776
- done(msg);
777
- });
778
- n1.receive({ paths: 'path_1', payload: 'payload1' });
779
- });
780
- });
781
-
782
- it('should expire path (same object) - mapped', function (done) {
783
- var opts = { paths: '["path_1", "path_3"]', pathsToExpire: '["path_2"]' };
784
- var flow = flows.getDefault(opts);
785
-
786
- helper.load(joinWaitNode, flow, function () {
787
- var n1 = helper.getNode('n1');
788
- var n2 = helper.getNode('n2');
789
- var n3 = helper.getNode('n3');
790
- n3.on('input', function (msg) {
791
- msg.should.have.property('payload', 'payloadX');
792
- msg.should.have.property('paths').eql({ path_1: 'payloadX', path_2: 'payloadX' });
793
- var logEvents = helper.log().args.filter(function (evt) {
794
- return evt[0].type == 'join-wait';
795
- });
796
- logEvents.should.have.length(0);
797
- done();
798
- });
799
- n2.on('input', function (msg) {
800
- done(msg);
801
- });
802
- n1.receive({ paths: { path_1: 'payload1', path_2: 'payload2' }, payload: 'payloadX' });
803
- });
804
- });
805
-
806
- it('should expire path (same object) - not mapped', function (done) {
807
- var opts = { paths: '["path_1", "path_3"]', pathsToExpire: '["path_2"]', mapPayload: false };
808
- var flow = flows.getDefault(opts);
809
-
810
- helper.load(joinWaitNode, flow, function () {
811
- var n1 = helper.getNode('n1');
812
- var n2 = helper.getNode('n2');
813
- var n3 = helper.getNode('n3');
814
- n3.on('input', function (msg) {
815
- msg.should.have.property('payload', 'payload1');
816
- msg.should.have.property('paths').eql({ path_1: 'payload1', path_2: 'payload2' });
817
- var logEvents = helper.log().args.filter(function (evt) {
818
- return evt[0].type == 'join-wait';
819
- });
820
- logEvents.should.have.length(0);
821
- done();
822
- });
823
- n2.on('input', function (msg) {
824
- done(msg);
825
- });
826
- n1.receive({ paths: { path_1: 'payload1', path_2: 'payload2' }, payload: 'payload1' });
827
- });
828
- });
829
-
830
- it('should expire paths on load', function (done) {
831
- var storage = require('node-persist');
832
- storage.initSync({
833
- dir: path.join(os.tmpdir(), 'join-wait', 'n1'),
834
- forgiveParseErrors: true,
835
- });
836
- var data = {
837
- '_join-wait-node': {
838
- queue: [
839
- [
840
- 1611966107117,
841
- {
842
- paths: 'path_1',
843
- payload: 'payload1',
844
- _msgid: '8fe56348.20ff2',
845
- },
846
- {
847
- path_1: 'payload1',
848
- },
849
- ],
850
-
851
- [
852
- 1611966107117,
853
- {
854
- paths: 'path_3',
855
- payload: 'payload3',
856
- _msgid: 'cb61c65a.8586a8',
857
- },
858
- {
859
- path_3: 'payload3',
860
- },
861
- ],
862
- ],
863
- },
864
- };
865
- storage.setItemSync('paths', JSON.stringify(data));
866
-
867
- var opts = {
868
- pathsToExpire: '["path_2"]',
869
- };
870
- var flow = flows.getDefault(opts);
871
-
872
- helper.load(joinWaitNode, flow, function () {
873
- var n1 = helper.getNode('n1');
874
- var n2 = helper.getNode('n2');
875
- var n3 = helper.getNode('n3');
876
- n3.on('input', function (msg) {
877
- msg.should.have.property('payload', 'payload1');
878
- msg.should.have.property('paths').eql({ path_2: 'payload1' });
879
- var logEvents = helper.log().args.filter(function (evt) {
880
- return evt[0].type == 'join-wait';
881
- });
882
- logEvents.should.have.length(0);
883
- storage.clear();
884
- done();
885
- });
886
- n2.on('input', function (msg) {
887
- storage.clear();
888
- done(msg);
889
- });
890
- n1.receive({ paths: { path_2: 'payload2' }, payload: 'payload1' });
891
- });
892
- });
893
-
894
- it('should not expire paths on load', function (done) {
895
- var storage = require('node-persist');
896
- storage.initSync({
897
- dir: path.join(os.tmpdir(), 'join-wait', 'n1'),
898
- forgiveParseErrors: true,
899
- });
900
- var data = {
901
- '_join-wait-node': {
902
- queue: [
903
- [
904
- 1611966107117,
905
- {
906
- paths: 'path_1',
907
- payload: 'payload1',
908
- _msgid: '8fe56348.20ff2',
909
- },
910
- {
911
- path_1: 'payload1',
912
- },
913
- ],
914
-
915
- [
916
- 1611966107117,
917
- {
918
- paths: 'path_3',
919
- payload: 'payload3',
920
- _msgid: 'cb61c65a.8586a8',
921
- },
922
- {
923
- path_3: 'payload3',
924
- },
925
- ],
926
- ],
927
- },
928
- };
929
- storage.setItemSync('paths', JSON.stringify(data));
930
-
931
- var opts = {
932
- pathsToExpire: '["path_2"]',
933
- persistOnRestart: true,
934
- };
935
- var flow = flows.getDefault(opts);
936
-
937
- helper.load(joinWaitNode, flow, function () {
938
- var n1 = helper.getNode('n1');
939
- var n2 = helper.getNode('n2');
940
- var n3 = helper.getNode('n3');
941
-
942
- var counter = 1;
943
-
944
- n3.on('input', function (msg) {
945
- switch (counter) {
946
- case 1: {
947
- msg.should.have.property('payload', 'payload1');
948
- msg.should.have.property('paths').eql({ path_1: 'payload1' });
949
- ++counter;
950
- return;
951
- }
952
- case 2: {
953
- msg.should.have.property('payload', 'payload3');
954
- msg.should.have.property('paths').eql({ path_3: 'payload3' });
955
- ++counter;
956
- return;
957
- }
958
- case 3: {
959
- msg.should.have.property('payload', 'payload1');
960
- msg.should.have.property('paths').eql({ path_2: 'payload1' });
961
- ++counter;
962
- }
963
- }
964
-
965
- var logEvents = helper.log().args.filter(function (evt) {
966
- return evt[0].type == 'join-wait';
967
- });
968
- logEvents.should.have.length(0);
969
- storage.clear();
970
- done();
971
- });
972
- n2.on('input', function (msg) {
973
- storage.clear();
974
- done(msg);
975
- });
976
- n1.receive({ paths: { path_2: 'payload2' }, payload: 'payload1' });
977
- });
978
- });
979
-
980
- it('should expire path - mapped paths', function (done) {
981
- var opts = { paths: '["path_1", "path_3"]', pathsToExpire: '["path_2"]' };
982
- var flow = flows.getDefault(opts);
983
-
984
- helper.load(joinWaitNode, flow, function () {
985
- var n1 = helper.getNode('n1');
986
- var n2 = helper.getNode('n2');
987
- var n3 = helper.getNode('n3');
988
- var counter = 0;
989
-
990
- n3.on('input', function (msg) {
991
- counter++;
992
- if (msg.payload === 'payload1') {
993
- msg.should.have.property('payload', 'payload1');
994
- msg.should.have.property('paths').eql({ path_1: 'payload1' });
995
- } else {
996
- msg.should.have.property('payload', 'payload2');
997
- msg.should.have.property('paths').eql({ path_2: 'payload2' });
998
- counter.should.be.eql(2);
999
- var logEvents = helper.log().args.filter(function (evt) {
1000
- return evt[0].type == 'join-wait';
1001
- });
1002
- logEvents.should.have.length(0);
1003
- done();
1004
- }
1005
- });
1006
- n2.on('input', function (msg) {
1007
- done(msg);
1008
- });
1009
- n1.receive({ paths: 'path_1', payload: 'payload1' });
1010
- n1.receive({ paths: 'path_2', payload: 'payload2' });
1011
- });
1012
- });
1013
-
1014
- it('should expire path - not mapped paths', function (done) {
1015
- var opts = { paths: '["path_1", "path_3"]', pathsToExpire: '["path_2"]', mapPayload: false };
1016
- var flow = flows.getDefault(opts);
1017
-
1018
- helper.load(joinWaitNode, flow, function () {
1019
- var n1 = helper.getNode('n1');
1020
- var n2 = helper.getNode('n2');
1021
- var n3 = helper.getNode('n3');
1022
- var counter = 0;
1023
-
1024
- n3.on('input', function (msg) {
1025
- counter++;
1026
- if (msg.payload === 'payload1') {
1027
- msg.should.have.property('payload', 'payload1');
1028
- msg.should.have.property('paths').eql({ path_1: true });
1029
- } else {
1030
- msg.should.have.property('payload', 'payload2');
1031
- msg.should.have.property('paths').eql({ path_2: true });
1032
- counter.should.be.eql(2);
1033
- var logEvents = helper.log().args.filter(function (evt) {
1034
- return evt[0].type == 'join-wait';
1035
- });
1036
- logEvents.should.have.length(0);
1037
- done();
1038
- }
1039
- });
1040
- n2.on('input', function (msg) {
1041
- done(msg);
1042
- });
1043
- n1.receive({ paths: 'path_1', payload: 'payload1' });
1044
- n1.receive({ paths: 'path_2', payload: 'payload2' });
1045
- });
1046
- });
1047
-
1048
- it('should warn unknown path', function (done) {
1049
- var flow = flows.getDefault();
1050
-
1051
- helper.load(joinWaitNode, flow, function () {
1052
- var n1 = helper.getNode('n1');
1053
- n1.receive({ paths: { missing1: false, missing2: true }, payload: 'payload1' });
1054
-
1055
- try {
1056
- helper.log().called.should.be.true();
1057
- var logEvents = helper.log().args.filter(function (evt) {
1058
- return evt[0].type == 'join-wait';
1059
- });
1060
- logEvents.should.have.length(1);
1061
-
1062
- var msg = logEvents[0][0];
1063
- msg.should.have.property('level', helper.log().WARN);
1064
- msg.should.have.property('id', 'n1');
1065
- msg.should.have.property('type', 'join-wait');
1066
- msg.should.have.property(
1067
- 'msg',
1068
- 'join-wait msg.paths["missing1"], msg.paths["missing2"] doesn\'t exist in pathsToWait or pathsToExpire!',
1069
- );
1070
- done();
1071
- } catch (err) {
1072
- done(err);
1073
- }
1074
- });
1075
- });
1076
-
1077
- it('should fail jsonata correlationTopic', function (done) {
1078
- var opts = { correlationTopic: '${', correlationTopicType: 'jsonata' };
1079
- var flow = flows.getDefault(opts);
1080
-
1081
- helper.load(joinWaitNode, flow, function () {
1082
- var n1 = helper.getNode('n1');
1083
- n1.receive({ paths: 'path_1', payload: 'payload1' });
1084
-
1085
- try {
1086
- helper.log().called.should.be.true();
1087
- var logEvents = helper.log().args.filter(function (evt) {
1088
- return evt[0].type == 'join-wait';
1089
- });
1090
- logEvents.should.have.length(1);
1091
-
1092
- var msg = logEvents[0][0];
1093
- msg.should.have.property('level', helper.log().ERROR);
1094
- msg.should.have.property('id', 'n1');
1095
- msg.should.have.property('type', 'join-wait');
1096
- msg.should.have.property('msg', 'join-wait.invalid-expr topic Expected ":" before end of expression');
1097
- done();
1098
- } catch (err) {
1099
- done(err);
1100
- }
1101
- });
1102
- });
1103
-
1104
- it('should fail jsonata correlationTopic (inline error)', function (done) {
1105
- var opts = { correlationTopic: '$notafunction()', correlationTopicType: 'jsonata' };
1106
- var flow = flows.getDefault(opts);
1107
-
1108
- helper.load(joinWaitNode, flow, function () {
1109
- var n1 = helper.getNode('n1');
1110
- n1.receive({ paths: 'path_1', payload: 'payload1' });
1111
-
1112
- try {
1113
- helper.log().called.should.be.true();
1114
- var logEvents = helper.log().args.filter(function (evt) {
1115
- return evt[0].type == 'join-wait';
1116
- });
1117
- logEvents.should.have.length(1);
1118
-
1119
- var msg = logEvents[0][0];
1120
- msg.should.have.property('level', helper.log().ERROR);
1121
- msg.should.have.property('id', 'n1');
1122
- msg.should.have.property('type', 'join-wait');
1123
- msg.should.have.property('msg', 'join-wait.invalid-expr topic Attempted to invoke a non-function');
1124
- done();
1125
- } catch (err) {
1126
- done(err);
1127
- }
1128
- });
1129
- });
1130
-
1131
- it('should fail duplicate expire paths', function (done) {
1132
- var opts = { pathsToExpire: '["path_1", "path_1"]' };
1133
- var flow = flows.getDefault(opts);
1134
-
1135
- helper.load(joinWaitNode, flow, function () {
1136
- var n1 = helper.getNode('n1');
1137
- n1.receive({ paths: 'path_1', payload: 'payload1' });
1138
-
1139
- try {
1140
- helper.log().called.should.be.true();
1141
- var logEvents = helper.log().args.filter(function (evt) {
1142
- return evt[0].type == 'join-wait';
1143
- });
1144
- logEvents.should.have.length(1);
1145
-
1146
- var msg = logEvents[0][0];
1147
- msg.should.have.property('level', helper.log().ERROR);
1148
- msg.should.have.property('id', 'n1');
1149
- msg.should.have.property('type', 'join-wait');
1150
- msg.should.have.property('msg', 'join-wait pathsToExpire cannot have duplicate entries: path_1,path_1');
1151
- done();
1152
- } catch (err) {
1153
- done(err);
1154
- }
1155
- });
1156
- });
1157
-
1158
- it('should fail duplicate expire paths (set inline)', function (done) {
1159
- var flow = flows.getDefault();
1160
-
1161
- helper.load(joinWaitNode, flow, function () {
1162
- var n1 = helper.getNode('n1');
1163
- n1.receive({ paths: 'path_1', pathsToExpire: ['path_1', 'path_1'], payload: 'payload1' });
1164
-
1165
- try {
1166
- helper.log().called.should.be.true();
1167
- var logEvents = helper.log().args.filter(function (evt) {
1168
- return evt[0].type == 'join-wait';
1169
- });
1170
- logEvents.should.have.length(1);
1171
-
1172
- var msg = logEvents[0][0];
1173
- msg.should.have.property('level', helper.log().ERROR);
1174
- msg.should.have.property('id', 'n1');
1175
- msg.should.have.property('type', 'join-wait');
1176
- msg.should.have.property('msg', 'join-wait pathsToExpire cannot have duplicate entries: path_1,path_1');
1177
- done();
1178
- } catch (err) {
1179
- done(err);
1180
- }
1181
- });
1182
- });
1183
-
1184
- it('should fail invalid path (array)', function (done) {
1185
- var flow = flows.getDefault();
1186
-
1187
- helper.load(joinWaitNode, flow, function () {
1188
- var n1 = helper.getNode('n1');
1189
- n1.receive({ paths: ['badpath'], payload: 'payload1' });
1190
-
1191
- try {
1192
- helper.log().called.should.be.true();
1193
- var logEvents = helper.log().args.filter(function (evt) {
1194
- return evt[0].type == 'join-wait';
1195
- });
1196
- logEvents.should.have.length(1);
1197
-
1198
- var msg = logEvents[0][0];
1199
-
1200
- msg.should.have.property('level', helper.log().ERROR);
1201
- msg.should.have.property('id', 'n1');
1202
- msg.should.have.property('type', 'join-wait');
1203
- msg.should.have.property(
1204
- 'msg',
1205
- 'join-wait "msg.paths" must be a string or an object, e.g., msg.paths = \'value\'.',
1206
- );
1207
- done();
1208
- } catch (err) {
1209
- done(err);
1210
- }
1211
- });
1212
- });
1213
-
1214
- it('should fail invalid path (integer)', function (done) {
1215
- var flow = flows.getDefault();
1216
-
1217
- helper.load(joinWaitNode, flow, function () {
1218
- var n1 = helper.getNode('n1');
1219
- n1.receive({ paths: 5, payload: 'payload1' });
1220
-
1221
- try {
1222
- helper.log().called.should.be.true();
1223
- var logEvents = helper.log().args.filter(function (evt) {
1224
- return evt[0].type == 'join-wait';
1225
- });
1226
- logEvents.should.have.length(1);
1227
-
1228
- var msg = logEvents[0][0];
1229
-
1230
- msg.should.have.property('level', helper.log().ERROR);
1231
- msg.should.have.property('id', 'n1');
1232
- msg.should.have.property('type', 'join-wait');
1233
- msg.should.have.property(
1234
- 'msg',
1235
- 'join-wait "msg.paths" must be a string or an object, e.g., msg.paths = \'value\'.',
1236
- );
1237
- done();
1238
- } catch (err) {
1239
- done(err);
1240
- }
1241
- });
1242
- });
1243
-
1244
- it('should fail empty path', function (done) {
1245
- var flow = flows.getDefault();
1246
-
1247
- helper.load(joinWaitNode, flow, function () {
1248
- var n1 = helper.getNode('n1');
1249
- n1.receive({ paths: '', payload: 'payload1' });
1250
-
1251
- try {
1252
- helper.log().called.should.be.true();
1253
- var logEvents = helper.log().args.filter(function (evt) {
1254
- return evt[0].type == 'join-wait';
1255
- });
1256
- logEvents.should.have.length(1);
1257
-
1258
- var msg = logEvents[0][0];
1259
- msg.should.have.property('level', helper.log().ERROR);
1260
- msg.should.have.property('id', 'n1');
1261
- msg.should.have.property('type', 'join-wait');
1262
- msg.should.have.property('msg', 'join-wait "msg.paths" is undefined or not set.');
1263
- done();
1264
- } catch (err) {
1265
- done(err);
1266
- }
1267
- });
1268
- });
1269
-
1270
- it('should fail no pathTopic', function (done) {
1271
- var flow = flows.getDefault();
1272
-
1273
- helper.load(joinWaitNode, flow, function () {
1274
- var n1 = helper.getNode('n1');
1275
- n1.receive({ payload: 'payload1' });
1276
-
1277
- try {
1278
- helper.log().called.should.be.true();
1279
- var logEvents = helper.log().args.filter(function (evt) {
1280
- return evt[0].type == 'join-wait';
1281
- });
1282
- logEvents.should.have.length(1);
1283
-
1284
- var msg = logEvents[0][0];
1285
- msg.should.have.property('level', helper.log().ERROR);
1286
- msg.should.have.property('id', 'n1');
1287
- msg.should.have.property('type', 'join-wait');
1288
- msg.should.have.property('msg', 'join-wait "msg.paths" is undefined or not set.');
1289
- done();
1290
- } catch (err) {
1291
- done(err);
1292
- }
1293
- });
1294
- });
1295
-
1296
- it('should fail invalid pathsToWait (regex)', function (done) {
1297
- var opts = { paths: '["path_[1", "path_2", "path_3"]', useRegex: true };
1298
- var flow = flows.getDefault(opts);
1299
-
1300
- helper.load(joinWaitNode, flow, function () {
1301
- var n1 = helper.getNode('n1');
1302
- n1.receive({ paths: 'path_1', payload: 'payload1' });
1303
-
1304
- try {
1305
- helper.log().called.should.be.true();
1306
- var logEvents = helper.log().args.filter(function (evt) {
1307
- return evt[0].type == 'join-wait';
1308
- });
1309
- logEvents.should.have.length(1);
1310
-
1311
- var msg = logEvents[0][0];
1312
-
1313
- msg.should.have.property('level', helper.log().ERROR);
1314
- msg.should.have.property('id', 'n1');
1315
- msg.should.have.property('type', 'join-wait');
1316
- msg.should.have.property(
1317
- 'msg',
1318
- 'join-wait.regex-expr Invalid regular expression: /path_[1/: Unterminated character class',
1319
- );
1320
- done();
1321
- } catch (err) {
1322
- done(err);
1323
- }
1324
- });
1325
- });
1326
-
1327
- it('should fail invalid pathsToExpire (regex)', function (done) {
1328
- var opts = { pathsToExpire: '["path_[1"]', useRegex: true };
1329
- var flow = flows.getDefault(opts);
1330
-
1331
- helper.load(joinWaitNode, flow, function () {
1332
- var n1 = helper.getNode('n1');
1333
- n1.receive({ paths: 'path_1', payload: 'payload1' });
1334
-
1335
- try {
1336
- helper.log().called.should.be.true();
1337
- var logEvents = helper.log().args.filter(function (evt) {
1338
- return evt[0].type == 'join-wait';
1339
- });
1340
- logEvents.should.have.length(1);
1341
-
1342
- var msg = logEvents[0][0];
1343
-
1344
- msg.should.have.property('level', helper.log().ERROR);
1345
- msg.should.have.property('id', 'n1');
1346
- msg.should.have.property('type', 'join-wait');
1347
- msg.should.have.property(
1348
- 'msg',
1349
- 'join-wait.regex-expr Invalid regular expression: /path_[1/: Unterminated character class',
1350
- );
1351
- done();
1352
- } catch (err) {
1353
- done(err);
1354
- }
1355
- });
1356
- });
1357
-
1358
- it('should fail invalid pathsToWait (supplied command line)', function (done) {
1359
- var flow = flows.getDefault();
1360
-
1361
- helper.load(joinWaitNode, flow, function () {
1362
- var n1 = helper.getNode('n1');
1363
- n1.receive({ paths: 'path_1', pathsToWait: [], payload: 'payload1' });
1364
-
1365
- try {
1366
- helper.log().called.should.be.true();
1367
- var logEvents = helper.log().args.filter(function (evt) {
1368
- return evt[0].type == 'join-wait';
1369
- });
1370
- logEvents.should.have.length(1);
1371
-
1372
- var msg = logEvents[0][0];
1373
-
1374
- msg.should.have.property('level', helper.log().ERROR);
1375
- msg.should.have.property('id', 'n1');
1376
- msg.should.have.property('type', 'join-wait');
1377
- msg.should.have.property('msg', 'join-wait pathsToWait must be a defined array.');
1378
- done();
1379
- } catch (err) {
1380
- done(err);
1381
- }
1382
- });
1383
- });
1384
-
1385
- it('should fail invalid pathsToExpire (supplied command line)', function (done) {
1386
- var flow = flows.getDefault();
1387
-
1388
- helper.load(joinWaitNode, flow, function () {
1389
- var n1 = helper.getNode('n1');
1390
- n1.receive({ paths: 'path_1', pathsToExpire: [], payload: 'payload1' });
1391
-
1392
- try {
1393
- helper.log().called.should.be.true();
1394
- var logEvents = helper.log().args.filter(function (evt) {
1395
- return evt[0].type == 'join-wait';
1396
- });
1397
- logEvents.should.have.length(1);
1398
-
1399
- var msg = logEvents[0][0];
1400
-
1401
- msg.should.have.property('level', helper.log().ERROR);
1402
- msg.should.have.property('id', 'n1');
1403
- msg.should.have.property('type', 'join-wait');
1404
- msg.should.have.property('msg', 'join-wait pathsToExpire must be undefined or an array.');
1405
- done();
1406
- } catch (err) {
1407
- done(err);
1408
- }
1409
- });
1410
- });
1411
- });