Skip to content

Commit

Permalink
Revert "context: inherits context cancelation and deadline from http.…
Browse files Browse the repository at this point in the history
…Request context for Go>=1.7 (#1690)" (#1736)

This reverts commit f67d7a9.
  • Loading branch information
thinkerou authored Jan 9, 2019
1 parent d8fb18c commit 29a145c
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 118 deletions.
28 changes: 28 additions & 0 deletions context.go
Original file line number Diff line number Diff line change
Expand Up @@ -942,6 +942,34 @@ func (c *Context) SetAccepted(formats ...string) {
c.Accepted = formats
}

/************************************/
/***** GOLANG.ORG/X/NET/CONTEXT *****/
/************************************/

// Deadline returns the time when work done on behalf of this context
// should be canceled. Deadline returns ok==false when no deadline is
// set. Successive calls to Deadline return the same results.
func (c *Context) Deadline() (deadline time.Time, ok bool) {
return
}

// Done returns a channel that's closed when work done on behalf of this
// context should be canceled. Done may return nil if this context can
// never be canceled. Successive calls to Done return the same value.
func (c *Context) Done() <-chan struct{} {
return nil
}

// Err returns a non-nil error value after Done is closed,
// successive calls to Err return the same error.
// If Done is not yet closed, Err returns nil.
// If Done is closed, Err returns a non-nil error explaining why:
// Canceled if the context was canceled
// or DeadlineExceeded if the context's deadline passed.
func (c *Context) Err() error {
return nil
}

// Value returns the value associated with this context for key, or nil
// if no value is associated with key. Successive calls to Value with
// the same key returns the same result.
Expand Down
30 changes: 0 additions & 30 deletions context_17.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
package gin

import (
"time"

"github.com/gin-gonic/gin/render"
)

Expand All @@ -17,31 +15,3 @@ import (
func (c *Context) PureJSON(code int, obj interface{}) {
c.Render(code, render.PureJSON{Data: obj})
}

/************************************/
/***** GOLANG.ORG/X/NET/CONTEXT *****/
/************************************/

// Deadline returns the time when work done on behalf of this context
// should be canceled. Deadline returns ok==false when no deadline is
// set. Successive calls to Deadline return the same results.
func (c *Context) Deadline() (time.Time, bool) {
return c.Request.Context().Deadline()
}

// Done returns a channel that's closed when work done on behalf of this
// context should be canceled. Done may return nil if this context can
// never be canceled. Successive calls to Done return the same value.
func (c *Context) Done() <-chan struct{} {
return c.Request.Context().Done()
}

// Err returns a non-nil error value after Done is closed,
// successive calls to Err return the same error.
// If Done is not yet closed, Err returns nil.
// If Done is closed, Err returns a non-nil error explaining why:
// Canceled if the context was canceled
// or DeadlineExceeded if the context's deadline passed.
func (c *Context) Err() error {
return c.Request.Context().Err()
}
49 changes: 0 additions & 49 deletions context_17_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,9 @@
package gin

import (
"bytes"
"context"
"net/http"
"net/http/httptest"
"testing"
"time"

"github.com/stretchr/testify/assert"
)
Expand All @@ -28,49 +25,3 @@ func TestContextRenderPureJSON(t *testing.T) {
assert.Equal(t, "{\"foo\":\"bar\",\"html\":\"<b>\"}\n", w.Body.String())
assert.Equal(t, "application/json; charset=utf-8", w.Header().Get("Content-Type"))
}

func TestContextHTTPContext(t *testing.T) {
c, _ := CreateTestContext(httptest.NewRecorder())
req, _ := http.NewRequest("POST", "/", bytes.NewBufferString("{\"foo\":\"bar\", \"bar\":\"foo\"}"))
ctx, cancelFunc := context.WithCancel(context.Background())
defer cancelFunc()
c.Request = req.WithContext(ctx)

assert.NoError(t, c.Err())
assert.NotNil(t, c.Done())
select {
case <-c.Done():
assert.Fail(t, "context should not be canceled")
default:
}

ti, ok := c.Deadline()
assert.Equal(t, ti, time.Time{})
assert.False(t, ok)
assert.Equal(t, c.Value(0), c.Request)

cancelFunc()
assert.NotNil(t, c.Done())
select {
case <-c.Done():
default:
assert.Fail(t, "context should be canceled")
}
}

func TestContextHTTPContextWithDeadline(t *testing.T) {
c, _ := CreateTestContext(httptest.NewRecorder())
req, _ := http.NewRequest("POST", "/", bytes.NewBufferString("{\"foo\":\"bar\", \"bar\":\"foo\"}"))
location, _ := time.LoadLocation("Europe/Paris")
assert.NotNil(t, location)
date := time.Date(2031, 12, 27, 16, 00, 00, 00, location)
ctx, cancelFunc := context.WithDeadline(context.Background(), date)
defer cancelFunc()
c.Request = req.WithContext(ctx)

assert.NoError(t, c.Err())

ti, ok := c.Deadline()
assert.Equal(t, ti, date)
assert.True(t, ok)
}
39 changes: 0 additions & 39 deletions context_pre17.go

This file was deleted.

0 comments on commit 29a145c

Please sign in to comment.