Skip to content

Instantly share code, notes, and snippets.

@julz
Last active August 25, 2020 11:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save julz/78d67c841f10f2fd713ef398cf187157 to your computer and use it in GitHub Desktop.
Save julz/78d67c841f10f2fd713ef398cf187157 to your computer and use it in GitHub Desktop.
func BenchmarkUnixVsTcpProbe(b *testing.B) {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200)
})
tcpServer := httptest.NewServer(handler)
b.Cleanup(tcpServer.Close)
tmpDir := b.TempDir()
go func() {
l, err := net.Listen("unix", filepath.Join(tmpDir, "health.sock"))
if err != nil {
log.Fatal(err)
}
if err := http.Serve(l, handler); err != nil {
log.Fatal(err)
}
}()
for _, tt := range []struct {
name string
client *http.Client
}{{
name: "tcp",
client: &http.Client{},
}, {
name: "unix",
client: &http.Client{
Transport: &http.Transport{
DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {
return net.Dial("unix", filepath.Join(tmpDir, "health.sock"))
},
},
},
}} {
b.Run(tt.name+"-serial", func(b *testing.B) {
req, err := http.NewRequest("GET", tcpServer.URL, nil)
if err != nil {
b.Fatal(err)
}
for i := 0; i < b.N; i++ {
resp, err := tt.client.Do(req)
if err != nil {
b.Fatal(err)
}
if resp.StatusCode != 200 {
b.Fatal("Expected status code 200, was", resp.StatusCode)
}
}
})
b.Run(tt.name+"-parallel", func(b *testing.B) {
b.RunParallel(func(pb *testing.PB) {
req, err := http.NewRequest("GET", tcpServer.URL, nil)
if err != nil {
b.Fatal(err)
}
for pb.Next() {
resp, err := tt.client.Do(req)
if err != nil {
b.Fatal(err)
}
if resp.StatusCode != 200 {
b.Fatal("Expected status code 200, was", resp.StatusCode)
}
}
})
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment