aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-28 17:27:56 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-03-28 17:27:56 +0200
commitdbb5e2ce7f1ff71e29d4065957d0ab603d2157c0 (patch)
tree67eef3a081b0eca002557abffd19d85f7b00e104
parent9a4e0f70c967c3905e4430824f420ce2dd68a92f (diff)
Add WS test
-rw-r--r--rpc.go9
-rw-r--r--server_test.go50
2 files changed, 48 insertions, 11 deletions
diff --git a/rpc.go b/rpc.go
index b514c64..194bbf0 100644
--- a/rpc.go
+++ b/rpc.go
@@ -1,6 +1,11 @@
package goxy
-import "net/rpc"
+import (
+ "net/rpc"
+ "sync"
+)
+
+var once sync.Once
type GoXY struct {
Server *Server
@@ -8,7 +13,7 @@ type GoXY struct {
func Register(s *Server) {
rpc.Register(&GoXY{s})
- rpc.HandleHTTP()
+ once.Do(rpc.HandleHTTP)
}
func DialRPC(server string) (*rpc.Client, error) {
diff --git a/server_test.go b/server_test.go
index b83edcd..a514b3c 100644
--- a/server_test.go
+++ b/server_test.go
@@ -1,17 +1,20 @@
package goxy
import (
+ "bytes"
"io"
"io/ioutil"
"net/http"
"net/http/httptest"
"net/url"
"testing"
+
+ "golang.org/x/net/websocket"
)
const cannary = "hello from backend"
-func TestNewServer(t *testing.T) {
+func TestReverseProxy(t *testing.T) {
backServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, cannary)
}))
@@ -24,16 +27,13 @@ func TestNewServer(t *testing.T) {
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)
- }
+ defer frontServer.Close()
frontURL, err := url.Parse(frontServer.URL)
if err != nil {
t.Error(err)
@@ -43,13 +43,11 @@ func TestNewServer(t *testing.T) {
if err != nil {
t.Error(err)
}
- err = rpcClient.Call("GoXY.Add", Entry{
- ServerName: frontURL.Host,
- Upstream: backServer.URL,
- }, nil)
+ err = rpcClient.Call("GoXY.Add", Entry{ServerName: frontURL.Host, Upstream: backServer.URL}, nil)
if err != nil {
t.Error(err)
}
+ defer rpcClient.Call("GoXY.Del", frontURL.Host, nil)
frontServer.Config.Handler = server.Handler
@@ -67,4 +65,38 @@ func TestNewServer(t *testing.T) {
if string(b) != cannary {
t.Error("got", string(b), "expected", cannary)
}
+
+ // XXX WebSocket
+
+ wsServer := httptest.NewServer(websocket.Handler(func(ws *websocket.Conn) {
+ io.Copy(ws, ws)
+ }))
+ defer wsServer.Close()
+ wsURL, err := url.Parse(wsServer.URL)
+ if err != nil {
+ t.Error(err)
+ }
+
+ err = rpcClient.Call("GoXY.Add", Entry{ServerName: frontURL.Host, Upstream: "ws://" + wsURL.Host}, nil)
+ if err != nil {
+ t.Error(err)
+ }
+ defer rpcClient.Call("GoXY.Del", frontURL.Host, nil)
+
+ frontServer.Config.Handler = server.Handler
+
+ ws, err := websocket.Dial("ws://"+frontURL.Host, "", "http://localhost")
+ if err != nil {
+ t.Error(err)
+ }
+ if _, err := ws.Write([]byte(cannary)); err != nil {
+ t.Error(err)
+ }
+ msg := make([]byte, len(cannary))
+ if _, err := ws.Read(msg); err != nil {
+ t.Error(err)
+ }
+ if !bytes.Equal(msg, []byte(cannary)) {
+ t.Error("got", string(msg), "expected", cannary)
+ }
}