58 lines
2.0 KiB
Go
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")
|
|
}
|
|
}
|