85 lines
1.7 KiB
Go
85 lines
1.7 KiB
Go
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")
|
|
}
|
|
}
|