Files
rvbox/internal/client/supervisor/windows/launcher_protocol_test.go
T

58 lines
2.0 KiB
Go

package windows
import (
"bytes"
"testing"
)
func TestLauncherFrameRoundTripAndGenerationFence_HP_LAUNCH_06(t *testing.T) {
var generation [16]byte
for index := range generation {
generation[index] = byte(index + 1)
}
original := launcherFrame{Kind: launcherFrameLaunch, Generation: generation, Payload: []byte("bounded launch request")}
encoded, err := marshalLauncherFrame(original)
if err != nil {
t.Fatal(err)
}
decoded, err := readLauncherFrame(bytes.NewReader(encoded), generation)
if err != nil {
t.Fatal(err)
}
if decoded.Kind != original.Kind || !bytes.Equal(decoded.Payload, original.Payload) {
t.Fatalf("decoded frame = %#v, want %#v", decoded, original)
}
wrong := generation
wrong[0]++
if _, err := readLauncherFrame(bytes.NewReader(encoded), wrong); err == nil {
t.Fatal("frame with a different generation was accepted")
}
}
func TestLauncherFrameRejectsChecksumLengthAndKind_BH_LAUNCH_06(t *testing.T) {
var generation [16]byte
encoded, err := marshalLauncherFrame(launcherFrame{Kind: launcherFrameHello, Generation: generation, Payload: []byte("hello")})
if err != nil {
t.Fatal(err)
}
encoded[len(encoded)-1] ^= 1
if _, err := readLauncherFrame(bytes.NewReader(encoded), generation); err == nil {
t.Fatal("checksum-corrupted frame was accepted")
}
encoded, err = marshalLauncherFrame(launcherFrame{Kind: launcherFrameHello, Generation: generation, Payload: nil})
if err != nil {
t.Fatal(err)
}
encoded[6] = 0xff
encoded[7] = 0xff
if _, err := readLauncherFrame(bytes.NewReader(encoded), generation); err == nil {
t.Fatal("invalid frame kind was accepted")
}
if _, err := marshalLauncherFrame(launcherFrame{Kind: launcherFrameAbort, Generation: generation, Payload: make([]byte, launcherMaxFrameBytes+1)}); err == nil {
t.Fatal("oversized launcher payload was accepted")
}
if _, err := readLauncherFrame(bytes.NewReader(encoded[:len(encoded)-1]), generation); err == nil {
t.Fatal("truncated launcher frame was accepted")
}
}