From 2dabd37069d8495d7cf131f1bb749da5380ba846 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 31 Mar 2016 19:03:12 +0200 Subject: Add tests for 500/404 --- rpc.go | 2 +- server.go | 11 +---------- server_test.go | 59 ++++++++++++++++++++++++++++++++++++---------------------- 3 files changed, 39 insertions(+), 33 deletions(-) diff --git a/rpc.go b/rpc.go index cd524c9..001598c 100644 --- a/rpc.go +++ b/rpc.go @@ -65,8 +65,8 @@ func (s *GoXY) Add(e Entry, _ *struct{}) error { // Del removes a route func (s *GoXY) Del(host string, _ *struct{}) error { - defer s.server.Save(s.server.DataFile) delete(s.server.Route, host) + s.server.Save(s.server.DataFile) return s.server.Update() } diff --git a/server.go b/server.go index c2c3247..44defa8 100644 --- a/server.go +++ b/server.go @@ -2,8 +2,6 @@ package goxy import ( "crypto/tls" - "fmt" - "log" "net/http" "net/http/httputil" ) @@ -48,7 +46,6 @@ func (s *Server) Update() error { tlsMux := http.NewServeMux() for _, v := range s.Route { host := v.ServerName.Host + v.ServerName.Path - log.Println("Update", host) up := v.Upstream switch v.ServerName.Scheme { case "http", "": @@ -57,18 +54,12 @@ func (s *Server) Update() error { wwwMux.Handle(host, http.RedirectHandler("https://"+host, http.StatusMovedPermanently)) tlsMux.Handle(host, httputil.NewSingleHostReverseProxy(up)) case "ws": - wwwMux.Handle(host, http.RedirectHandler("wss://"+host, http.StatusMovedPermanently)) wwwMux.Handle(host, NewWebSocketProxy(up)) case "wss": + wwwMux.Handle(host, http.RedirectHandler("wss://"+host, http.StatusMovedPermanently)) tlsMux.Handle(host, NewWebSocketProxy(up)) } } - wwwMux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintf(w, "%q", r) - }) - tlsMux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintf(w, "%q", r) - }) s.wwwServer.Handler = wwwMux s.tlsServer.Handler = tlsMux return nil diff --git a/server_test.go b/server_test.go index e322195..372a63b 100644 --- a/server_test.go +++ b/server_test.go @@ -1,14 +1,18 @@ package goxy import ( + "bytes" "crypto/tls" "crypto/x509" + "errors" "io" "io/ioutil" "log" "net/http" "net/http/httptest" "testing" + + "golang.org/x/net/websocket" ) type Cannary string @@ -60,6 +64,9 @@ func get(uri string) (string, error) { if err != nil { return "", err } + if resp.StatusCode != http.StatusOK { + return "", errors.New(resp.Status) + } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { @@ -96,7 +103,6 @@ func (c Cannary) Equal(s string) bool { func TestReverseProxy(t *testing.T) { backServer := httptest.NewServer(cannary) - defer backServer.Close() t.Log("start", backServer.URL) e := Entry{ @@ -108,19 +114,32 @@ func TestReverseProxy(t *testing.T) { } t.Log("add", e) + // normal connection resp, err := get("http://" + wwwServer) if err != nil { t.Error(err) } - if !cannary.Equal(resp) { t.Errorf("got %q expected %q", resp, cannary) } + // closed connection + backServer.Close() + resp, err = get("http://" + wwwServer) + if err == nil || err.Error() != "500 Internal Server Error" { + t.Errorf("got %q expected %v", err, http.StatusInternalServerError) + } + + // removed route if err := del(wwwServer); err != nil { t.Error(err) } t.Log("del", wwwServer) + + resp, err = get("http://" + wwwServer) + if err == nil || err.Error() != "404 Not Found" { + t.Errorf("got %q expected %v", err, http.StatusNotFound) + } } func TestReverseProxyTLS(t *testing.T) { @@ -155,29 +174,23 @@ func TestReverseProxyTLS(t *testing.T) { } func TestWebsocketProxy(t *testing.T) { - /* - // Websocket echo server - wsServer := httptest.NewServer(websocket.Handler(func(ws *websocket.Conn) { - io.Copy(ws, ws) - })) - defer wsServer.Close() - t.Log("start ws server @", wsServer.URL) - */ -} + wsServer := httptest.NewServer(websocket.Handler(func(ws *websocket.Conn) { + io.Copy(ws, ws) + })) + defer wsServer.Close() + t.Log("start ws", wsServer.URL) -/* // Test WebSocket proxy - e = Entry{ - Host: frontServer.URL, + e := Entry{ + Host: "ws://" + wwwServer, Upstream: wsServer.URL, } - if err := rpcClient.Call("GoXY.Add", e, nil); err != nil { + if err := add(e); err != nil { t.Error(err) } + t.Log("add", e) - frontServer.Config.Handler = server.wwwServer.Handler - - ws, err := websocket.Dial("ws://"+frontURL.Host, "", "http://localhost") + ws, err := websocket.Dial("ws://"+wwwServer, "", "http://localhost") if err != nil { t.Error(err) } @@ -190,8 +203,10 @@ func TestWebsocketProxy(t *testing.T) { t.Error(err) } if !bytes.Equal(msg, []byte(cannary)) { - t.Error("got", string(msg), "expected", cannary) + t.Errorf("got %q expected %q", string(msg), cannary) } - - rpcClient.Call("GoXY.Del", frontURL.Host, nil) -*/ + if err := del(tlsServer); err != nil { + t.Error(err) + } + t.Log("del", tlsServer) +} -- cgit v1.2.3