github.com/lingyao2333/mo-zero@v1.4.1/core/queue/multipusher_test.go (about)

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