From dbb5e2ce7f1ff71e29d4065957d0ab603d2157c0 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 28 Mar 2016 17:27:56 +0200 Subject: Add WS test --- server_test.go | 50 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 9 deletions(-) (limited to 'server_test.go') 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) + } } -- cgit v1.2.3