aboutsummaryrefslogtreecommitdiff
path: root/server_test.go
diff options
context:
space:
mode:
authorGravatar Sergio VS <savsgio.engineer@gmail.com> 2021-11-23 11:12:06 +0100
committerGravatar GitHub <noreply@github.com> 2021-11-23 11:12:06 +0100
commit017f0aa09d7fd802bd1760836e329734ea642180 (patch)
tree0ee5205c9f2aabf753d620a5204afedb085f5b37 /server_test.go
parentfeat: close idle connections when server shutdown (#1155) (diff)
downloadfasthttp-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.go46
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()