@@ -12,14 +12,16 @@ var t = require('assert');
12
12
13
13
var Kafka = require ( '../' ) ;
14
14
var kafkaBrokerList = process . env . KAFKA_HOST || 'localhost:9092' ;
15
+ const { createTopics, deleteTopics } = require ( './topicUtils' ) ;
15
16
var eventListener = require ( './listener' ) ;
16
- var topic = 'test' ;
17
- var topic2 = 'test2' ;
17
+ var topic ;
18
18
19
19
describe ( 'Consumer/Producer' , function ( ) {
20
-
21
20
var producer ;
22
21
var consumer ;
22
+ var grp ;
23
+
24
+ let createdTopics = [ ] ;
23
25
24
26
beforeEach ( function ( done ) {
25
27
var finished = 0 ;
@@ -36,12 +38,24 @@ describe('Consumer/Producer', function() {
36
38
return done ( err ) ;
37
39
}
38
40
39
- if ( finished === 2 ) {
41
+ if ( finished === 3 ) {
40
42
done ( ) ;
41
43
}
42
44
}
43
45
44
- var grp = 'kafka-mocha-grp-' + crypto . randomBytes ( 20 ) . toString ( 'hex' ) ;
46
+ grp = 'kafka-mocha-grp-' + crypto . randomBytes ( 20 ) . toString ( 'hex' ) ;
47
+ topic = 'test' + crypto . randomBytes ( 20 ) . toString ( 'hex' ) ;
48
+
49
+ createTopics (
50
+ [ { topic, num_partitions : 1 , replication_factor : 1 } ] ,
51
+ kafkaBrokerList ,
52
+ function ( err ) {
53
+ t . ifError ( err ) ;
54
+ maybeDone ( err ) ;
55
+ }
56
+ ) ;
57
+
58
+ createdTopics . push ( topic ) ;
45
59
46
60
consumer = new Kafka . KafkaConsumer ( {
47
61
'metadata.broker.list' : kafkaBrokerList ,
@@ -53,7 +67,7 @@ describe('Consumer/Producer', function() {
53
67
'debug' : 'all'
54
68
// paused: true,
55
69
} , {
56
- 'auto.offset.reset' : 'largest '
70
+ 'auto.offset.reset' : 'smallest '
57
71
} ) ;
58
72
59
73
consumer . connect ( { } , function ( err , d ) {
@@ -99,16 +113,21 @@ describe('Consumer/Producer', function() {
99
113
return done ( err ) ;
100
114
}
101
115
102
- if ( finished === 2 ) {
116
+ if ( finished === 3 ) {
103
117
done ( ) ;
104
118
}
105
119
}
106
120
107
- consumer . disconnect ( function ( err ) {
121
+ producer . disconnect ( function ( err ) {
108
122
maybeDone ( err ) ;
109
123
} ) ;
110
124
111
- producer . disconnect ( function ( err ) {
125
+ deleteTopics ( createdTopics , kafkaBrokerList , function ( err ) {
126
+ createdTopics . length = 0 ;
127
+ maybeDone ( err ) ;
128
+ } ) ;
129
+
130
+ consumer . disconnect ( function ( err ) {
112
131
maybeDone ( err ) ;
113
132
} ) ;
114
133
} ) ;
@@ -154,6 +173,7 @@ describe('Consumer/Producer', function() {
154
173
t . equal ( position . length , 1 ) ;
155
174
t . deepStrictEqual ( position [ 0 ] . partition , 0 ) ;
156
175
t . ok ( position [ 0 ] . offset >= 0 ) ;
176
+ consumer . unsubscribe ( ) ;
157
177
done ( ) ;
158
178
} ) ;
159
179
} ;
@@ -180,6 +200,7 @@ describe('Consumer/Producer', function() {
180
200
consumer . consume ( 100000 , function ( err , messages ) {
181
201
t . ifError ( err ) ;
182
202
t . equal ( messages . length , 1 ) ;
203
+ consumer . unsubscribe ( ) ;
183
204
done ( ) ;
184
205
} ) ;
185
206
} ;
@@ -228,12 +249,13 @@ describe('Consumer/Producer', function() {
228
249
229
250
setTimeout ( function ( ) {
230
251
producer . produce ( topic , null , buffer , null ) ;
231
- } , 500 )
232
- consumer . setDefaultConsumeTimeout ( 2000 ) ;
252
+ } , 500 ) ;
253
+ consumer . setDefaultConsumeTimeout ( 20000 ) ;
233
254
consumer . consume ( 1000 , function ( err , messages ) {
234
255
t . ifError ( err ) ;
235
256
t . equal ( messages . length , 1 ) ;
236
257
t . deepStrictEqual ( events , [ "data" , "partition.eof" ] ) ;
258
+ consumer . unsubscribe ( ) ;
237
259
done ( ) ;
238
260
} ) ;
239
261
} ) ;
@@ -261,12 +283,13 @@ describe('Consumer/Producer', function() {
261
283
262
284
setTimeout ( function ( ) {
263
285
producer . produce ( topic , null , buffer , null ) ;
264
- } , 2000 )
265
- consumer . setDefaultConsumeTimeout ( 3000 ) ;
286
+ } , 4000 ) ;
287
+ consumer . setDefaultConsumeTimeout ( 20000 ) ;
266
288
consumer . consume ( 1000 , function ( err , messages ) {
267
289
t . ifError ( err ) ;
268
290
t . equal ( messages . length , 1 ) ;
269
291
t . deepStrictEqual ( events , [ "partition.eof" , "data" , "partition.eof" ] ) ;
292
+ consumer . unsubscribe ( ) ;
270
293
done ( ) ;
271
294
} ) ;
272
295
} ) ;
@@ -276,7 +299,6 @@ describe('Consumer/Producer', function() {
276
299
var key = 'key' ;
277
300
278
301
crypto . randomBytes ( 4096 , function ( ex , buffer ) {
279
-
280
302
producer . setPollInterval ( 10 ) ;
281
303
282
304
producer . once ( 'delivery-report' , function ( err , report ) {
@@ -292,6 +314,7 @@ describe('Consumer/Producer', function() {
292
314
t . equal ( key , message . key , 'invalid message key' ) ;
293
315
t . equal ( topic , message . topic , 'invalid message topic' ) ;
294
316
t . ok ( message . offset >= 0 , 'invalid message offset' ) ;
317
+ consumer . unsubscribe ( ) ;
295
318
done ( ) ;
296
319
} ) ;
297
320
@@ -306,15 +329,13 @@ describe('Consumer/Producer', function() {
306
329
} ) ;
307
330
308
331
it ( 'should emit \'partition.eof\' events in consumeLoop' , function ( done ) {
309
-
310
332
crypto . randomBytes ( 4096 , function ( ex , buffer ) {
311
333
producer . setPollInterval ( 10 ) ;
312
334
313
335
producer . once ( 'delivery-report' , function ( err , report ) {
314
336
t . ifError ( err ) ;
315
337
} ) ;
316
338
317
-
318
339
var events = [ ] ;
319
340
var offsets = [ ] ;
320
341
@@ -337,11 +358,11 @@ describe('Consumer/Producer', function() {
337
358
338
359
setTimeout ( function ( ) {
339
360
producer . produce ( topic , null , buffer ) ;
340
- } , 2000 ) ;
361
+ } , 4000 ) ;
341
362
342
363
setTimeout ( function ( ) {
343
364
producer . produce ( topic , null , buffer ) ;
344
- } , 4000 ) ;
365
+ } , 6000 ) ;
345
366
346
367
setTimeout ( function ( ) {
347
368
t . deepStrictEqual ( events , [ 'partition.eof' , 'data' , 'partition.eof' , 'data' , 'partition.eof' ] ) ;
@@ -352,8 +373,9 @@ describe('Consumer/Producer', function() {
352
373
startOffset + 1 ,
353
374
startOffset + 1 ,
354
375
startOffset + 2 ] ) ;
376
+ consumer . unsubscribe ( ) ;
355
377
done ( ) ;
356
- } , 6000 ) ;
378
+ } , 8000 ) ;
357
379
} ) ;
358
380
} ) ;
359
381
@@ -386,16 +408,26 @@ describe('Consumer/Producer', function() {
386
408
run_headers_test ( done , headers ) ;
387
409
} ) ;
388
410
389
- it ( 'should be able to produce and consume messages with one header value as int : consumeLoop' , function ( done ) {
411
+ it ( 'should be able to produce and consume messages with one header value as string with unicode : consumeLoop' , function ( done ) {
390
412
var headers = [
391
- { key : 10 }
413
+ { key : '10👍' } ,
414
+ { key : 'こんにちは' } ,
415
+ { key : '🌍🌎🌏' }
392
416
] ;
393
417
run_headers_test ( done , headers ) ;
394
418
} ) ;
395
419
396
- it ( 'should be able to produce and consume messages with one header value as float : consumeLoop' , function ( done ) {
420
+ it ( 'should be able to produce and consume messages with one header value as string with emojis : consumeLoop' , function ( done ) {
397
421
var headers = [
398
- { key : 1.11 }
422
+ { key : '😀😃😄😁' }
423
+ ] ;
424
+ run_headers_test ( done , headers ) ;
425
+ } ) ;
426
+
427
+ it ( 'should be able to produce and consume messages with one header value as string in other languages: consumeLoop' , function ( done ) {
428
+ var headers = [
429
+ { key : '你好' } ,
430
+ { key : 'Привет' }
399
431
] ;
400
432
run_headers_test ( done , headers ) ;
401
433
} ) ;
@@ -422,8 +454,8 @@ describe('Consumer/Producer', function() {
422
454
423
455
it ( 'should be able to produce and consume messages with multiple headers with mixed values: consumeLoop' , function ( done ) {
424
456
var headers = [
425
- { key1 : 'value1' } ,
426
- { key2 : Buffer . from ( 'value2' ) } ,
457
+ { key1 : 'value1' } ,
458
+ { key2 : Buffer . from ( 'value2' ) }
427
459
] ;
428
460
run_headers_test ( done , headers ) ;
429
461
} ) ;
@@ -440,7 +472,7 @@ describe('Consumer/Producer', function() {
440
472
const buffer = Buffer . from ( 'value' ) ;
441
473
const key = 'key' ;
442
474
t . throws (
443
- ( ) => producer . produce ( topic , null , buffer , key , null , "" , headerCase ) ,
475
+ ( ) => producer . produce ( topic , null , buffer , key , null , '' , headerCase ) ,
444
476
'must be string or buffer'
445
477
) ;
446
478
}
@@ -451,15 +483,16 @@ describe('Consumer/Producer', function() {
451
483
it ( 'should be able to produce and consume messages: empty buffer key and empty value' , function ( done ) {
452
484
var emptyString = '' ;
453
485
var key = Buffer . from ( emptyString ) ;
454
- var value = Buffer . from ( '' ) ;
486
+ var value = Buffer . from ( emptyString ) ;
455
487
456
488
producer . setPollInterval ( 10 ) ;
457
489
458
490
consumer . once ( 'data' , function ( message ) {
459
491
t . notEqual ( message . value , null , 'message should not be null' ) ;
460
492
t . equal ( value . toString ( ) , message . value . toString ( ) , 'invalid message value' ) ;
461
493
t . equal ( emptyString , message . key , 'invalid message key' ) ;
462
- done ( ) ;
494
+ consumer . unsubscribe ( ) ;
495
+ done ( ) ;
463
496
} ) ;
464
497
465
498
consumer . subscribe ( [ topic ] ) ;
@@ -480,6 +513,7 @@ describe('Consumer/Producer', function() {
480
513
t . notEqual ( message . value , null , 'message should not be null' ) ;
481
514
t . equal ( value . toString ( ) , message . value . toString ( ) , 'invalid message value' ) ;
482
515
t . equal ( key , message . key , 'invalid message key' ) ;
516
+ consumer . unsubscribe ( ) ;
483
517
done ( ) ;
484
518
} ) ;
485
519
@@ -500,6 +534,7 @@ describe('Consumer/Producer', function() {
500
534
consumer . once ( 'data' , function ( message ) {
501
535
t . equal ( value , message . value , 'invalid message value' ) ;
502
536
t . equal ( key , message . key , 'invalid message key' ) ;
537
+ consumer . unsubscribe ( ) ;
503
538
done ( ) ;
504
539
} ) ;
505
540
@@ -525,7 +560,7 @@ describe('Consumer/Producer', function() {
525
560
526
561
beforeEach ( function ( done ) {
527
562
consumer = new Kafka . KafkaConsumer ( consumerOpts , {
528
- 'auto.offset.reset' : 'largest ' ,
563
+ 'auto.offset.reset' : 'smallest ' ,
529
564
} ) ;
530
565
531
566
consumer . connect ( { } , function ( err , d ) {
@@ -569,6 +604,7 @@ describe('Consumer/Producer', function() {
569
604
} ) ;
570
605
571
606
consumer . subscribe ( [ topic ] ) ;
607
+ consumer . setDefaultConsumeTimeout ( 4000 ) ;
572
608
consumer . consume ( ) ;
573
609
574
610
setTimeout ( function ( ) {
@@ -612,14 +648,15 @@ describe('Consumer/Producer', function() {
612
648
}
613
649
} ;
614
650
consumer = new Kafka . KafkaConsumer ( consumerOpts , {
615
- 'auto.offset.reset' : 'largest ' ,
651
+ 'auto.offset.reset' : 'smallest ' ,
616
652
} ) ;
617
653
eventListener ( consumer ) ;
618
654
619
655
consumer . connect ( { } , function ( err , d ) {
620
656
t . ifError ( err ) ;
621
657
t . equal ( typeof d , 'object' , 'metadata should be returned' ) ;
622
658
consumer . subscribe ( [ topic ] ) ;
659
+ consumer . setDefaultConsumeTimeout ( 4000 ) ;
623
660
consumer . consume ( ) ;
624
661
setTimeout ( function ( ) {
625
662
producer . produce ( topic , null , Buffer . from ( '' ) , '' ) ;
@@ -668,6 +705,7 @@ describe('Consumer/Producer', function() {
668
705
t . equal ( topic , message . topic , 'invalid message topic' ) ;
669
706
t . ok ( message . offset >= 0 , 'invalid message offset' ) ;
670
707
assert_headers_match ( headers , message . headers ) ;
708
+ consumer . unsubscribe ( ) ;
671
709
done ( ) ;
672
710
} ) ;
673
711
@@ -678,8 +716,6 @@ describe('Consumer/Producer', function() {
678
716
var timestamp = new Date ( ) . getTime ( ) ;
679
717
producer . produce ( topic , null , buffer , key , timestamp , "" , headers ) ;
680
718
} , 2000 ) ;
681
-
682
719
} ) ;
683
720
}
684
-
685
721
} ) ;
0 commit comments