github.com/streamdal/segmentio-kafka-go@v0.4.47-streamdal/describegroups_test.go (about)

     1  package kafka
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"os"
     7  	"reflect"
     8  	"sort"
     9  	"testing"
    10  	"time"
    11  )
    12  
    13  func TestClientDescribeGroups(t *testing.T) {
    14  	if os.Getenv("KAFKA_VERSION") == "2.3.1" {
    15  		// There's a bug in 2.3.1 that causes the MemberMetadata to be in the wrong format and thus
    16  		// leads to an error when decoding the DescribeGroupsResponse.
    17  		//
    18  		// See https://issues.apache.org/jira/browse/KAFKA-9150 for details.
    19  		t.Skip("Skipping because kafka version is 2.3.1")
    20  	}
    21  
    22  	client, shutdown := newLocalClient()
    23  	defer shutdown()
    24  
    25  	topic := makeTopic()
    26  	gid := fmt.Sprintf("%s-test-group", topic)
    27  
    28  	createTopic(t, topic, 2)
    29  	defer deleteTopic(t, topic)
    30  
    31  	w := newTestWriter(WriterConfig{
    32  		Topic: topic,
    33  	})
    34  
    35  	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    36  	defer cancel()
    37  
    38  	err := w.WriteMessages(
    39  		ctx,
    40  		Message{
    41  			Key:   []byte("key"),
    42  			Value: []byte("value"),
    43  		},
    44  	)
    45  
    46  	if err != nil {
    47  		t.Fatal(err)
    48  	}
    49  
    50  	r := NewReader(ReaderConfig{
    51  		Brokers:  []string{"localhost:9092"},
    52  		Topic:    topic,
    53  		GroupID:  gid,
    54  		MinBytes: 10,
    55  		MaxBytes: 1000,
    56  	})
    57  	_, err = r.ReadMessage(ctx)
    58  	if err != nil {
    59  		t.Fatal(err)
    60  	}
    61  
    62  	resp, err := client.DescribeGroups(
    63  		ctx,
    64  		&DescribeGroupsRequest{
    65  			GroupIDs: []string{gid},
    66  		},
    67  	)
    68  	if err != nil {
    69  		t.Fatal(err)
    70  	}
    71  	if len(resp.Groups) != 1 {
    72  		t.Fatal(
    73  			"Unexpected number of groups returned",
    74  			"expected", 1,
    75  			"got", len(resp.Groups),
    76  		)
    77  	}
    78  	g := resp.Groups[0]
    79  	if g.Error != nil {
    80  		t.Error(
    81  			"Wrong error in group response",
    82  			"expected", nil,
    83  			"got", g.Error,
    84  		)
    85  	}
    86  
    87  	if g.GroupID != gid {
    88  		t.Error(
    89  			"Wrong groupID",
    90  			"expected", gid,
    91  			"got", g.GroupID,
    92  		)
    93  	}
    94  
    95  	if len(g.Members) != 1 {
    96  		t.Fatal(
    97  			"Wrong group members length",
    98  			"expected", 1,
    99  			"got", len(g.Members),
   100  		)
   101  	}
   102  	if len(g.Members[0].MemberAssignments.Topics) != 1 {
   103  		t.Fatal(
   104  			"Wrong topics length",
   105  			"expected", 1,
   106  			"got", len(g.Members[0].MemberAssignments.Topics),
   107  		)
   108  	}
   109  	mt := g.Members[0].MemberAssignments.Topics[0]
   110  	if mt.Topic != topic {
   111  		t.Error(
   112  			"Wrong member assignment topic",
   113  			"expected", topic,
   114  			"got", mt.Topic,
   115  		)
   116  	}
   117  
   118  	// Partitions can be in any order, sort them
   119  	sort.Slice(mt.Partitions, func(a, b int) bool {
   120  		return mt.Partitions[a] < mt.Partitions[b]
   121  	})
   122  
   123  	if !reflect.DeepEqual([]int{0, 1}, mt.Partitions) {
   124  		t.Error(
   125  			"Wrong member assignment partitions",
   126  			"expected", []int{0, 1},
   127  			"got", mt.Partitions,
   128  		)
   129  	}
   130  }