X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2b8fc576e242c0b8658eef9f1130143e009efc4d..57792708500261a817e6957e65c80c7f798a36e9:/sdk/go/httpserver/logger_test.go diff --git a/sdk/go/httpserver/logger_test.go b/sdk/go/httpserver/logger_test.go index b623aa4eea..60768b3fc9 100644 --- a/sdk/go/httpserver/logger_test.go +++ b/sdk/go/httpserver/logger_test.go @@ -9,6 +9,8 @@ import ( "context" "encoding/json" "fmt" + "io/ioutil" + "net" "net/http" "net/http/httptest" "testing" @@ -70,6 +72,32 @@ func (s *Suite) TestWithDeadline(c *check.C) { c.Check(resp.Body.String(), check.Equals, "ok") } +func (s *Suite) TestNoDeadlineAfterHijacked(c *check.C) { + srv := Server{ + Addr: ":", + Server: http.Server{ + Handler: HandlerWithDeadline(time.Millisecond, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + conn, _, err := w.(http.Hijacker).Hijack() + c.Assert(err, check.IsNil) + defer conn.Close() + select { + case <-req.Context().Done(): + c.Error("request context done too soon") + case <-time.After(time.Second / 10): + conn.Write([]byte("HTTP/1.1 200 OK\r\n\r\nok")) + } + })), + BaseContext: func(net.Listener) context.Context { return s.ctx }, + }, + } + srv.Start() + defer srv.Close() + resp, err := http.Get("http://" + srv.Addr) + c.Assert(err, check.IsNil) + body, err := ioutil.ReadAll(resp.Body) + c.Check(string(body), check.Equals, "ok") +} + func (s *Suite) TestLogRequests(c *check.C) { h := AddRequestIDs(LogRequests( http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {