go-p2p/ueps/bench_test.go

117 lines
2.8 KiB
Go
Raw Normal View History

package ueps
import (
"bufio"
"bytes"
"testing"
)
// benchSecret is a deterministic shared secret for reproducible benchmarks.
var benchSecret = []byte("bench-shared-secret-32-bytes!!!!")
// BenchmarkPacketBuild measures UEPS PacketBuilder marshal + HMAC signing.
func BenchmarkPacketBuild(b *testing.B) {
payload := bytes.Repeat([]byte("A"), 256)
b.ReportAllocs()
b.ResetTimer()
for b.Loop() {
builder := NewBuilder(0x20, payload)
_, err := builder.MarshalAndSign(benchSecret)
if err != nil {
b.Fatalf("MarshalAndSign: %v", err)
}
}
}
// BenchmarkPacketRead measures UEPS ReadAndVerify (unmarshal + HMAC verification).
func BenchmarkPacketRead(b *testing.B) {
payload := bytes.Repeat([]byte("B"), 256)
builder := NewBuilder(0x20, payload)
frame, err := builder.MarshalAndSign(benchSecret)
if err != nil {
b.Fatalf("MarshalAndSign: %v", err)
}
b.ReportAllocs()
b.ResetTimer()
for b.Loop() {
reader := bufio.NewReader(bytes.NewReader(frame))
_, err := ReadAndVerify(reader, benchSecret)
if err != nil {
b.Fatalf("ReadAndVerify: %v", err)
}
}
}
// BenchmarkPacketRoundTrip measures full build + read + verify cycle.
func BenchmarkPacketRoundTrip(b *testing.B) {
payload := []byte("round-trip benchmark payload data")
b.ReportAllocs()
b.ResetTimer()
for b.Loop() {
builder := NewBuilder(0x01, payload)
frame, err := builder.MarshalAndSign(benchSecret)
if err != nil {
b.Fatalf("MarshalAndSign: %v", err)
}
_, err = ReadAndVerify(bufio.NewReader(bytes.NewReader(frame)), benchSecret)
if err != nil {
b.Fatalf("ReadAndVerify: %v", err)
}
}
}
// BenchmarkPacketBuild_LargePayload measures marshalling with a 4KB payload.
func BenchmarkPacketBuild_LargePayload(b *testing.B) {
payload := bytes.Repeat([]byte("X"), 4096)
b.ReportAllocs()
b.ResetTimer()
for b.Loop() {
builder := NewBuilder(0xFF, payload)
_, err := builder.MarshalAndSign(benchSecret)
if err != nil {
b.Fatalf("MarshalAndSign: %v", err)
}
}
}
// BenchmarkPacketRead_LargePayload measures reading/verifying a 4KB payload.
func BenchmarkPacketRead_LargePayload(b *testing.B) {
payload := bytes.Repeat([]byte("Y"), 4096)
builder := NewBuilder(0xFF, payload)
frame, err := builder.MarshalAndSign(benchSecret)
if err != nil {
b.Fatalf("MarshalAndSign: %v", err)
}
b.ReportAllocs()
b.ResetTimer()
for b.Loop() {
_, err := ReadAndVerify(bufio.NewReader(bytes.NewReader(frame)), benchSecret)
if err != nil {
b.Fatalf("ReadAndVerify: %v", err)
}
}
}
// BenchmarkPacketBuild_EmptyPayload measures overhead with zero-length payload.
func BenchmarkPacketBuild_EmptyPayload(b *testing.B) {
b.ReportAllocs()
for b.Loop() {
builder := NewBuilder(0x01, nil)
_, err := builder.MarshalAndSign(benchSecret)
if err != nil {
b.Fatalf("MarshalAndSign: %v", err)
}
}
}