@@ -411,3 +411,68 @@ func TestLeastBytes(t *testing.T) {
411411 })
412412 }
413413}
414+
415+ func TestRoundRobin (t * testing.T ) {
416+ testCases := map [string ]struct {
417+ Partitions []int
418+ ChunkSize int
419+ }{
420+ "default - odd partition count" : {
421+ Partitions : []int {0 , 1 , 2 , 3 , 4 , 5 , 6 },
422+ },
423+ "negative chunk size - odd partition count" : {
424+ Partitions : []int {0 , 1 , 2 , 3 , 4 , 5 , 6 },
425+ ChunkSize : - 1 ,
426+ },
427+ "0 chunk size - odd partition count" : {
428+ Partitions : []int {0 , 1 , 2 , 3 , 4 , 5 , 6 },
429+ ChunkSize : 0 ,
430+ },
431+ "5 chunk size - odd partition count" : {
432+ Partitions : []int {0 , 1 , 2 , 3 , 4 , 5 , 6 },
433+ ChunkSize : 5 ,
434+ },
435+ "12 chunk size - odd partition count" : {
436+ Partitions : []int {0 , 1 , 2 , 3 , 4 , 5 , 6 },
437+ ChunkSize : 12 ,
438+ },
439+ "default - even partition count" : {
440+ Partitions : []int {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
441+ },
442+ "negative chunk size - even partition count" : {
443+ Partitions : []int {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
444+ ChunkSize : - 1 ,
445+ },
446+ "0 chunk size - even partition count" : {
447+ Partitions : []int {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
448+ ChunkSize : 0 ,
449+ },
450+ "5 chunk size - even partition count" : {
451+ Partitions : []int {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
452+ ChunkSize : 5 ,
453+ },
454+ "12 chunk size - even partition count" : {
455+ Partitions : []int {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 },
456+ ChunkSize : 12 ,
457+ },
458+ }
459+ for label , test := range testCases {
460+ t .Run (label , func (t * testing.T ) {
461+ lb := & RoundRobin {ChunkSize : test .ChunkSize }
462+ msg := Message {}
463+ var partition int
464+ var i int
465+ expectedChunkSize := test .ChunkSize
466+ if expectedChunkSize < 1 {
467+ expectedChunkSize = 1
468+ }
469+ partitions := test .Partitions
470+ for i = 0 ; i < 50 ; i ++ {
471+ partition = lb .Balance (msg , partitions ... )
472+ if partition != i / expectedChunkSize % len (partitions ) {
473+ t .Error ("Returned partition" , partition , "expecting" , i / expectedChunkSize % len (partitions ))
474+ }
475+ }
476+ })
477+ }
478+ }
0 commit comments