51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
package feature
|
|
|
|
import (
|
|
"bytes"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"bd2server/internal/fixture"
|
|
"bd2server/internal/wire"
|
|
)
|
|
|
|
// TestCaptureCompatibility is an optional development-time protocol audit.
|
|
// Normal server execution never opens the capture.
|
|
func TestCaptureCompatibility(t *testing.T) {
|
|
root := filepath.Join("..", "..", "..", "data", "capture", "2.34.13", "20260920-003254")
|
|
set, err := fixture.Load(root)
|
|
if err != nil {
|
|
t.Skipf("optional capture unavailable: %v", err)
|
|
}
|
|
key, err := set.SessionKey()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for batch := 1; batch <= 2; batch++ {
|
|
body, err := set.BatchResponse(batch)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
items, decoded, err := fixture.DecodeBatch(body, []byte(key))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, item := range items {
|
|
if _, _, handled, err := Handle(item.Path, wire.AppendVarint(nil, 1, 1)); err != nil || !handled {
|
|
t.Logf("batch=%d pending domain endpoint=%s", batch, item.Path)
|
|
}
|
|
if _, known := EmptyPacketCodes()[item.Path]; known {
|
|
if len(decoded[item.Path]) != 0 {
|
|
t.Errorf("%s captured protobuf was not empty", item.Path)
|
|
}
|
|
}
|
|
if _, _, known := initialResponse(item.Path); known {
|
|
code, generated, handled, err := Handle(item.Path, wire.AppendVarint(nil, 1, 1))
|
|
if err != nil || !handled || code != item.Response.PacketCode || !bytes.Equal(generated, decoded[item.Path]) {
|
|
t.Errorf("%s native response differs from observed 2.34.13 new account: code=%d vs %d proto=%x vs %x err=%v", item.Path, code, item.Response.PacketCode, generated, decoded[item.Path], err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|