Files
Mellaris/analyzer/udp/internal/quic/payload_test.go
hayzam 43cb4755d0
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:49:32 +05:30

69 lines
2.0 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])
}
}
func TestReadCryptoFrames_NonInitialHeader(t *testing.T) {
// Short header packet marker should be rejected as non-initial.
_, err := ReadCryptoFrames([]byte{0x40, 0x01, 0x02, 0x03, 0x04})
if err == nil {
t.Fatal("ReadCryptoFrames() error = nil, want non-nil")
}
if err.Error() != ErrNotInitialPacket.Error() {
t.Fatalf("ReadCryptoFrames() error = %v, want %v", err, ErrNotInitialPacket)
}
}