diff --git a/context.go b/context.go index 6b25b3a31d..326129d6ac 100644 --- a/context.go +++ b/context.go @@ -1156,28 +1156,22 @@ func (c *Context) SetAccepted(formats ...string) { /***** GOLANG.ORG/X/NET/CONTEXT *****/ /************************************/ -// Deadline returns that there is no deadline (ok==false) when c.Request has no Context. +// Deadline always returns that there is no deadline (ok==false), +// maybe you want to use Request.Context().Deadline() instead. func (c *Context) Deadline() (deadline time.Time, ok bool) { - if c.Request == nil || c.Request.Context() == nil { - return - } - return c.Request.Context().Deadline() + return } -// Done returns nil (chan which will wait forever) when c.Request has no Context. +// Done always returns nil (chan which will wait forever), +// if you want to abort your work when the connection was closed +// you should use Request.Context().Done() instead. func (c *Context) Done() <-chan struct{} { - if c.Request == nil || c.Request.Context() == nil { - return nil - } - return c.Request.Context().Done() + return nil } -// Err returns nil when c.Request has no Context. +// Err always returns nil, maybe you want to use Request.Context().Err() instead. func (c *Context) Err() error { - if c.Request == nil || c.Request.Context() == nil { - return nil - } - return c.Request.Context().Err() + return nil } // Value returns the value associated with this context for key, or nil diff --git a/context_test.go b/context_test.go index f9f0c1dc19..20d0ad583a 100644 --- a/context_test.go +++ b/context_test.go @@ -2096,51 +2096,9 @@ func TestRemoteIPFail(t *testing.T) { assert.False(t, trust) } -func TestContextWithFallbackDeadlineFromRequestContext(t *testing.T) { - c := &Context{} - deadline, ok := c.Deadline() - assert.Zero(t, deadline) - assert.False(t, ok) - - c2 := &Context{} - c2.Request, _ = http.NewRequest(http.MethodGet, "/", nil) - d := time.Now().Add(time.Second) - ctx, cancel := context.WithDeadline(context.Background(), d) - defer cancel() - c2.Request = c2.Request.WithContext(ctx) - deadline, ok = c2.Deadline() - assert.Equal(t, d, deadline) - assert.True(t, ok) -} - -func TestContextWithFallbackDoneFromRequestContext(t *testing.T) { - c := &Context{} - assert.Nil(t, c.Done()) - - c2 := &Context{} - c2.Request, _ = http.NewRequest(http.MethodGet, "/", nil) - ctx, cancel := context.WithCancel(context.Background()) - c2.Request = c2.Request.WithContext(ctx) - cancel() - assert.NotNil(t, <-c2.Done()) -} - -func TestContextWithFallbackErrFromRequestContext(t *testing.T) { - c := &Context{} - assert.Nil(t, c.Err()) - - c2 := &Context{} - c2.Request, _ = http.NewRequest(http.MethodGet, "/", nil) - ctx, cancel := context.WithCancel(context.Background()) - c2.Request = c2.Request.WithContext(ctx) - cancel() - - assert.EqualError(t, c2.Err(), context.Canceled.Error()) -} - -type contextKey string - func TestContextWithFallbackValueFromRequestContext(t *testing.T) { + type contextKey string + tests := []struct { name string getContextAndKey func() (*Context, any)