Skip to content

Commit 2fc9705

Browse files
http3: add a benchmark for header parsing (#5435)
1 parent dafdd6f commit 2fc9705

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

http3/headers_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package http3
22

33
import (
4+
"bytes"
45
"fmt"
56
"net/http"
67
"testing"
@@ -452,3 +453,39 @@ func TestResponseTrailerParsingValidation(t *testing.T) {
452453
_, err := parseTrailers(headers)
453454
require.EqualError(t, err, "http3: received pseudo header in trailer: :status")
454455
}
456+
457+
func BenchmarkRequestFromHeaders(b *testing.B) {
458+
b.ReportAllocs()
459+
460+
headers := []qpack.HeaderField{
461+
{Name: ":path", Value: "/api/v1/users/12345"},
462+
{Name: ":authority", Value: "quic-go.net"},
463+
{Name: ":method", Value: http.MethodPost},
464+
{Name: "content-type", Value: "application/json"},
465+
{Name: "content-length", Value: "1024"},
466+
{Name: "user-agent", Value: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15"},
467+
{Name: "accept", Value: "application/json, text/plain, */*"},
468+
{Name: "accept-encoding", Value: "gzip, deflate, br"},
469+
{Name: "accept-language", Value: "en-US,en;q=0.9"},
470+
{Name: "cache-control", Value: "no-cache"},
471+
{Name: "cookie", Value: "session_id=abc123"},
472+
{Name: "cookie", Value: "user_pref=dark_mode"},
473+
{Name: "referer", Value: "https://quic-go.net/docs/http3/"},
474+
}
475+
var buf bytes.Buffer
476+
enc := qpack.NewEncoder(&buf)
477+
for _, hf := range headers {
478+
require.NoError(b, enc.WriteField(hf))
479+
}
480+
481+
dec := qpack.NewDecoder(func(f qpack.HeaderField) {})
482+
for b.Loop() {
483+
hfs, err := dec.DecodeFull(buf.Bytes())
484+
if err != nil {
485+
b.Fatalf("failed to decode headers: %v", err)
486+
}
487+
if _, err := requestFromHeaders(hfs); err != nil {
488+
b.Fatalf("failed to parse request: %v", err)
489+
}
490+
}
491+
}

0 commit comments

Comments
 (0)