From d21557ca8920525494670ab59474dd0c3a3517ad Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 27 Mar 2016 21:23:53 +0200 Subject: Add testing --- cmd/goxy/main.go | 7 +------ server.go | 8 ++++++++ server_test.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 server_test.go diff --git a/cmd/goxy/main.go b/cmd/goxy/main.go index fc122e0..7932bfa 100644 --- a/cmd/goxy/main.go +++ b/cmd/goxy/main.go @@ -3,7 +3,6 @@ package main import ( "flag" "log" - "net/http" "dim13.org/goxy" @@ -20,9 +19,5 @@ func main() { log.Fatal(err) } - errc := make(chan error, 3) - go func() { errc <- server.ListenAndServe() }() - go func() { errc <- server.ListenAndServeTLS("", "") }() - go func() { errc <- http.ListenAndServe(":http-alt", nil) }() - log.Fatal(<-errc) + log.Fatal(server.Start()) } diff --git a/server.go b/server.go index 3d6651f..6f66942 100644 --- a/server.go +++ b/server.go @@ -50,3 +50,11 @@ func (s *Server) Load() error { defer fd.Close() return gob.NewDecoder(fd).Decode(&s.Route) } + +func (s *Server) Start() error { + errc := make(chan error, 3) + go func() { errc <- s.ListenAndServe() }() + go func() { errc <- s.ListenAndServeTLS("", "") }() + go func() { errc <- http.ListenAndServe(":http-alt", nil) }() + return <-errc +} diff --git a/server_test.go b/server_test.go new file mode 100644 index 0000000..f3ad3d8 --- /dev/null +++ b/server_test.go @@ -0,0 +1,60 @@ +package goxy + +import ( + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "net/rpc" + "testing" +) + +const cannary = "hello from backend" + +func TestNewServer(t *testing.T) { + backendServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, cannary) + })) + defer backendServer.Close() + + server, err := NewServer("data.gob") + if err != nil { + t.Error(err) + } + + errc := make(chan error, 2) + go func() { errc <- server.ListenAndServe() }() + go func() { errc <- http.ListenAndServe(":http-alt", nil) }() + select { + case err := <-errc: + t.Error(err) + default: + } + + client, err := rpc.DialHTTP("tcp", ":http-alt") + if err != nil { + t.Error(err) + } + defer client.Close() + + e := Entry{ + ServerName: "localhost", + Upstream: backendServer.URL, + } + client.Call("GoXY.Add", e, nil) + + resp, err := http.Get("http://localhost") + 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) + } +} -- cgit v1.2.3