lnpeer/write_buffer_pool_test: adds basic write buffer pool test
This commit is contained in:
parent
0670db2c3d
commit
40c5e5e19f
67
lnpeer/write_buffer_pool_test.go
Normal file
67
lnpeer/write_buffer_pool_test.go
Normal file
@ -0,0 +1,67 @@
|
||||
package lnpeer_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/lightningnetwork/lnd/lnpeer"
|
||||
)
|
||||
|
||||
// TestWriteBufferPool verifies that buffer pool properly resets used write
|
||||
// buffers.
|
||||
func TestWriteBufferPool(t *testing.T) {
|
||||
const (
|
||||
gcInterval = time.Second
|
||||
expiryInterval = 250 * time.Millisecond
|
||||
)
|
||||
|
||||
bp := lnpeer.NewWriteBufferPool(gcInterval, expiryInterval)
|
||||
|
||||
// Take a fresh write buffer from the pool.
|
||||
writeBuf := bp.Take()
|
||||
|
||||
// Dirty the write buffer.
|
||||
for i := range writeBuf[:] {
|
||||
writeBuf[i] = 0xff
|
||||
}
|
||||
|
||||
// Return the buffer to the pool.
|
||||
bp.Return(writeBuf)
|
||||
|
||||
// Take buffers from the pool until we find the original. We expect at
|
||||
// most two, in the even that a fresh buffer is populated after the
|
||||
// first is taken.
|
||||
for i := 0; i < 2; i++ {
|
||||
// Wait a small duration to ensure the tests behave reliable,
|
||||
// and don't activate the non-blocking case unintentionally.
|
||||
<-time.After(time.Millisecond)
|
||||
|
||||
// Take a buffer, skipping those whose pointer does not match
|
||||
// the one we dirtied.
|
||||
writeBuf2 := bp.Take()
|
||||
if writeBuf2 != writeBuf {
|
||||
continue
|
||||
}
|
||||
|
||||
// Finally, verify that the buffer has been properly cleaned.
|
||||
for i := range writeBuf2[:] {
|
||||
if writeBuf2[i] != 0 {
|
||||
t.Fatalf("buffer was not recycled")
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
t.Fatalf("original buffer not found")
|
||||
}
|
||||
|
||||
// BenchmarkWriteBufferRecycle tests how quickly a WriteBuffer can be zeroed.
|
||||
func BenchmarkWriteBufferRecycle(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
|
||||
buffer := new(lnpeer.WriteBuffer)
|
||||
for i := 0; i < b.N; i++ {
|
||||
buffer.Recycle()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user