- Integration: two-node localhost handshake + encrypted message exchange + controller ping/pong + UEPS packet routing via dispatcher + threat circuit breaker + graceful shutdown (3 test functions) - Benchmarks: 13 benchmarks across node/ and ueps/ — identity keygen, ECDH shared secret, message serialise, SMSG encrypt/decrypt, HMAC challenge sign/verify, KD-tree peer scoring, UEPS marshal/unmarshal, bufpool throughput, challenge generation - bufpool: 9 tests — get/put round-trip, buffer reuse, large buffer eviction, concurrent access (race-safe), buffer independence, MarshalJSON correctness + concurrency Co-Authored-By: Virgil <virgil@lethean.io>
116 lines
2.8 KiB
Go
116 lines
2.8 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|