package goxy import ( "io" "io/ioutil" "net/http" "net/http/httptest" "net/url" "testing" ) const cannary = "hello from backend" func TestNewServer(t *testing.T) { backServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { io.WriteString(w, cannary) })) defer backServer.Close() server, err := NewServer("") if err != nil { t.Error(err) } rpcServer := httptest.NewServer(nil) defer rpcServer.Close() rpcURL, err := url.Parse(rpcServer.URL) if err != nil { t.Error(err) } frontServer := httptest.NewServer(nil) if err != nil { t.Error(err) } frontURL, err := url.Parse(frontServer.URL) if err != nil { t.Error(err) } rpcClient, err := DialRPC(rpcURL.Host) if err != nil { t.Error(err) } err = rpcClient.Call("GoXY.Add", Entry{ ServerName: frontURL.Host, Upstream: backServer.URL, }, nil) if err != nil { t.Error(err) } frontServer.Config.Handler = server.Handler resp, err := http.Get(frontServer.URL) if err != nil { t.Error(err) } defer resp.Body.Close() b, err := ioutil.ReadAll(resp.Body) if err != nil { t.Error(err) } if string(b) != cannary { t.Error("got", string(b), "expected", cannary) } }