From 7939f07f3476f5286db6498d25fca7e773747d29 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Thu, 25 Jun 2026 23:02:42 +0100 Subject: [PATCH] benchmark file --- README.md | 4 +++ mockserver/replay_test.go | 58 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 mockserver/replay_test.go diff --git a/README.md b/README.md index 1f6672c..03837a3 100644 --- a/README.md +++ b/README.md @@ -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 -X` + +### Benchmark +Run with: +`go test -bench=. -benchmem` diff --git a/mockserver/replay_test.go b/mockserver/replay_test.go new file mode 100644 index 0000000..4cfee00 --- /dev/null +++ b/mockserver/replay_test.go @@ -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() + } +}