From 9266f48c7e159ad6f47b6df8e1eeb6af38c3c0f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Hurtado?= Date: Mon, 7 Oct 2019 16:00:14 +0200 Subject: [PATCH 1/3] First test --- server/control/control.go | 31 +++++++++++++++++++++++++++++++ server/control/control_test.go | 20 ++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 server/control/control.go create mode 100644 server/control/control_test.go diff --git a/server/control/control.go b/server/control/control.go new file mode 100644 index 0000000..7a12f27 --- /dev/null +++ b/server/control/control.go @@ -0,0 +1,31 @@ +package control + +import ( + "fmt" + "net/http" +) + +type ControlServer struct { + bindAddr string + mux *http.ServeMux + traceChannel chan string + certfile string + keyfile string +} + +var server *ControlServer + +func NewControlServer(bindAddr string, listenPort int, certfile, keyfile string) *ControlServer { + + if server == nil { + server = &ControlServer{bindAddr: fmt.Sprintf("%s:%d", bindAddr, listenPort), + certfile: certfile, + keyfile: keyfile} + } + + return server +} + +func (*ControlServer) Start(traceChannel chan string) { + +} diff --git a/server/control/control_test.go b/server/control/control_test.go new file mode 100644 index 0000000..dbd265b --- /dev/null +++ b/server/control/control_test.go @@ -0,0 +1,20 @@ +package control + +import "testing" + +func TestNewControlServerFillsTheStruct(t *testing.T) { + + server := NewControlServer("0.0.0.0", 8080, "/certfile.pem", "/keyfile.pem") + + if server.bindAddr != "0.0.0.0:8080" { + t.Errorf("BindAddress incorrectly composed. Expected: %s, got: %s", "0.0.0.0:8080", server.bindAddr) + } + + if server.certfile != "/certfile.pem" { + t.Errorf("BindAddress incorrectly composed. Expected: %s, got: %s", "/certfile.pem", server.certfile) + } + + if server.keyfile != "/keyfile.pem" { + t.Errorf("BindAddress incorrectly composed. Expected: %s, got: %s", "/keyfile.pem", server.keyfile) + } +} From 56db1ce2ac146acae993ca9382894f03541e8998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Hurtado?= Date: Tue, 8 Oct 2019 08:54:07 +0200 Subject: [PATCH 2/3] Moved to internal --- go.mod | 2 +- internal/server/control/control.go | 84 +++++++++++++++++++ .../server}/control/control_test.go | 13 ++- server/control/control.go | 31 ------- 4 files changed, 95 insertions(+), 35 deletions(-) create mode 100644 internal/server/control/control.go rename {server => internal/server}/control/control_test.go (70%) delete mode 100644 server/control/control.go diff --git a/go.mod b/go.mod index 299196f..74eb86e 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.12 require ( github.com/google/uuid v1.1.1 // indirect - github.com/gorilla/mux v1.7.3 // indirect + github.com/gorilla/mux v1.7.3 github.com/spf13/cobra v0.0.5 gopkg.in/h2non/gock.v1 v1.0.15 ) diff --git a/internal/server/control/control.go b/internal/server/control/control.go new file mode 100644 index 0000000..a9fd6ea --- /dev/null +++ b/internal/server/control/control.go @@ -0,0 +1,84 @@ +package control + +import ( + "errors" + "fmt" + "net/http" + + "github.com/gorilla/mux" +) + +type ControlServer struct { + bindAddr string + ctrlMux *mux.Router + traceChannel chan string + useTLS bool + certfile string + keyfile string +} + +var server *ControlServer + +func NewControlServer(bindAddr string, listenPort int, certfile, keyfile string) (*ControlServer, error) { + + if server == nil { + var useTLS bool + + if certfile == "" && keyfile != "" { + return nil, errors.New("No keyfile provided") + } else if certfile != "" && keyfile == "" { + return nil, errors.New("No certfile provided") + } else if certfile != "" && keyfile != "" { + useTLS = true + } else { + useTLS = false + } + + server = &ControlServer{ + bindAddr: fmt.Sprintf("%s:%d", bindAddr, listenPort), + useTLS: useTLS, + certfile: certfile, + keyfile: keyfile, + ctrlMux: mux.NewRouter(), + } + + server.ctrlMux.HandleFunc("/routes/{id}", server.removeRoute).Methods("DELETE") + server.ctrlMux.HandleFunc("/routes", server.listRoutes).Methods("GET") + server.ctrlMux.HandleFunc("/routes", server.addRoute).Methods("POST") + } + + return server, nil +} + +func (srv *ControlServer) Start(traceChannel chan string) { + + srv.traceChannel = traceChannel + + // Start the server + var err error + if srv.useTLS { + err = http.ListenAndServeTLS(srv.bindAddr, srv.certfile, srv.keyfile, srv.ctrlMux) + } else { + err = http.ListenAndServe(srv.bindAddr, srv.ctrlMux) + } + + srv.traceChannel <- err.Error() +} + +func (srv *ControlServer) removeRoute(http.ResponseWriter, *http.Request) { + var logRecord string + defer func() { srv.traceChannel <- logRecord }() + +} + +func (srv *ControlServer) listRoutes(http.ResponseWriter, *http.Request) { + var logRecord string + defer func() { srv.traceChannel <- logRecord }() + +} + +func (srv *ControlServer) addRoute(http.ResponseWriter, *http.Request) { + var logRecord string + defer func() { srv.traceChannel <- logRecord }() + +} diff --git a/server/control/control_test.go b/internal/server/control/control_test.go similarity index 70% rename from server/control/control_test.go rename to internal/server/control/control_test.go index dbd265b..e83b15f 100644 --- a/server/control/control_test.go +++ b/internal/server/control/control_test.go @@ -1,10 +1,16 @@ package control -import "testing" +import ( + "testing" +) -func TestNewControlServerFillsTheStruct(t *testing.T) { +func TestNewControlServerFillsTheStructCorrectly(t *testing.T) { - server := NewControlServer("0.0.0.0", 8080, "/certfile.pem", "/keyfile.pem") + server, err := NewControlServer("0.0.0.0", 8080, "/certfile.pem", "/keyfile.pem") + + if err != nil { + + } if server.bindAddr != "0.0.0.0:8080" { t.Errorf("BindAddress incorrectly composed. Expected: %s, got: %s", "0.0.0.0:8080", server.bindAddr) @@ -17,4 +23,5 @@ func TestNewControlServerFillsTheStruct(t *testing.T) { if server.keyfile != "/keyfile.pem" { t.Errorf("BindAddress incorrectly composed. Expected: %s, got: %s", "/keyfile.pem", server.keyfile) } + } diff --git a/server/control/control.go b/server/control/control.go deleted file mode 100644 index 7a12f27..0000000 --- a/server/control/control.go +++ /dev/null @@ -1,31 +0,0 @@ -package control - -import ( - "fmt" - "net/http" -) - -type ControlServer struct { - bindAddr string - mux *http.ServeMux - traceChannel chan string - certfile string - keyfile string -} - -var server *ControlServer - -func NewControlServer(bindAddr string, listenPort int, certfile, keyfile string) *ControlServer { - - if server == nil { - server = &ControlServer{bindAddr: fmt.Sprintf("%s:%d", bindAddr, listenPort), - certfile: certfile, - keyfile: keyfile} - } - - return server -} - -func (*ControlServer) Start(traceChannel chan string) { - -} From e32116abadfff811234c78d02e235d0da95270ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Hurtado?= Date: Tue, 8 Oct 2019 09:20:58 +0200 Subject: [PATCH 3/3] Rewrite --- internal/server/control/control.go | 65 +++---------------------- internal/server/control/control_test.go | 20 +------- 2 files changed, 9 insertions(+), 76 deletions(-) diff --git a/internal/server/control/control.go b/internal/server/control/control.go index a9fd6ea..668bccf 100644 --- a/internal/server/control/control.go +++ b/internal/server/control/control.go @@ -1,84 +1,35 @@ package control import ( - "errors" - "fmt" "net/http" "github.com/gorilla/mux" ) type ControlServer struct { - bindAddr string - ctrlMux *mux.Router - traceChannel chan string - useTLS bool - certfile string - keyfile string + bindAddr string + ctrlMux *mux.Router } -var server *ControlServer +var Server *ControlServer -func NewControlServer(bindAddr string, listenPort int, certfile, keyfile string) (*ControlServer, error) { +func (srv *ControlServer) Run(bindAddr string) { - if server == nil { - var useTLS bool + Server = &ControlServer{bindAddr, mux.NewRouter()} - if certfile == "" && keyfile != "" { - return nil, errors.New("No keyfile provided") - } else if certfile != "" && keyfile == "" { - return nil, errors.New("No certfile provided") - } else if certfile != "" && keyfile != "" { - useTLS = true - } else { - useTLS = false - } - - server = &ControlServer{ - bindAddr: fmt.Sprintf("%s:%d", bindAddr, listenPort), - useTLS: useTLS, - certfile: certfile, - keyfile: keyfile, - ctrlMux: mux.NewRouter(), - } - - server.ctrlMux.HandleFunc("/routes/{id}", server.removeRoute).Methods("DELETE") - server.ctrlMux.HandleFunc("/routes", server.listRoutes).Methods("GET") - server.ctrlMux.HandleFunc("/routes", server.addRoute).Methods("POST") - } - - return server, nil -} - -func (srv *ControlServer) Start(traceChannel chan string) { - - srv.traceChannel = traceChannel - - // Start the server - var err error - if srv.useTLS { - err = http.ListenAndServeTLS(srv.bindAddr, srv.certfile, srv.keyfile, srv.ctrlMux) - } else { - err = http.ListenAndServe(srv.bindAddr, srv.ctrlMux) - } - - srv.traceChannel <- err.Error() + Server.ctrlMux.HandleFunc("/routes/{id}", Server.removeRoute).Methods("DELETE") + Server.ctrlMux.HandleFunc("/routes", Server.listRoutes).Methods("GET") + Server.ctrlMux.HandleFunc("/routes", Server.addRoute).Methods("POST") } func (srv *ControlServer) removeRoute(http.ResponseWriter, *http.Request) { - var logRecord string - defer func() { srv.traceChannel <- logRecord }() } func (srv *ControlServer) listRoutes(http.ResponseWriter, *http.Request) { - var logRecord string - defer func() { srv.traceChannel <- logRecord }() } func (srv *ControlServer) addRoute(http.ResponseWriter, *http.Request) { - var logRecord string - defer func() { srv.traceChannel <- logRecord }() } diff --git a/internal/server/control/control_test.go b/internal/server/control/control_test.go index e83b15f..adf0cc5 100644 --- a/internal/server/control/control_test.go +++ b/internal/server/control/control_test.go @@ -1,4 +1,4 @@ -package control +package control_test import ( "testing" @@ -6,22 +6,4 @@ import ( func TestNewControlServerFillsTheStructCorrectly(t *testing.T) { - server, err := NewControlServer("0.0.0.0", 8080, "/certfile.pem", "/keyfile.pem") - - if err != nil { - - } - - if server.bindAddr != "0.0.0.0:8080" { - t.Errorf("BindAddress incorrectly composed. Expected: %s, got: %s", "0.0.0.0:8080", server.bindAddr) - } - - if server.certfile != "/certfile.pem" { - t.Errorf("BindAddress incorrectly composed. Expected: %s, got: %s", "/certfile.pem", server.certfile) - } - - if server.keyfile != "/keyfile.pem" { - t.Errorf("BindAddress incorrectly composed. Expected: %s, got: %s", "/keyfile.pem", server.keyfile) - } - }