rssmon3/copart/endpoint_test.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")
}
}