aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-31 19:03:12 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-03-31 19:03:12 +0200
commit2dabd37069d8495d7cf131f1bb749da5380ba846 (patch)
tree272718fcff1cc7051d5aa17e68c1bd3f96e3edca
parent82d5ec96afadf1b8ba26ccdc2bc901a420c8be64 (diff)
Add tests for 500/404
-rw-r--r--rpc.go2
-rw-r--r--server.go11
-rw-r--r--server_test.go59
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)
+}