package copart import ( "bytes" "fmt" "io/ioutil" "local/router" "net/http" "net/http/httptest" "os/exec" "path" "runtime" "strings" "testing" "time" ) func StartServer() *http.Server { _, filename, _, _ := runtime.Caller(0) dir := path.Dir(filename) html := path.Join(dir, "testdata", "sample_auction_live.html") b, _ := ioutil.ReadFile(html) handler := func(w http.ResponseWriter, r *http.Request) { w.Write(b) } s := router.New() s.Add(router.Wildcard, handler) s.Add("/", handler) port := getPort() cmd := exec.Command("bash", "-c", `ifconfig en0 | grep -o '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*' | head -n 1`) out := bytes.NewBuffer(nil) cmd.Stdout = out if err := cmd.Run(); err != nil { panic(err) } if len(out.Bytes()) < 1 { cmd := exec.Command("bash", "-c", `ifconfig eno1 | grep -o '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*' | head -n 1`) cmd.Stdout = out if err := cmd.Run(); err != nil { panic(err) } } url := fmt.Sprintf("http://%s:%s", strings.TrimSpace(string(out.Bytes())), port) srv := &http.Server{ Addr: ":" + port, Handler: s, } go func() { if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { panic(err) } }() for { if _, err := http.Get(url); err == nil { break } time.Sleep(time.Millisecond * 250) } srv.Addr = url return srv } func getPort() string { s := httptest.NewServer(nil) s.Close() time.Sleep(time.Millisecond * 2500) seg := strings.Split(s.URL, ":") return seg[len(seg)-1] } func TestStartServer(t *testing.T) { s := StartServer() defer s.Close() resp, _ := http.Get(s.Addr) b, _ := ioutil.ReadAll(resp.Body) if len(b) < 1 { t.Fatalf("failed to start fake auction server") } }