github.com/lingyao2333/mo-zero@v1.4.1/core/queue/balancedpusher_test.go (about) 1 package queue 2 3 import ( 4 "fmt" 5 "strconv" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestBalancedQueuePusher(t *testing.T) { 12 const numPushers = 100 13 var pushers []Pusher 14 var mockedPushers []*mockedPusher 15 for i := 0; i < numPushers; i++ { 16 p := &mockedPusher{ 17 name: "pusher:" + strconv.Itoa(i), 18 } 19 pushers = append(pushers, p) 20 mockedPushers = append(mockedPushers, p) 21 } 22 23 pusher := NewBalancedPusher(pushers) 24 assert.True(t, len(pusher.Name()) > 0) 25 26 for i := 0; i < numPushers*1000; i++ { 27 assert.Nil(t, pusher.Push("item")) 28 } 29 30 var counts []int 31 for _, p := range mockedPushers { 32 counts = append(counts, p.count) 33 } 34 mean := calcMean(counts) 35 variance := calcVariance(mean, counts) 36 assert.True(t, variance < 100, fmt.Sprintf("too big variance - %.2f", variance)) 37 } 38 39 func TestBalancedQueuePusher_NoAvailable(t *testing.T) { 40 pusher := NewBalancedPusher(nil) 41 assert.True(t, len(pusher.Name()) == 0) 42 assert.Equal(t, ErrNoAvailablePusher, pusher.Push("item")) 43 }