51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
package protocol
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
func TestXORHeaderProfilesRoundTrip(t *testing.T) {
|
|
for n := 0; n < 256; n++ {
|
|
mask := byte(n)
|
|
if ('U'^mask)&7 < 5 {
|
|
continue
|
|
}
|
|
|
|
var request bytes.Buffer
|
|
if err := WriteRequestFrameProfile(&request, 7, []byte("CPROBE -"), mask); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
requestID, _, payload, err := ReadRequestFrameProfile(&request, mask)
|
|
if err != nil || requestID != 7 || !bytes.Equal(payload, []byte("CPROBE -")) {
|
|
t.Fatalf("mask %02x request did not round-trip: id=%d payload=%q err=%v", mask, requestID, payload, err)
|
|
}
|
|
|
|
var response bytes.Buffer
|
|
if err := WriteResponseFrameProfile(&response, 7, []byte("PROBEOK"), mask); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
responseID, payload, err := ReadResponseFrameProfile(&response, mask)
|
|
if err != nil || responseID != 7 || !bytes.Equal(payload, []byte("PROBEOK")) {
|
|
t.Fatalf("mask %02x response did not round-trip: id=%d payload=%q err=%v", mask, responseID, payload, err)
|
|
}
|
|
}
|
|
}
|
|
|
|
type profiledBuffer struct {
|
|
bytes.Buffer
|
|
mask byte
|
|
}
|
|
|
|
func (b *profiledBuffer) HeaderMask() byte { return b.mask }
|
|
|
|
func TestServerResponseUsesConnectionProfile(t *testing.T) {
|
|
profiled := &profiledBuffer{mask: 0x3a}
|
|
if err := WriteResponseFrame(profiled, 9, []byte("ok")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := profiled.Bytes()[0]; got != 'O'^profiled.mask {
|
|
t.Fatalf("first byte=%02x, want %02x", got, byte('O')^profiled.mask)
|
|
}
|
|
}
|