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)
}
})
}
}
|