github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/kafka/consumergroup/consumer_group_test.go (about) 1 package consumergroup 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/wvanbergen/kazoo-go" 8 ) 9 10 func createTestConsumerGroupInstanceList(size int) kazoo.ConsumergroupInstanceList { 11 k := make(kazoo.ConsumergroupInstanceList, size) 12 for i := range k { 13 k[i] = &kazoo.ConsumergroupInstance{ID: fmt.Sprintf("consumer%d", i)} 14 } 15 return k 16 } 17 18 func createTestPartitions(count int) []partitionLeader { 19 p := make([]partitionLeader, count) 20 for i := range p { 21 p[i] = partitionLeader{id: int32(i), leader: 1, partition: &kazoo.Partition{ID: int32(i)}} 22 } 23 return p 24 } 25 26 func Skip_Test_PartitionDivision(t *testing.T) { 27 consumerPartitionTestCases := [][2]int{ 28 // {number of Consumers, number of Partitions} 29 [2]int{2, 5}, 30 [2]int{5, 2}, 31 [2]int{9, 32}, 32 [2]int{10, 50}, 33 } 34 for _, v := range consumerPartitionTestCases { 35 consumers := createTestConsumerGroupInstanceList(v[0]) 36 partitions := createTestPartitions(v[1]) 37 division := dividePartitionsBetweenConsumers(consumers, partitions) 38 39 // make sure every partition is used once 40 grouping := make(map[int32]struct{}) 41 maxConsumed := 0 42 minConsumed := len(partitions) + 1 43 for _, v := range division { 44 if len(v) > maxConsumed { 45 maxConsumed = len(v) 46 } 47 if len(v) < minConsumed { 48 minConsumed = len(v) 49 } 50 for _, partition := range v { 51 if _, ok := grouping[partition.ID]; ok { 52 t.Errorf("PartitionDivision: Partition %v was assigned more than once!", partition.ID) 53 } else { 54 grouping[partition.ID] = struct{}{} 55 } 56 } 57 } 58 if len(grouping) != len(partitions) { 59 t.Errorf("PartitionDivision: Expected to divide %d partitions among consumers, but only %d partitions were consumed.", len(partitions), len(grouping)) 60 } 61 if (maxConsumed - minConsumed) > 1 { 62 t.Errorf("PartitionDivision: Partitions weren't divided evenly, consumers shouldn't have a difference of more than 1 in the number of partitions consumed (was %d).", maxConsumed-minConsumed) 63 } 64 if minConsumed > 1 && len(consumers) != len(division) { 65 t.Errorf("PartitionDivision: Partitions weren't divided evenly, some consumers didn't get any paritions even though there were %d partitions and %d consumers.", len(partitions), len(consumers)) 66 } 67 } 68 }