aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-27 21:23:53 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-03-27 21:23:53 +0200
commitd21557ca8920525494670ab59474dd0c3a3517ad (patch)
treeb3d55785a574f0ca7b2260201bc01bab766ddc97
parent0824f4bcd9a31add8e7cfa1662d2cb40900de073 (diff)
Add testing
-rw-r--r--cmd/goxy/main.go7
-rw-r--r--server.go8
-rw-r--r--server_test.go60
3 files changed, 69 insertions, 6 deletions
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)
+ }
+}