@@ -23,7 +23,9 @@ func safeClose(t testing.TB, c io.Closer) {
23
23
func TestSimpleClient (t * testing.T ) {
24
24
seedBroker := NewMockBroker (t , 1 )
25
25
26
- seedBroker .Returns (new (MetadataResponse ))
26
+ metadataResponse := new (MetadataResponse )
27
+ metadataResponse .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
28
+ seedBroker .Returns (metadataResponse )
27
29
28
30
client , err := NewClient ([]string {seedBroker .Addr ()}, NewTestConfig ())
29
31
if err != nil {
@@ -92,6 +94,7 @@ func TestClientDoesntCachePartitionsForTopicsWithErrors(t *testing.T) {
92
94
}
93
95
94
96
metadataResponse = new (MetadataResponse )
97
+ metadataResponse .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
95
98
metadataResponse .AddTopic ("unknown" , ErrUnknownTopicOrPartition )
96
99
seedBroker .Returns (metadataResponse )
97
100
@@ -111,6 +114,7 @@ func TestClientDoesntCachePartitionsForTopicsWithErrors(t *testing.T) {
111
114
}
112
115
113
116
metadataResponse = new (MetadataResponse )
117
+ metadataResponse .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
114
118
metadataResponse .AddTopic ("unknown" , ErrUnknownTopicOrPartition )
115
119
seedBroker .Returns (metadataResponse )
116
120
@@ -358,6 +362,7 @@ func TestClientReceivingUnknownTopicWithBackoffFunc(t *testing.T) {
358
362
seedBroker := NewMockBroker (t , 1 )
359
363
360
364
metadataResponse1 := new (MetadataResponse )
365
+ metadataResponse1 .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
361
366
seedBroker .Returns (metadataResponse1 )
362
367
363
368
retryCount := int32 (0 )
@@ -375,6 +380,7 @@ func TestClientReceivingUnknownTopicWithBackoffFunc(t *testing.T) {
375
380
376
381
metadataUnknownTopic := new (MetadataResponse )
377
382
metadataUnknownTopic .AddTopic ("new_topic" , ErrUnknownTopicOrPartition )
383
+ metadataUnknownTopic .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
378
384
seedBroker .Returns (metadataUnknownTopic )
379
385
seedBroker .Returns (metadataUnknownTopic )
380
386
@@ -395,6 +401,7 @@ func TestClientReceivingUnknownTopic(t *testing.T) {
395
401
seedBroker := NewMockBroker (t , 1 )
396
402
397
403
metadataResponse1 := new (MetadataResponse )
404
+ metadataResponse1 .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
398
405
seedBroker .Returns (metadataResponse1 )
399
406
400
407
config := NewTestConfig ()
@@ -406,6 +413,7 @@ func TestClientReceivingUnknownTopic(t *testing.T) {
406
413
}
407
414
408
415
metadataUnknownTopic := new (MetadataResponse )
416
+ metadataUnknownTopic .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
409
417
metadataUnknownTopic .AddTopic ("new_topic" , ErrUnknownTopicOrPartition )
410
418
seedBroker .Returns (metadataUnknownTopic )
411
419
seedBroker .Returns (metadataUnknownTopic )
@@ -481,6 +489,53 @@ func TestClientReceivingPartialMetadata(t *testing.T) {
481
489
leader .Close ()
482
490
}
483
491
492
+ func TestClientRefreshBehaviourWhenEmptyMetadataResponse (t * testing.T ) {
493
+ seedBroker := NewMockBroker (t , 1 )
494
+ broker := NewMockBroker (t , 2 )
495
+
496
+ metadataResponse1 := new (MetadataResponse )
497
+ metadataResponse1 .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
498
+ seedBroker .Returns (metadataResponse1 )
499
+
500
+ c , err := NewClient ([]string {seedBroker .Addr ()}, NewTestConfig ())
501
+ if err != nil {
502
+ t .Fatal (err )
503
+ }
504
+ client := c .(* client )
505
+ if len (client .seedBrokers ) != 1 {
506
+ t .Error ("incorrect number of live seeds" )
507
+ }
508
+ if len (client .deadSeeds ) != 0 {
509
+ t .Error ("incorrect number of dead seeds" )
510
+ }
511
+ if len (client .brokers ) != 1 {
512
+ t .Error ("incorrect number of brokers" )
513
+ }
514
+
515
+ // Empty metadata response
516
+ seedBroker .Returns (new (MetadataResponse ))
517
+ metadataResponse2 := new (MetadataResponse )
518
+ metadataResponse2 .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
519
+ metadataResponse2 .AddBroker (broker .Addr (), broker .BrokerID ())
520
+ seedBroker .Returns (metadataResponse2 )
521
+ err = c .RefreshMetadata ()
522
+ if err != nil {
523
+ t .Fatal (err )
524
+ }
525
+ if len (client .seedBrokers ) != 1 {
526
+ t .Error ("incorrect number of live seeds" )
527
+ }
528
+ if len (client .deadSeeds ) != 0 {
529
+ t .Error ("incorrect number of dead seeds" )
530
+ }
531
+ if len (client .brokers ) != 2 {
532
+ t .Error ("incorrect number of brokers" )
533
+ }
534
+ broker .Close ()
535
+ seedBroker .Close ()
536
+ safeClose (t , client )
537
+ }
538
+
484
539
func TestClientRefreshBehaviour (t * testing.T ) {
485
540
seedBroker := NewMockBroker (t , 1 )
486
541
leader := NewMockBroker (t , 5 )
@@ -633,8 +688,9 @@ func TestClientGetBroker(t *testing.T) {
633
688
634
689
func TestClientResurrectDeadSeeds (t * testing.T ) {
635
690
initialSeed := NewMockBroker (t , 0 )
636
- emptyMetadata := new (MetadataResponse )
637
- initialSeed .Returns (emptyMetadata )
691
+ metadataResponse := new (MetadataResponse )
692
+ metadataResponse .AddBroker (initialSeed .Addr (), initialSeed .BrokerID ())
693
+ initialSeed .Returns (metadataResponse )
638
694
639
695
conf := NewTestConfig ()
640
696
conf .Metadata .Retry .Backoff = 0
@@ -643,7 +699,6 @@ func TestClientResurrectDeadSeeds(t *testing.T) {
643
699
if err != nil {
644
700
t .Fatal (err )
645
701
}
646
- initialSeed .Close ()
647
702
648
703
client := c .(* client )
649
704
@@ -658,6 +713,7 @@ func TestClientResurrectDeadSeeds(t *testing.T) {
658
713
safeClose (t , client .seedBrokers [0 ])
659
714
client .seedBrokers = []* Broker {NewBroker (addr1 ), NewBroker (addr2 ), NewBroker (addr3 )}
660
715
client .deadSeeds = []* Broker {}
716
+ client .brokers = map [int32 ]* Broker {}
661
717
662
718
wg := sync.WaitGroup {}
663
719
wg .Add (1 )
@@ -676,7 +732,9 @@ func TestClientResurrectDeadSeeds(t *testing.T) {
676
732
seed3 .Close ()
677
733
678
734
seed1 .Close ()
679
- seed2 .Returns (emptyMetadata )
735
+ metadataResponse2 := new (MetadataResponse )
736
+ metadataResponse2 .AddBroker (seed2 .Addr (), seed2 .BrokerID ())
737
+ seed2 .Returns (metadataResponse2 )
680
738
681
739
wg .Wait ()
682
740
@@ -767,6 +825,7 @@ func TestClientMetadataTimeout(t *testing.T) {
767
825
// Use a responsive broker to create a working client
768
826
initialSeed := NewMockBroker (t , 0 )
769
827
emptyMetadata := new (MetadataResponse )
828
+ emptyMetadata .AddBroker (initialSeed .Addr (), initialSeed .BrokerID ())
770
829
initialSeed .Returns (emptyMetadata )
771
830
772
831
conf := NewTestConfig ()
@@ -996,6 +1055,7 @@ func TestClientCoordinatorWithoutConsumerOffsetsTopic(t *testing.T) {
996
1055
coordinator := NewMockBroker (t , 2 )
997
1056
998
1057
metadataResponse1 := new (MetadataResponse )
1058
+ metadataResponse1 .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
999
1059
seedBroker .Returns (metadataResponse1 )
1000
1060
1001
1061
config := NewTestConfig ()
@@ -1011,11 +1071,13 @@ func TestClientCoordinatorWithoutConsumerOffsetsTopic(t *testing.T) {
1011
1071
seedBroker .Returns (coordinatorResponse1 )
1012
1072
1013
1073
metadataResponse2 := new (MetadataResponse )
1074
+ metadataResponse2 .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
1014
1075
metadataResponse2 .AddTopic ("__consumer_offsets" , ErrUnknownTopicOrPartition )
1015
1076
seedBroker .Returns (metadataResponse2 )
1016
1077
1017
1078
replicas := []int32 {coordinator .BrokerID ()}
1018
1079
metadataResponse3 := new (MetadataResponse )
1080
+ metadataResponse3 .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
1019
1081
metadataResponse3 .AddTopicPartition ("__consumer_offsets" , 0 , replicas [0 ], replicas , replicas , []int32 {}, ErrNoError )
1020
1082
seedBroker .Returns (metadataResponse3 )
1021
1083
@@ -1049,6 +1111,7 @@ func TestClientAutorefreshShutdownRace(t *testing.T) {
1049
1111
defer seedBroker .Close ()
1050
1112
1051
1113
metadataResponse := new (MetadataResponse )
1114
+ metadataResponse .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
1052
1115
seedBroker .Returns (metadataResponse )
1053
1116
1054
1117
conf := NewTestConfig ()
@@ -1105,7 +1168,9 @@ func TestClientConnectionRefused(t *testing.T) {
1105
1168
func TestClientCoordinatorConnectionRefused (t * testing.T ) {
1106
1169
t .Parallel ()
1107
1170
seedBroker := NewMockBroker (t , 1 )
1108
- seedBroker .Returns (new (MetadataResponse ))
1171
+ metadataResponse := new (MetadataResponse )
1172
+ metadataResponse .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
1173
+ seedBroker .Returns (metadataResponse )
1109
1174
1110
1175
client , err := NewClient ([]string {seedBroker .Addr ()}, NewTestConfig ())
1111
1176
if err != nil {
@@ -1130,7 +1195,10 @@ func TestClientCoordinatorConnectionRefused(t *testing.T) {
1130
1195
func TestInitProducerIDConnectionRefused (t * testing.T ) {
1131
1196
t .Parallel ()
1132
1197
seedBroker := NewMockBroker (t , 1 )
1133
- seedBroker .Returns (& MetadataResponse {Version : 4 })
1198
+ metadataResponse := new (MetadataResponse )
1199
+ metadataResponse .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
1200
+ metadataResponse .Version = 4
1201
+ seedBroker .Returns (metadataResponse )
1134
1202
1135
1203
config := NewTestConfig ()
1136
1204
config .Producer .Idempotent = true
@@ -1161,7 +1229,9 @@ func TestInitProducerIDConnectionRefused(t *testing.T) {
1161
1229
func TestMetricsCleanup (t * testing.T ) {
1162
1230
seedBroker := NewMockBroker (t , 1 )
1163
1231
defer seedBroker .Close ()
1164
- seedBroker .Returns (new (MetadataResponse ))
1232
+ metadataResponse := new (MetadataResponse )
1233
+ metadataResponse .AddBroker (seedBroker .Addr (), seedBroker .BrokerID ())
1234
+ seedBroker .Returns (metadataResponse )
1165
1235
1166
1236
config := NewTestConfig ()
1167
1237
metrics .GetOrRegisterMeter ("a" , config .MetricRegistry )
0 commit comments