diff options
author | Sergio VS <savsgio.engineer@gmail.com> | 2021-11-23 11:12:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-23 11:12:06 +0100 |
commit | 017f0aa09d7fd802bd1760836e329734ea642180 (patch) | |
tree | 0ee5205c9f2aabf753d620a5204afedb085f5b37 /server_test.go | |
parent | feat: close idle connections when server shutdown (#1155) (diff) | |
download | fasthttp-017f0aa09d7fd802bd1760836e329734ea642180.tar.gz fasthttp-017f0aa09d7fd802bd1760836e329734ea642180.tar.bz2 fasthttp-017f0aa09d7fd802bd1760836e329734ea642180.zip |
fix: reset request after reset user values on keep-alive connections (#1162)
* fix: reset request after reset user values on keep-alive connections
* test: add test for reset request after reset user values
Diffstat (limited to 'server_test.go')
-rw-r--r-- | server_test.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/server_test.go b/server_test.go index 5678022..b42197c 100644 --- a/server_test.go +++ b/server_test.go @@ -25,6 +25,15 @@ import ( // Make sure RequestCtx implements context.Context var _ context.Context = &RequestCtx{} +type closerWithRequestCtx struct { + ctx *RequestCtx + closeFunc func(ctx *RequestCtx) error +} + +func (c *closerWithRequestCtx) Close() error { + return c.closeFunc(c.ctx) +} + func TestServerCRNLAfterPost_Pipeline(t *testing.T) { t.Parallel() @@ -2032,6 +2041,43 @@ func TestRequestCtxWriteString(t *testing.T) { } } +func TestServeConnKeepRequestValuesUntilResetUserValues(t *testing.T) { + t.Parallel() + + reqStr := "POST /foo HTTP/1.0\r\nHost: google.com\r\nContent-Type: application/octet-stream\r\nContent-Length: 0\r\nConnection: keep-alive\r\n\r\n" + + rw := &readWriter{} + rw.r.WriteString(reqStr) + + var resultReqStr string + + ch := make(chan struct{}) + go func() { + err := ServeConn(rw, func(ctx *RequestCtx) { + ctx.SetUserValue("myKey", &closerWithRequestCtx{ + ctx: ctx, + closeFunc: func(closerCtx *RequestCtx) error { + resultReqStr = closerCtx.Request.String() + return nil + }}) + }) + if err != nil { + t.Errorf("unexpected error in ServeConn: %s", err) + } + close(ch) + }() + + select { + case <-ch: + case <-time.After(time.Second): + t.Fatal("timeout") + } + + if resultReqStr != reqStr { + t.Errorf("Request == %s, want %s", resultReqStr, reqStr) + } +} + func TestServeConnNonHTTP11KeepAlive(t *testing.T) { t.Parallel() |