mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
ringbuffer: add tests and benchmarks
This commit is contained in:
12
Makefile
12
Makefile
@@ -13,6 +13,7 @@ help:
|
|||||||
@echo " format format source files"
|
@echo " format format source files"
|
||||||
@echo " test run tests"
|
@echo " test run tests"
|
||||||
@echo " lint run linter"
|
@echo " lint run linter"
|
||||||
|
@echo " bench run benchmarks"
|
||||||
@echo ""
|
@echo ""
|
||||||
|
|
||||||
blank :=
|
blank :=
|
||||||
@@ -65,3 +66,14 @@ lint:
|
|||||||
docker run --rm -v $(PWD):/app -w /app \
|
docker run --rm -v $(PWD):/app -w /app \
|
||||||
$(LINT_IMAGE) \
|
$(LINT_IMAGE) \
|
||||||
golangci-lint run -v
|
golangci-lint run -v
|
||||||
|
|
||||||
|
bench:
|
||||||
|
echo "$$DOCKERFILE_TEST" | docker build -q . -f - -t temp
|
||||||
|
docker run --rm -it \
|
||||||
|
--network=host \
|
||||||
|
--name temp \
|
||||||
|
temp \
|
||||||
|
make bench-nodocker
|
||||||
|
|
||||||
|
bench-nodocker:
|
||||||
|
go test -bench=. -v ./pkg/ringbuffer
|
||||||
|
114
pkg/ringbuffer/ringbuffer_test.go
Normal file
114
pkg/ringbuffer/ringbuffer_test.go
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
package ringbuffer
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math/rand"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestPushBeforePull(t *testing.T) {
|
||||||
|
r := New(1024)
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
|
data := make([]byte, 1024)
|
||||||
|
rand.Read(data)
|
||||||
|
|
||||||
|
r.Push(data)
|
||||||
|
ret, ok := r.Pull()
|
||||||
|
require.Equal(t, true, ok)
|
||||||
|
require.Equal(t, data, ret)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPullBeforePush(t *testing.T) {
|
||||||
|
r := New(1024)
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
|
data := make([]byte, 1024)
|
||||||
|
rand.Read(data)
|
||||||
|
|
||||||
|
done := make(chan struct{})
|
||||||
|
go func() {
|
||||||
|
defer close(done)
|
||||||
|
ret, ok := r.Pull()
|
||||||
|
require.Equal(t, true, ok)
|
||||||
|
require.Equal(t, data, ret)
|
||||||
|
}()
|
||||||
|
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
|
||||||
|
r.Push(data)
|
||||||
|
<-done
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkPushPullContinuous(b *testing.B) {
|
||||||
|
r := New(1024 * 8)
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
|
data := make([]byte, 1024)
|
||||||
|
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
done := make(chan struct{})
|
||||||
|
go func() {
|
||||||
|
defer close(done)
|
||||||
|
for i := 0; i < 1024*8; i++ {
|
||||||
|
r.Push(data)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
for i := 0; i < 1024*8; i++ {
|
||||||
|
r.Pull()
|
||||||
|
}
|
||||||
|
|
||||||
|
<-done
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkPushPullPaused5(b *testing.B) {
|
||||||
|
r := New(128)
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
|
data := make([]byte, 1024)
|
||||||
|
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
done := make(chan struct{})
|
||||||
|
go func() {
|
||||||
|
defer close(done)
|
||||||
|
for i := 0; i < 128; i++ {
|
||||||
|
r.Push(data)
|
||||||
|
time.Sleep(5 * time.Millisecond)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
for i := 0; i < 128; i++ {
|
||||||
|
r.Pull()
|
||||||
|
}
|
||||||
|
|
||||||
|
<-done
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkPushPullPaused10(b *testing.B) {
|
||||||
|
r := New(1024 * 8)
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
|
data := make([]byte, 1024)
|
||||||
|
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
done := make(chan struct{})
|
||||||
|
go func() {
|
||||||
|
defer close(done)
|
||||||
|
for i := 0; i < 128; i++ {
|
||||||
|
r.Push(data)
|
||||||
|
time.Sleep(10 * time.Millisecond)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
for i := 0; i < 128; i++ {
|
||||||
|
r.Pull()
|
||||||
|
}
|
||||||
|
|
||||||
|
<-done
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user