Files
Mellaris/analyzer/udp/internal/quic/payload_test.go
hayzam fdfe61457c
Some checks failed
Quality check / Static analysis (push) Has been cancelled
Quality check / Tests (push) Has been cancelled
analyzer: make http3/quic handling more reliable
2026-02-11 15:32:29 +05:30

58 lines
1.6 KiB
Go

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