package quic import ( "bytes" "testing" ) func TestExtractCryptoFrames_Interleaved(t *testing.T) { // PADDING, CRYPTO(offset=0,"abc"), PING, STREAM(len=2), CRYPTO(offset=3,"de") payload := []byte{ 0x00, 0x06, 0x00, 0x03, 'a', 'b', 'c', 0x01, 0x0a, 0x01, 0x02, 'z', 'z', 0x06, 0x03, 0x02, 'd', 'e', } frames, err := extractCryptoFrames(bytes.NewReader(payload)) if err != nil { t.Fatalf("extractCryptoFrames() error = %v", err) } if len(frames) != 2 { t.Fatalf("extractCryptoFrames() len = %d, want 2", len(frames)) } if frames[0].Offset != 0 || string(frames[0].Data) != "abc" { t.Fatalf("frame0 = %+v, want offset=0 data=abc", frames[0]) } if frames[1].Offset != 3 || string(frames[1].Data) != "de" { t.Fatalf("frame1 = %+v, want offset=3 data=de", frames[1]) } } func TestExtractCryptoFrames_UnsupportedFrame(t *testing.T) { // 0x20 is currently unsupported in this parser. _, err := extractCryptoFrames(bytes.NewReader([]byte{0x20})) if err == nil { t.Fatal("extractCryptoFrames() error = nil, want non-nil") } } func TestExtractCryptoFrames_UnknownAfterCrypto(t *testing.T) { // CRYPTO(offset=0,"abc"), then unknown frame type 0x20. payload := []byte{ 0x06, 0x00, 0x03, 'a', 'b', 'c', 0x20, } frames, err := extractCryptoFrames(bytes.NewReader(payload)) if err != nil { t.Fatalf("extractCryptoFrames() error = %v", err) } if len(frames) != 1 { t.Fatalf("extractCryptoFrames() len = %d, want 1", len(frames)) } if frames[0].Offset != 0 || string(frames[0].Data) != "abc" { t.Fatalf("frame0 = %+v, want offset=0 data=abc", frames[0]) } }