aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-28 15:51:40 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-03-28 15:51:40 +0200
commit9a4e0f70c967c3905e4430824f420ce2dd68a92f (patch)
treed142dff9687d12b1fcb2fd2666f77795fead8d75
parentd97fab561070205d57f756015cf9e85a559a573e (diff)
Pass test
-rw-r--r--cmd/goxyctl/main.go13
-rw-r--r--route.go6
-rw-r--r--rpc.go49
-rw-r--r--server_test.go25
4 files changed, 35 insertions, 58 deletions
diff --git a/cmd/goxyctl/main.go b/cmd/goxyctl/main.go
index d68eafa..897dc0b 100644
--- a/cmd/goxyctl/main.go
+++ b/cmd/goxyctl/main.go
@@ -33,15 +33,22 @@ func loadCert(certFile, keyFile string) ([]byte, []byte) {
}
func send(server string, e goxy.Entry, del bool) error {
+ client, err := goxy.DialRPC(server)
+ if err != nil {
+ return err
+ }
+ defer client.Close()
+
switch {
case e.ServerName != "" && e.Upstream != "":
log.Println("Add", e)
- return goxy.Add(e, server)
+ return client.Call("GoXY.Add", e, nil)
case e.ServerName != "" && del:
log.Println("Del", e.ServerName)
- return goxy.Del(e.ServerName, server)
+ return client.Call("GoXY.Del", e.ServerName, nil)
default:
- r, err := goxy.List(server)
+ var r goxy.Route
+ err := client.Call("GoXY.List", struct{}{}, &r)
if err != nil {
return err
}
diff --git a/route.go b/route.go
index 2fc38b3..8f77120 100644
--- a/route.go
+++ b/route.go
@@ -68,10 +68,16 @@ func (s *Server) Restore() error {
//mux.Handle(v.ServerName, httputil.NewSingleHostReverseProxy(up))
switch up.Scheme {
case "ws":
+ //log.Println("ws", v.ServerName, up)
mux.Handle(v.ServerName, NewWebSocketProxy(up))
default:
+ //log.Println("http", v.ServerName, up)
mux.Handle(v.ServerName, NewReverseProxy(up))
}
+ mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
+ //log.Printf("%+v\n", r)
+ http.Error(w, "gone", http.StatusGone)
+ })
}
s.Server.Handler = mux
return nil
diff --git a/rpc.go b/rpc.go
index 032c3f4..b514c64 100644
--- a/rpc.go
+++ b/rpc.go
@@ -18,71 +18,28 @@ func DialRPC(server string) (*rpc.Client, error) {
return rpc.DialHTTP("tcp", server)
}
-// Add adds a new route (server)
+// Add adds a new route
func (s *GoXY) Add(e Entry, _ *struct{}) error {
defer s.Server.Save()
s.Server.Route[e.ServerName] = e
return s.Server.Restore()
}
-// Add new entry (client)
-func Add(e Entry, server string) error {
- client, err := DialRPC(server)
- if err != nil {
- return err
- }
- defer client.Close()
- return client.Call("GoXY.Add", e, nil)
-}
-
-// Del removes a route (server)
+// Del removes a route
func (s *GoXY) Del(serverName string, _ *struct{}) error {
defer s.Server.Save()
delete(s.Server.Route, serverName)
return s.Server.Restore()
}
-// Del removes a route (client)
-func Del(serverName string, server string) error {
- client, err := DialRPC(server)
- if err != nil {
- return err
- }
- defer client.Close()
- return client.Call("GoXY.Del", serverName, nil)
-}
-
+// Get returns Entry
func (s *GoXY) Get(serverName string, e *Entry) error {
*e = s.Server.Route[serverName]
return nil
}
-func Get(serverName string, server string) (Entry, error) {
- client, err := DialRPC(server)
- if err != nil {
- return Entry{}, err
- }
- defer client.Close()
- var e Entry
- err = client.Call("GoXY.Get", serverName, &e)
- return e, err
-}
-
// List routes
func (s GoXY) List(_ struct{}, r *Route) error {
*r = s.Server.Route
return nil
}
-
-func List(server string) (Route, error) {
- client, err := DialRPC(server)
- if err != nil {
- return nil, err
- }
- defer client.Close()
- var r Route
- if err := client.Call("GoXY.List", struct{}{}, &r); err != nil {
- return nil, err
- }
- return r, nil
-}
diff --git a/server_test.go b/server_test.go
index d0920c5..b83edcd 100644
--- a/server_test.go
+++ b/server_test.go
@@ -12,10 +12,10 @@ import (
const cannary = "hello from backend"
func TestNewServer(t *testing.T) {
- backendServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ backServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, cannary)
}))
- defer backendServer.Close()
+ defer backServer.Close()
server, err := NewServer("")
if err != nil {
@@ -30,23 +30,30 @@ func TestNewServer(t *testing.T) {
t.Error(err)
}
- err = Add(Entry{ServerName: "whatever", Upstream: backendServer.URL}, rpcURL.Host)
+ frontServer := httptest.NewServer(nil)
if err != nil {
t.Error(err)
}
-
- frontendServer := httptest.NewServer(server.Handler)
+ frontURL, err := url.Parse(frontServer.URL)
if err != nil {
t.Error(err)
}
- client := &http.Client{}
- req, err := http.NewRequest("GET", frontendServer.URL, nil)
+ rpcClient, err := DialRPC(rpcURL.Host)
+ if err != nil {
+ t.Error(err)
+ }
+ err = rpcClient.Call("GoXY.Add", Entry{
+ ServerName: frontURL.Host,
+ Upstream: backServer.URL,
+ }, nil)
if err != nil {
t.Error(err)
}
- req.Header.Set("Host", "whatever")
- resp, err := client.Do(req)
+
+ frontServer.Config.Handler = server.Handler
+
+ resp, err := http.Get(frontServer.URL)
if err != nil {
t.Error(err)
}