// TestPanicInHandler assert that panic has been recovered. func TestPanicInHandler(t *testing.T) { buffer := new(bytes.Buffer) router := New() router.Use(RecoveryWithWriter(buffer)) router.GET("/recovery", func(_ *Context) { panic("Oupps, Houston, we have a problem") }) // RUN w := performRequest(router, "GET", "/recovery") // TEST assert.Equal(t, w.Code, 500) assert.Contains(t, buffer.String(), "Panic recovery -> Oupps, Houston, we have a problem") assert.Contains(t, buffer.String(), "TestPanicInHandler") }
func TestGithubAPI(t *testing.T) { DefaultWriter = newMockWriter() router := Default() githubConfigRouter(router) for _, route := range githubAPI { path, values := exampleFromPath(route.path) w := performRequest(router, route.method, path) // TEST assert.Contains(t, w.Body.String(), "\"status\":\"good\"") for _, value := range values { str := fmt.Sprintf("\"%s\":\"%s\"", value.Key, value.Value) assert.Contains(t, w.Body.String(), str) } } }
// TestHandleStaticDir - ensure the root/sub dir handles properly func TestRouteStaticListingDir(t *testing.T) { router := New() router.StaticFS("/", Dir("./", true)) w := performRequest(router, "GET", "/") assert.Equal(t, w.Code, 200) assert.Contains(t, w.Body.String(), "gin.go") assert.Equal(t, w.HeaderMap.Get("Content-Type"), "text/html; charset=utf-8") }
func TestListOfRoutes(t *testing.T) { router := New() router.GET("/favicon.ico", handler_test1) router.GET("/", handler_test1) group := router.Group("/users") { group.GET("/", handler_test2) group.GET("/:id", handler_test1) group.POST("/:id", handler_test2) } router.Static("/static", ".") list := router.Routes() assert.Len(t, list, 7) assert.Contains(t, list, RouteInfo{ Method: "GET", Path: "/favicon.ico", Handler: "github.com/gin-gonic/gin.handler_test1", }) assert.Contains(t, list, RouteInfo{ Method: "GET", Path: "/", Handler: "github.com/gin-gonic/gin.handler_test1", }) assert.Contains(t, list, RouteInfo{ Method: "GET", Path: "/users/", Handler: "github.com/gin-gonic/gin.handler_test2", }) assert.Contains(t, list, RouteInfo{ Method: "GET", Path: "/users/:id", Handler: "github.com/gin-gonic/gin.handler_test1", }) assert.Contains(t, list, RouteInfo{ Method: "POST", Path: "/users/:id", Handler: "github.com/gin-gonic/gin.handler_test2", }) }
func TestBasicAuth(t *testing.T) { pairs := processAccounts(Accounts{ "admin": "password", "foo": "bar", "bar": "foo", }) assert.Len(t, pairs, 3) assert.Contains(t, pairs, authPair{ User: "******", Value: "Basic YmFyOmZvbw==", }) assert.Contains(t, pairs, authPair{ User: "******", Value: "Basic Zm9vOmJhcg==", }) assert.Contains(t, pairs, authPair{ User: "******", Value: "Basic YWRtaW46cGFzc3dvcmQ=", }) }
func TestRouterMiddlewareAndStatic(t *testing.T) { router := New() static := router.Group("/", func(c *Context) { c.Writer.Header().Add("Last-Modified", "Mon, 02 Jan 2006 15:04:05 MST") c.Writer.Header().Add("Expires", "Mon, 02 Jan 2006 15:04:05 MST") c.Writer.Header().Add("X-GIN", "Gin Framework") }) static.Static("/", "./") w := performRequest(router, "GET", "/gin.go") assert.Equal(t, w.Code, 200) assert.Contains(t, w.Body.String(), "package gin") assert.Equal(t, w.HeaderMap.Get("Content-Type"), "text/plain; charset=utf-8") assert.NotEqual(t, w.HeaderMap.Get("Last-Modified"), "Mon, 02 Jan 2006 15:04:05 MST") assert.Equal(t, w.HeaderMap.Get("Expires"), "Mon, 02 Jan 2006 15:04:05 MST") assert.Equal(t, w.HeaderMap.Get("x-GIN"), "Gin Framework") }
func TestLogger(t *testing.T) { buffer := new(bytes.Buffer) router := New() router.Use(LoggerWithWriter(buffer)) router.GET("/example", func(c *Context) {}) router.POST("/example", func(c *Context) {}) router.PUT("/example", func(c *Context) {}) router.DELETE("/example", func(c *Context) {}) router.PATCH("/example", func(c *Context) {}) router.HEAD("/example", func(c *Context) {}) router.OPTIONS("/example", func(c *Context) {}) performRequest(router, "GET", "/example") assert.Contains(t, buffer.String(), "200") assert.Contains(t, buffer.String(), "GET") assert.Contains(t, buffer.String(), "/example") // I wrote these first (extending the above) but then realized they are more // like integration tests because they test the whole logging process rather // than individual functions. Im not sure where these should go. performRequest(router, "POST", "/example") assert.Contains(t, buffer.String(), "200") assert.Contains(t, buffer.String(), "POST") assert.Contains(t, buffer.String(), "/example") performRequest(router, "PUT", "/example") assert.Contains(t, buffer.String(), "200") assert.Contains(t, buffer.String(), "PUT") assert.Contains(t, buffer.String(), "/example") performRequest(router, "DELETE", "/example") assert.Contains(t, buffer.String(), "200") assert.Contains(t, buffer.String(), "DELETE") assert.Contains(t, buffer.String(), "/example") performRequest(router, "PATCH", "/example") assert.Contains(t, buffer.String(), "200") assert.Contains(t, buffer.String(), "PATCH") assert.Contains(t, buffer.String(), "/example") performRequest(router, "HEAD", "/example") assert.Contains(t, buffer.String(), "200") assert.Contains(t, buffer.String(), "HEAD") assert.Contains(t, buffer.String(), "/example") performRequest(router, "OPTIONS", "/example") assert.Contains(t, buffer.String(), "200") assert.Contains(t, buffer.String(), "OPTIONS") assert.Contains(t, buffer.String(), "/example") performRequest(router, "GET", "/notfound") assert.Contains(t, buffer.String(), "404") assert.Contains(t, buffer.String(), "GET") assert.Contains(t, buffer.String(), "/notfound") }