forked from segmentio/kafka-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
balancer_test.go
56 lines (53 loc) · 1.04 KB
/
balancer_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package kafka
import (
"hash"
"hash/crc32"
"testing"
)
func TestHashBalancer(t *testing.T) {
testCases := map[string]struct {
Key []byte
Hasher hash.Hash32
Partitions []int
Partition int
}{
"nil": {
Key: nil,
Partitions: []int{0, 1, 2},
Partition: 0,
},
"partition-0": {
Key: []byte("blah"),
Partitions: []int{0, 1},
Partition: 0,
},
"partition-1": {
Key: []byte("blah"),
Partitions: []int{0, 1, 2},
Partition: 1,
},
"partition-2": {
Key: []byte("boop"),
Partitions: []int{0, 1, 2},
Partition: 2,
},
"custom hash": {
Key: []byte("boop"),
Hasher: crc32.NewIEEE(),
Partitions: []int{0, 1, 2},
Partition: 1,
},
}
for label, test := range testCases {
t.Run(label, func(t *testing.T) {
msg := Message{Key: test.Key}
h := Hash{
Hasher: test.Hasher,
}
partition := h.Balance(msg, test.Partitions...)
if partition != test.Partition {
t.Errorf("expected %v; got %v", test.Partition, partition)
}
})
}
}