Skip to content

Commit c032fe4

Browse files
authored
Merge pull request #1576 from dnwe/fix-describe-include-synonyms
fix: set DescribeConfigRequest Version field
2 parents 94fa8ff + 9ba6d8e commit c032fe4

File tree

3 files changed

+98
-43
lines changed

3 files changed

+98
-43
lines changed

admin.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,6 @@ func dependsOnSpecificNode(resource ConfigResource) bool {
452452
}
453453

454454
func (ca *clusterAdmin) DescribeConfig(resource ConfigResource) ([]ConfigEntry, error) {
455-
456455
var entries []ConfigEntry
457456
var resources []*ConfigResource
458457
resources = append(resources, &resource)
@@ -461,6 +460,14 @@ func (ca *clusterAdmin) DescribeConfig(resource ConfigResource) ([]ConfigEntry,
461460
Resources: resources,
462461
}
463462

463+
if ca.conf.Version.IsAtLeast(V1_1_0_0) {
464+
request.Version = 1
465+
}
466+
467+
if ca.conf.Version.IsAtLeast(V2_0_0_0) {
468+
request.Version = 2
469+
}
470+
464471
var (
465472
b *Broker
466473
err error

admin_test.go

Lines changed: 49 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ package sarama
22

33
import (
44
"errors"
5-
"fmt"
6-
"io/ioutil"
7-
"log"
8-
"os"
95
"strings"
106
"testing"
117
)
@@ -492,35 +488,64 @@ func TestClusterAdminDescribeConfig(t *testing.T) {
492488
"DescribeConfigsRequest": NewMockDescribeConfigsResponse(t),
493489
})
494490

495-
config := NewConfig()
496-
config.Version = V1_0_0_0
497-
admin, err := NewClusterAdmin([]string{seedBroker.Addr()}, config)
498-
if err != nil {
499-
t.Fatal(err)
500-
}
491+
var tests = []struct {
492+
saramaVersion KafkaVersion
493+
requestVersion int16
494+
includeSynonyms bool
495+
}{
496+
{V1_0_0_0, 0, false},
497+
{V1_1_0_0, 1, true},
498+
{V1_1_1_0, 1, true},
499+
{V2_0_0_0, 2, true},
500+
}
501+
for _, tt := range tests {
502+
config := NewConfig()
503+
config.Version = tt.saramaVersion
504+
admin, err := NewClusterAdmin([]string{seedBroker.Addr()}, config)
505+
if err != nil {
506+
t.Fatal(err)
507+
}
508+
defer func() {
509+
_ = admin.Close()
510+
}()
511+
512+
resource := ConfigResource{
513+
Name: "r1",
514+
Type: TopicResource,
515+
ConfigNames: []string{"my_topic"},
516+
}
501517

502-
resource := ConfigResource{Name: "r1", Type: TopicResource, ConfigNames: []string{"my_topic"}}
503-
entries, err := admin.DescribeConfig(resource)
504-
if err != nil {
505-
t.Fatal(err)
506-
}
518+
entries, err := admin.DescribeConfig(resource)
519+
if err != nil {
520+
t.Fatal(err)
521+
}
507522

508-
if len(entries) <= 0 {
509-
t.Fatal(errors.New("no resource present"))
510-
}
523+
history := seedBroker.History()
524+
describeReq, ok := history[len(history)-1].Request.(*DescribeConfigsRequest)
525+
if !ok {
526+
t.Fatal("failed to find DescribeConfigsRequest in mockBroker history")
527+
}
511528

512-
err = admin.Close()
513-
if err != nil {
514-
t.Fatal(err)
529+
if describeReq.Version != tt.requestVersion {
530+
t.Fatalf(
531+
"requestVersion %v did not match expected %v",
532+
describeReq.Version, tt.requestVersion)
533+
}
534+
535+
if len(entries) <= 0 {
536+
t.Fatal(errors.New("no resource present"))
537+
}
538+
if tt.includeSynonyms {
539+
if len(entries[0].Synonyms) == 0 {
540+
t.Fatal("expected synonyms to have been included")
541+
}
542+
}
515543
}
516544
}
517545

518546
// TestClusterAdminDescribeBrokerConfig ensures that a describe broker config
519547
// is sent to the broker in the resource struct, _not_ the controller
520548
func TestClusterAdminDescribeBrokerConfig(t *testing.T) {
521-
Logger = log.New(os.Stdout, fmt.Sprintf("[%s] ", t.Name()), log.LstdFlags)
522-
defer func() { Logger = log.New(ioutil.Discard, "[Sarama] ", log.LstdFlags) }()
523-
524549
controllerBroker := NewMockBroker(t, 1)
525550
defer controllerBroker.Close()
526551
configBroker := NewMockBroker(t, 2)

mockresponses.go

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,11 @@ func NewMockDescribeConfigsResponse(t TestReporter) *MockDescribeConfigsResponse
731731

732732
func (mr *MockDescribeConfigsResponse) For(reqBody versionedDecoder) encoder {
733733
req := reqBody.(*DescribeConfigsRequest)
734-
res := &DescribeConfigsResponse{}
734+
res := &DescribeConfigsResponse{
735+
Version: req.Version,
736+
}
737+
738+
includeSynonyms := (req.Version > 0)
735739

736740
for _, r := range req.Resources {
737741
var configEntries []*ConfigEntry
@@ -763,23 +767,42 @@ func (mr *MockDescribeConfigsResponse) For(reqBody versionedDecoder) encoder {
763767
Configs: configEntries,
764768
})
765769
case TopicResource:
766-
configEntries = append(configEntries,
767-
&ConfigEntry{Name: "max.message.bytes",
768-
Value: "1000000",
769-
ReadOnly: false,
770-
Default: true,
771-
Sensitive: false,
772-
}, &ConfigEntry{Name: "retention.ms",
773-
Value: "5000",
774-
ReadOnly: false,
775-
Default: false,
776-
Sensitive: false,
777-
}, &ConfigEntry{Name: "password",
778-
Value: "12345",
779-
ReadOnly: false,
780-
Default: false,
781-
Sensitive: true,
782-
})
770+
maxMessageBytes := &ConfigEntry{Name: "max.message.bytes",
771+
Value: "1000000",
772+
ReadOnly: false,
773+
Default: true,
774+
Sensitive: false,
775+
}
776+
if includeSynonyms {
777+
maxMessageBytes.Synonyms = []*ConfigSynonym{
778+
{
779+
ConfigName: "max.message.bytes",
780+
ConfigValue: "500000",
781+
},
782+
}
783+
}
784+
retentionMs := &ConfigEntry{Name: "retention.ms",
785+
Value: "5000",
786+
ReadOnly: false,
787+
Default: false,
788+
Sensitive: false,
789+
}
790+
if includeSynonyms {
791+
retentionMs.Synonyms = []*ConfigSynonym{
792+
{
793+
ConfigName: "log.retention.ms",
794+
ConfigValue: "2500",
795+
},
796+
}
797+
}
798+
password := &ConfigEntry{Name: "password",
799+
Value: "12345",
800+
ReadOnly: false,
801+
Default: false,
802+
Sensitive: true,
803+
}
804+
configEntries = append(
805+
configEntries, maxMessageBytes, retentionMs, password)
783806
res.Resources = append(res.Resources, &ResourceResponse{
784807
Name: r.Name,
785808
Configs: configEntries,

0 commit comments

Comments
 (0)