|
@@ -1,6 +1,7 @@
|
|
|
package sarama
|
|
|
|
|
|
import (
|
|
|
+ "bytes"
|
|
|
"fmt"
|
|
|
"math"
|
|
|
"math/rand"
|
|
@@ -62,6 +63,27 @@ func TestBalanceStrategyRange(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func TestBalanceStrategyRangeAssignmentData(t *testing.T) {
|
|
|
+
|
|
|
+ strategy := BalanceStrategyRange
|
|
|
+
|
|
|
+ members := make(map[string]ConsumerGroupMemberMetadata, 2)
|
|
|
+ members["consumer1"] = ConsumerGroupMemberMetadata{
|
|
|
+ Topics: []string{"topic1"},
|
|
|
+ }
|
|
|
+ members["consumer2"] = ConsumerGroupMemberMetadata{
|
|
|
+ Topics: []string{"topic1"},
|
|
|
+ }
|
|
|
+
|
|
|
+ actual, err := strategy.AssignmentData("consumer1", map[string][]int32{"topic1": {0, 1}}, 1)
|
|
|
+ if err != nil {
|
|
|
+ t.Errorf("Error building assignment data: %v", err)
|
|
|
+ }
|
|
|
+ if actual != nil {
|
|
|
+ t.Error("Invalid assignment data returned from AssignmentData")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func TestBalanceStrategyRoundRobin(t *testing.T) {
|
|
|
tests := []struct {
|
|
|
members map[string][]string
|
|
@@ -191,6 +213,27 @@ func Test_deserializeTopicPartitionAssignment(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func TestBalanceStrategyRoundRobinAssignmentData(t *testing.T) {
|
|
|
+
|
|
|
+ strategy := BalanceStrategyRoundRobin
|
|
|
+
|
|
|
+ members := make(map[string]ConsumerGroupMemberMetadata, 2)
|
|
|
+ members["consumer1"] = ConsumerGroupMemberMetadata{
|
|
|
+ Topics: []string{"topic1"},
|
|
|
+ }
|
|
|
+ members["consumer2"] = ConsumerGroupMemberMetadata{
|
|
|
+ Topics: []string{"topic1"},
|
|
|
+ }
|
|
|
+
|
|
|
+ actual, err := strategy.AssignmentData("consumer1", map[string][]int32{"topic1": {0, 1}}, 1)
|
|
|
+ if err != nil {
|
|
|
+ t.Errorf("Error building assignment data: %v", err)
|
|
|
+ }
|
|
|
+ if actual != nil {
|
|
|
+ t.Error("Invalid assignment data returned from AssignmentData")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func Test_prepopulateCurrentAssignments(t *testing.T) {
|
|
|
type args struct {
|
|
|
members map[string]ConsumerGroupMemberMetadata
|
|
@@ -1950,6 +1993,29 @@ func Test_stickyBalanceStrategy_Plan_ConflictingPreviousAssignments(t *testing.T
|
|
|
verifyFullyBalanced(t, plan)
|
|
|
}
|
|
|
|
|
|
+func Test_stickyBalanceStrategy_Plan_AssignmentData(t *testing.T) {
|
|
|
+
|
|
|
+ s := &stickyBalanceStrategy{}
|
|
|
+
|
|
|
+ members := make(map[string]ConsumerGroupMemberMetadata, 2)
|
|
|
+ members["consumer1"] = ConsumerGroupMemberMetadata{
|
|
|
+ Topics: []string{"topic1"},
|
|
|
+ }
|
|
|
+ members["consumer2"] = ConsumerGroupMemberMetadata{
|
|
|
+ Topics: []string{"topic1"},
|
|
|
+ }
|
|
|
+
|
|
|
+ expected := encodeSubscriberPlanWithGeneration(t, map[string][]int32{"topic1": {0, 1}}, 1)
|
|
|
+
|
|
|
+ actual, err := s.AssignmentData("consumer1", map[string][]int32{"topic1": {0, 1}}, 1)
|
|
|
+ if err != nil {
|
|
|
+ t.Errorf("Error building assignment data: %v", err)
|
|
|
+ }
|
|
|
+ if bytes.Compare(expected, actual) != 0 {
|
|
|
+ t.Error("Invalid assignment data returned from AssignmentData")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func BenchmarkStickAssignmentWithLargeNumberOfConsumersAndTopics(b *testing.B) {
|
|
|
s := &stickyBalanceStrategy{}
|
|
|
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|