|
1 | 1 | package http3 |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "bytes" |
4 | 5 | "fmt" |
5 | 6 | "net/http" |
6 | 7 | "testing" |
@@ -452,3 +453,39 @@ func TestResponseTrailerParsingValidation(t *testing.T) { |
452 | 453 | _, err := parseTrailers(headers) |
453 | 454 | require.EqualError(t, err, "http3: received pseudo header in trailer: :status") |
454 | 455 | } |
| 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