diff options
Diffstat (limited to 'vendor/github.com/Xe/asarfs/bench_test.go')
| -rw-r--r-- | vendor/github.com/Xe/asarfs/bench_test.go | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/vendor/github.com/Xe/asarfs/bench_test.go b/vendor/github.com/Xe/asarfs/bench_test.go new file mode 100644 index 0000000..fd332d5 --- /dev/null +++ b/vendor/github.com/Xe/asarfs/bench_test.go @@ -0,0 +1,156 @@ +// +build go1.8 + +package asarfs + +import ( + "fmt" + "io" + "io/ioutil" + "math/rand" + "net" + "net/http" + "os" + "testing" +) + +func BenchmarkHTTPFileSystem(b *testing.B) { + fs := http.FileServer(http.Dir(".")) + + l, s, err := setupHandler(fs) + if err != nil { + b.Fatal(err) + } + defer l.Close() + defer s.Close() + + url := fmt.Sprintf("http://%s", l.Addr()) + + for n := 0; n < b.N; n++ { + testHandler(url) + } +} + +func BenchmarkASARfs(b *testing.B) { + fs, err := New("./static.asar", http.HandlerFunc(do404)) + if err != nil { + b.Fatal(err) + } + + l, s, err := setupHandler(fs) + if err != nil { + b.Fatal(err) + } + defer l.Close() + defer s.Close() + + url := fmt.Sprintf("http://%s", l.Addr()) + + for n := 0; n < b.N; n++ { + testHandler(url) + } +} + +func BenchmarkPreloadedASARfs(b *testing.B) { + for n := 0; n < b.N; n++ { + testHandler(asarfsurl) + } +} + +func BenchmarkASARfsHTTPFilesystem(b *testing.B) { + fs, err := New("./static.asar", http.HandlerFunc(do404)) + if err != nil { + b.Fatal(err) + } + + l, s, err := setupHandler(http.FileServer(fs)) + if err != nil { + b.Fatal(err) + } + defer l.Close() + defer s.Close() + + url := fmt.Sprintf("http://%s", l.Addr()) + + for n := 0; n < b.N; n++ { + testHandler(url) + } +} + +func BenchmarkPreloadedASARfsHTTPFilesystem(b *testing.B) { + for n := 0; n < b.N; n++ { + testHandler(asarfshttpfsurl) + } +} + +func do404(w http.ResponseWriter, r *http.Request) { + http.Error(w, "Not found", http.StatusNotFound) +} + +func setupHandler(h http.Handler) (net.Listener, *http.Server, error) { + l, err := net.Listen("tcp", ":0") + if err != nil { + panic(err) + } + defer l.Close() + + s := &http.Server{ + Handler: h, + } + go s.ListenAndServe() + + return l, s, nil +} + +func testHandler(u string) error { + num := rand.Intn(9) + num++ + sub := rand.Intn(99) + + fname := fmt.Sprintf("/static/%d/%d%d.json", num, num, sub) + + resp, err := http.Get(u + fname) + if err != nil { + return err + } + defer resp.Body.Close() + + _, err = io.Copy(ioutil.Discard, resp.Body) + if err != nil { + panic(err) + } + + return nil +} + +var ( + asarfsurl string + asarfshttpfsurl string +) + +func TestMain(m *testing.M) { + go func() { + fs, err := New("./static.asar", http.HandlerFunc(do404)) + if err != nil { + } + + l, _, err := setupHandler(fs) + if err != nil { + } + + asarfsurl = fmt.Sprintf("http://%s", l.Addr().String()) + }() + + go func() { + fs, err := New("./static.asar", http.HandlerFunc(do404)) + if err != nil { + } + + l, _, err := setupHandler(http.FileServer(fs)) + if err != nil { + } + + asarfshttpfsurl = fmt.Sprintf("http://%s", l.Addr().String()) + }() + + os.Exit(m.Run()) +} |
