forked from cadey/xesite
157 lines
2.5 KiB
Go
157 lines
2.5 KiB
Go
// +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())
|
|
}
|