mirror of
https://github.com/joohoi/acme-dns.git
synced 2025-01-24 01:35:43 +07:00
95 lines
1.7 KiB
Go
95 lines
1.7 KiB
Go
package bytebufferpool
|
|
|
|
import (
|
|
"math/rand"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestIndex(t *testing.T) {
|
|
testIndex(t, 0, 0)
|
|
testIndex(t, 1, 0)
|
|
|
|
testIndex(t, minSize-1, 0)
|
|
testIndex(t, minSize, 0)
|
|
testIndex(t, minSize+1, 1)
|
|
|
|
testIndex(t, 2*minSize-1, 1)
|
|
testIndex(t, 2*minSize, 1)
|
|
testIndex(t, 2*minSize+1, 2)
|
|
|
|
testIndex(t, maxSize-1, steps-1)
|
|
testIndex(t, maxSize, steps-1)
|
|
testIndex(t, maxSize+1, steps-1)
|
|
}
|
|
|
|
func testIndex(t *testing.T, n, expectedIdx int) {
|
|
idx := index(n)
|
|
if idx != expectedIdx {
|
|
t.Fatalf("unexpected idx for n=%d: %d. Expecting %d", n, idx, expectedIdx)
|
|
}
|
|
}
|
|
|
|
func TestPoolCalibrate(t *testing.T) {
|
|
for i := 0; i < steps*calibrateCallsThreshold; i++ {
|
|
n := 1004
|
|
if i%15 == 0 {
|
|
n = rand.Intn(15234)
|
|
}
|
|
testGetPut(t, n)
|
|
}
|
|
}
|
|
|
|
func TestPoolVariousSizesSerial(t *testing.T) {
|
|
testPoolVariousSizes(t)
|
|
}
|
|
|
|
func TestPoolVariousSizesConcurrent(t *testing.T) {
|
|
concurrency := 5
|
|
ch := make(chan struct{})
|
|
for i := 0; i < concurrency; i++ {
|
|
go func() {
|
|
testPoolVariousSizes(t)
|
|
ch <- struct{}{}
|
|
}()
|
|
}
|
|
for i := 0; i < concurrency; i++ {
|
|
select {
|
|
case <-ch:
|
|
case <-time.After(3 * time.Second):
|
|
t.Fatalf("timeout")
|
|
}
|
|
}
|
|
}
|
|
|
|
func testPoolVariousSizes(t *testing.T) {
|
|
for i := 0; i < steps+1; i++ {
|
|
n := (1 << uint32(i))
|
|
|
|
testGetPut(t, n)
|
|
testGetPut(t, n+1)
|
|
testGetPut(t, n-1)
|
|
|
|
for j := 0; j < 10; j++ {
|
|
testGetPut(t, j+n)
|
|
}
|
|
}
|
|
}
|
|
|
|
func testGetPut(t *testing.T, n int) {
|
|
bb := Get()
|
|
if len(bb.B) > 0 {
|
|
t.Fatalf("non-empty byte buffer returned from acquire")
|
|
}
|
|
bb.B = allocNBytes(bb.B, n)
|
|
Put(bb)
|
|
}
|
|
|
|
func allocNBytes(dst []byte, n int) []byte {
|
|
diff := n - cap(dst)
|
|
if diff <= 0 {
|
|
return dst[:n]
|
|
}
|
|
return append(dst, make([]byte, diff)...)
|
|
}
|