|
|
@@ -6,55 +6,30 @@ import (
|
|
|
"testing"
|
|
|
)
|
|
|
|
|
|
-func newMockWriter() *mockWriter {
|
|
|
- return &mockWriter{
|
|
|
- http.Header{},
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-type mockWriter struct {
|
|
|
- headers http.Header
|
|
|
-}
|
|
|
-
|
|
|
-func (m *mockWriter) Header() (h http.Header) {
|
|
|
- return m.headers
|
|
|
-}
|
|
|
-
|
|
|
-func (m *mockWriter) Write(p []byte) (n int, err error) {
|
|
|
- return len(p), nil
|
|
|
-}
|
|
|
-
|
|
|
-func (m *mockWriter) WriteString(s string) (n int, err error) {
|
|
|
- return len(s), nil
|
|
|
+func BenchmarkOneRoute(B *testing.B) {
|
|
|
+ router := New()
|
|
|
+ router.GET("/ping", func(c *Context) {})
|
|
|
+ runRequest(B, router, "GET", "/ping")
|
|
|
}
|
|
|
|
|
|
-func (m *mockWriter) WriteHeader(int) {}
|
|
|
-
|
|
|
-func runRequest(B *testing.B, r *Engine, method, path string) {
|
|
|
- // create fake request
|
|
|
- req, err := http.NewRequest(method, path, nil)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
- w := newMockWriter()
|
|
|
- B.ReportAllocs()
|
|
|
- B.ResetTimer()
|
|
|
- for i := 0; i < B.N; i++ {
|
|
|
- r.ServeHTTP(w, req)
|
|
|
- }
|
|
|
+func BenchmarkRecoveryMiddleware(B *testing.B) {
|
|
|
+ router := New()
|
|
|
+ router.Use(Recovery())
|
|
|
+ router.GET("/", func(c *Context) {})
|
|
|
+ runRequest(B, router, "GET", "/")
|
|
|
}
|
|
|
|
|
|
-func BenchmarkOneRoute(B *testing.B) {
|
|
|
+func BenchmarkLoggerMiddleware(B *testing.B) {
|
|
|
router := New()
|
|
|
- router.GET("/ping", func(c *Context) {})
|
|
|
- runRequest(B, router, "GET", "/ping")
|
|
|
+ router.Use(LoggerWithWriter(newMockWriter()))
|
|
|
+ router.GET("/", func(c *Context) {})
|
|
|
+ runRequest(B, router, "GET", "/")
|
|
|
}
|
|
|
|
|
|
func BenchmarkManyHandlers(B *testing.B) {
|
|
|
- DefaultWriter = newMockWriter()
|
|
|
- //router := Default()
|
|
|
router := New()
|
|
|
- router.Use(Recovery(), Logger())
|
|
|
+ router.Use(Recovery(), LoggerWithWriter(newMockWriter()))
|
|
|
+ router.Use(func(c *Context) {})
|
|
|
router.Use(func(c *Context) {})
|
|
|
router.GET("/ping", func(c *Context) {})
|
|
|
runRequest(B, router, "GET", "/ping")
|
|
|
@@ -93,6 +68,14 @@ func BenchmarkOneRouteHTML(B *testing.B) {
|
|
|
runRequest(B, router, "GET", "/html")
|
|
|
}
|
|
|
|
|
|
+func BenchmarkOneRouteSet(B *testing.B) {
|
|
|
+ router := New()
|
|
|
+ router.GET("/ping", func(c *Context) {
|
|
|
+ c.Set("key", "value")
|
|
|
+ })
|
|
|
+ runRequest(B, router, "GET", "/ping")
|
|
|
+}
|
|
|
+
|
|
|
func BenchmarkOneRouteString(B *testing.B) {
|
|
|
router := New()
|
|
|
router.GET("/text", func(c *Context) {
|
|
|
@@ -134,3 +117,41 @@ func Benchmark404Many(B *testing.B) {
|
|
|
router.NoRoute(func(c *Context) {})
|
|
|
runRequest(B, router, "GET", "/viewfake")
|
|
|
}
|
|
|
+
|
|
|
+type mockWriter struct {
|
|
|
+ headers http.Header
|
|
|
+}
|
|
|
+
|
|
|
+func newMockWriter() *mockWriter {
|
|
|
+ return &mockWriter{
|
|
|
+ http.Header{},
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (m *mockWriter) Header() (h http.Header) {
|
|
|
+ return m.headers
|
|
|
+}
|
|
|
+
|
|
|
+func (m *mockWriter) Write(p []byte) (n int, err error) {
|
|
|
+ return len(p), nil
|
|
|
+}
|
|
|
+
|
|
|
+func (m *mockWriter) WriteString(s string) (n int, err error) {
|
|
|
+ return len(s), nil
|
|
|
+}
|
|
|
+
|
|
|
+func (m *mockWriter) WriteHeader(int) {}
|
|
|
+
|
|
|
+func runRequest(B *testing.B, r *Engine, method, path string) {
|
|
|
+ // create fake request
|
|
|
+ req, err := http.NewRequest(method, path, nil)
|
|
|
+ if err != nil {
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+ w := newMockWriter()
|
|
|
+ B.ReportAllocs()
|
|
|
+ B.ResetTimer()
|
|
|
+ for i := 0; i < B.N; i++ {
|
|
|
+ r.ServeHTTP(w, req)
|
|
|
+ }
|
|
|
+}
|