Skip to content

Commit

Permalink
fix Context.Next() - recheck len of handlers every iteration (#1745)
Browse files Browse the repository at this point in the history
* fix Context.Next() - recheck len of handlers every iteration

* add tests when Context.reset() can be called inside of handler

TestEngineHandleContext
TestContextResetInHandler
TestRouterStaticFSFileNotFound

* Context.Next() - format to while style
  • Loading branch information
vkd authored and thinkerou committed Jan 18, 2019
1 parent b056a34 commit 4867ff9
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 1 deletion.
3 changes: 2 additions & 1 deletion context.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,9 @@ func (c *Context) Handler() HandlerFunc {
// See example in GitHub.
func (c *Context) Next() {
c.index++
for s := int8(len(c.handlers)); c.index < s; c.index++ {
for c.index < int8(len(c.handlers)) {
c.handlers[c.index](c)
c.index++
}
}

Expand Down
12 changes: 12 additions & 0 deletions context_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1743,3 +1743,15 @@ func TestContextStreamWithClientGone(t *testing.T) {

assert.Equal(t, "test", w.Body.String())
}

func TestContextResetInHandler(t *testing.T) {
w := CreateTestResponseRecorder()
c, _ := CreateTestContext(w)

c.handlers = []HandlerFunc{
func(c *Context) { c.reset() },
}
assert.NotPanics(t, func() {
c.Next()
})
}
17 changes: 17 additions & 0 deletions gin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,23 @@ func TestListOfRoutes(t *testing.T) {
})
}

func TestEngineHandleContext(t *testing.T) {
r := New()
r.GET("/", func(c *Context) {
c.Request.URL.Path = "/v2"
r.HandleContext(c)
})
v2 := r.Group("/v2")
{
v2.GET("/", func(c *Context) {})
}

assert.NotPanics(t, func() {
w := performRequest(r, "GET", "/")
assert.Equal(t, 301, w.Code)
})
}

func assertRoutePresent(t *testing.T, gotRoutes RoutesInfo, wantRoute RouteInfo) {
for _, gotRoute := range gotRoutes {
if gotRoute.Path == wantRoute.Path && gotRoute.Method == wantRoute.Method {
Expand Down
10 changes: 10 additions & 0 deletions routes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,16 @@ func TestRouterStaticFSNotFound(t *testing.T) {
assert.Equal(t, "non existent", w.Body.String())
}

func TestRouterStaticFSFileNotFound(t *testing.T) {
router := New()

router.StaticFS("/", http.FileSystem(http.Dir(".")))

assert.NotPanics(t, func() {
performRequest(router, "GET", "/nonexistent")
})
}

func TestRouteRawPath(t *testing.T) {
route := New()
route.UseRawPath = true
Expand Down

0 comments on commit 4867ff9

Please sign in to comment.