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  }