Files
minio/docs/investigations/r8/evidence/baseline_test.go.txt
Feng Ruohang 055030ea53 fix(http): honor configured request header deadlines
Signed-off-by: Feng Ruohang <rh@vonng.com>
(cherry picked from commit 0d48d32d7e038ae1ea5966f3d7e0cb86780a6311)
Signed-off-by: Feng Ruohang <rh@vonng.com>
2026-09-16 00:37:56 +08:00

64 lines
1.9 KiB
Plaintext

package http
import (
"bufio"
"context"
"io"
"net"
stdhttp "net/http"
"testing"
"time"
)
func TestReviewR8AbsoluteHeaderTimeout(t *testing.T) {
for _, wrapped := range []bool{false, true} {
name := "standard-net-http"
if wrapped {
name = "silo-listener"
}
t.Run(name, func(t *testing.T) {
handler := stdhttp.HandlerFunc(func(w stdhttp.ResponseWriter, r *stdhttp.Request) { w.WriteHeader(204) })
var addr string
if wrapped {
srv := NewServer([]string{"127.0.0.1:0"}).UseHandler(handler).
UseTCPOptions(TCPOptions{IdleTimeout: 2 * time.Second}).
UseReadHeaderTimeout(100 * time.Millisecond).UseReadTimeout(2 * time.Second).UseWriteTimeout(2 * time.Second)
serve, err := srv.Init(context.Background(), func(_ string, err error) { t.Error(err) })
if err != nil {
t.Fatal(err)
}
addr = srv.listener.Addr().String()
go serve()
defer srv.Server.Close()
} else {
ln, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatal(err)
}
srv := &stdhttp.Server{Handler: handler, ReadHeaderTimeout: 100 * time.Millisecond, ReadTimeout: 2 * time.Second, WriteTimeout: 2 * time.Second}
addr = ln.Addr().String()
go srv.Serve(ln)
defer srv.Close()
}
conn, err := net.DialTimeout("tcp", addr, time.Second)
if err != nil {
t.Fatal(err)
}
defer conn.Close()
conn.SetDeadline(time.Now().Add(3 * time.Second))
if _, err := io.WriteString(conn, "GET / HTTP/1.1\r\nHost: localhost\r\nX-Slow: "); err != nil {
t.Fatal(err)
}
time.Sleep(400 * time.Millisecond)
io.WriteString(conn, "done\r\nConnection: close\r\n\r\n")
resp, err := stdhttp.ReadResponse(bufio.NewReader(conn), nil)
if err != nil {
t.Logf("request rejected after header timeout: %v", err)
return
}
defer resp.Body.Close()
t.Errorf("100ms request-header deadline accepted header completed after 400ms: HTTP %d", resp.StatusCode)
})
}
}