http3: qlog the frame length and payload length of parsed frames (#5380)

This commit is contained in:
Marten Seemann
2025-10-12 16:58:32 +08:00
committed by GitHub
parent ce12204bc3
commit b7d987f5e4
12 changed files with 132 additions and 76 deletions

View File

@@ -24,6 +24,7 @@ import (
"github.com/quic-go/quic-go"
"github.com/quic-go/quic-go/http3/qlog"
"github.com/quic-go/quic-go/qlogwriter"
"github.com/quic-go/quic-go/quicvarint"
"github.com/stretchr/testify/require"
)
@@ -328,3 +329,27 @@ func filterQlogEventsForFrame(events []qlogwriter.Event, frame any) []qlogwriter
}
return filtered
}
func expectedFrameLength(t *testing.T, frame any) (length, payloadLength int) {
t.Helper()
switch f := frame.(type) {
case *dataFrame:
return len(f.Append(nil)) + int(f.Length), int(f.Length)
case *headersFrame:
return len(f.Append(nil)) + int(f.Length), int(f.Length)
case *goAwayFrame:
return len(f.Append(nil)), quicvarint.Len(uint64(f.StreamID))
case *settingsFrame:
data := f.Append(nil)
r := bytes.NewReader(data)
_, err := quicvarint.Read(r) // type
require.NoError(t, err)
_, err = quicvarint.Read(r) // length
require.NoError(t, err)
return len(data), r.Len()
default:
t.Fatalf("unexpected frame type: %T", frame)
}
panic("unreachable")
}