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") } }