benchmark file

This commit is contained in:
2026-06-25 23:02:42 +01:00
parent 4d05e636b6
commit 7939f07f34
2 changed files with 62 additions and 0 deletions
+4
View File
@@ -21,3 +21,7 @@ To start recording:
## Development
Use `tcpdump` to listen to the socket and check if data is coming through:
`tcpdump -i any udp port <port> -X`
### Benchmark
Run with:
`go test -bench=. -benchmem`
+58
View File
@@ -0,0 +1,58 @@
package mockserver
import (
"context"
"net"
"os"
"testing"
)
func BenchmarkReplayAsync(b *testing.B) {
// Dummy socket
addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:0")
if err != nil {
b.Fatalf("failed to resolve UDP address: %v", err)
}
listener, err := net.ListenUDP("udp", addr)
if err != nil {
b.Fatalf("failed to start background UDP listener: %v", err)
}
defer listener.Close()
// Drain the socket
go func() {
buf := make([]byte, 65535)
for {
_, _, err := listener.ReadFrom(buf)
if err != nil {
return
}
}
}()
// Extract the random port assigned by the OS
assignedAddr := listener.LocalAddr().(*net.UDPAddr)
// Get the file path
filePath := "sunburstManual.bin"
if _, err := os.Stat(filePath); os.IsNotExist(err) {
filePath = "../" + filePath
}
// Reset the timer
b.ResetTimer()
// Benchmark loop
for i := 0; i < b.N; i++ {
ctx, cancel := context.WithCancel(context.Background())
err := Replay(ctx, assignedAddr.IP.String(), assignedAddr.Port, false, filePath)
if err != nil {
cancel()
b.Fatalf("Replay failed during benchmark run: %v", err)
}
cancel()
}
}