go.x2ox.com/sorbifolia/httprouter@v0.0.0-20230619134115-60a7da6b92ca/router_benchmark_test.go (about)

     1  package httprouter
     2  
     3  import (
     4  	"net/http"
     5  	"testing"
     6  )
     7  
     8  func BenchmarkOneRoute(B *testing.B) {
     9  	server := NewServer()
    10  	server.GET("/", func(c *Context) {})
    11  	runRequest(B, server, "GET", "/ping")
    12  }
    13  
    14  func BenchmarkManyRoutesFist(B *testing.B) {
    15  	router := NewServer()
    16  	router.Any("/ping", func(c *Context) {})
    17  	runRequest(B, router, "GET", "/ping")
    18  }
    19  
    20  func BenchmarkOneRouteJson(B *testing.B) {
    21  	router := NewServer()
    22  	router.GET("/hi", func(c *Context) {
    23  		c.JSON("hello world")
    24  	})
    25  	runRequest(B, router, "GET", "/hi")
    26  }
    27  
    28  func Benchmark404(B *testing.B) {
    29  	router := NewServer()
    30  	router.Any("/something", func(c *Context) {})
    31  	runRequest(B, router, "GET", "/ping")
    32  }
    33  
    34  func runRequest(B *testing.B, r *Server, method, path string) {
    35  	// create fake request
    36  	req, err := http.NewRequest(method, path, nil)
    37  	if err != nil {
    38  		panic(err)
    39  	}
    40  	w := newMockWriter()
    41  	B.ReportAllocs()
    42  	B.ResetTimer()
    43  	for i := 0; i < B.N; i++ {
    44  		r.ServeHTTP(w, req)
    45  	}
    46  }
    47  
    48  type mockWriter struct {
    49  	headers http.Header
    50  }
    51  
    52  func newMockWriter() *mockWriter {
    53  	return &mockWriter{
    54  		http.Header{},
    55  	}
    56  }
    57  
    58  func (m *mockWriter) Header() (h http.Header) {
    59  	return m.headers
    60  }
    61  
    62  func (m *mockWriter) Write(p []byte) (n int, err error) {
    63  	return len(p), nil
    64  }
    65  
    66  func (m *mockWriter) WriteString(s string) (n int, err error) {
    67  	return len(s), nil
    68  }
    69  
    70  func (m *mockWriter) WriteHeader(int) {}