@@ -436,6 +436,63 @@ func Test_Should_Batch_Consume_With_PreBatch_Enabled(t *testing.T) {
436
436
}
437
437
}
438
438
439
+ func Test_Should_Skip_Message_When_Header_Filter_Given (t * testing.T ) {
440
+ // Given
441
+ topic := "header-filter-topic"
442
+ consumerGroup := "header-filter-cg"
443
+ brokerAddress := "localhost:9092"
444
+
445
+ incomingMessage := []segmentio.Message {
446
+ {
447
+ Topic : topic ,
448
+ Headers : []segmentio.Header {
449
+ {Key : "SkipMessage" , Value : []byte ("any" )},
450
+ },
451
+ Key : []byte ("1" ),
452
+ Value : []byte (`foo` ),
453
+ },
454
+ }
455
+
456
+ _ , cleanUp := createTopicAndWriteMessages (t , topic , incomingMessage )
457
+ defer cleanUp ()
458
+
459
+ consumeCh := make (chan struct {})
460
+ skipMessageCh := make (chan struct {})
461
+
462
+ consumerCfg := & kafka.ConsumerConfig {
463
+ Reader : kafka.ReaderConfig {Brokers : []string {brokerAddress }, Topic : topic , GroupID : consumerGroup },
464
+ SkipMessageByHeaderFn : func (header []kafka.Header ) bool {
465
+ defer func () {
466
+ skipMessageCh <- struct {}{}
467
+ }()
468
+ for _ , h := range header {
469
+ if h .Key == "SkipMessage" {
470
+ return true
471
+ }
472
+ }
473
+ return false
474
+ },
475
+ ConsumeFn : func (message * kafka.Message ) error {
476
+ consumeCh <- struct {}{}
477
+ return nil
478
+ },
479
+ }
480
+
481
+ consumer , _ := kafka .NewConsumer (consumerCfg )
482
+ defer consumer .Stop ()
483
+
484
+ consumer .Consume ()
485
+
486
+ // Then
487
+ <- skipMessageCh
488
+
489
+ select {
490
+ case <- consumeCh :
491
+ t .Fatal ("Message must be skipped! consumeCh mustn't receive any value" )
492
+ case <- time .After (1 * time .Second ):
493
+ }
494
+ }
495
+
439
496
func createTopicAndWriteMessages (t * testing.T , topicName string , messages []segmentio.Message ) (* segmentio.Conn , func ()) {
440
497
t .Helper ()
441
498
0 commit comments