From 81379c22e2f169904eb1ac178850a41aee25a109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Hurtado?= Date: Mon, 7 Oct 2019 13:48:35 +0200 Subject: [PATCH 1/3] First non-working version of server package --- server/server.go | 62 +++++++++++++++++++++++++++++++++++++++++++ server/server_test.go | 39 +++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 server/server.go create mode 100644 server/server_test.go diff --git a/server/server.go b/server/server.go new file mode 100644 index 0000000..976028f --- /dev/null +++ b/server/server.go @@ -0,0 +1,62 @@ +package server + +import ( + "fmt" + "log" + "net/url" + "os" + "strconv" + + "github.com/BBVA/kapow/server/control" + "github.com/BBVA/kapow/server/data" + "github.com/BBVA/kapow/server/user" +) + +// StartServer Starts one instance of each server in a goroutine and remains listening on a channel for trace events generated by them +func StartServer(bindAddr, certfile, keyfile string, interactive bool) error { + + // Parse URI and manage parameters to extract + userBindAddr, err := url.Parse(bindAddr) + if err != nil { + return err + } + + userPort, err := strconv.ParseInt(userBindAddr.Port(), 10, 64) + if err != nil { + return fmt.Errorf("Error extracting port from provided address %s", bindAddr) + } + + if certfile != "" { + if _, err := os.Stat(certfile); err != nil { + if os.IsNotExist(err) { + return fmt.Errorf("Certfile %s does not exist", certfile) + } + } + } + + if keyfile != "" { + if _, err := os.Stat(keyfile); err != nil { + if os.IsNotExist(err) { + return fmt.Errorf("Keyfile %s does not exist", keyfile) + } + } + } + + ctrlPort := userPort + 1 + dataPort := ctrlPort + 1 + + dataServer := data.NewDataServer(userBindAddr.Host(), dataPort, certfile, keyfile) + ctrlServer := control.NewControlServer(userBindAddr.Host(), ctrlPort, certfile, keyfile) // Needs a reference to the user server in order to manage routes + userServer := user.NewUserServer(userBindAddr.Host(), controlServerPort, certfile, keyfile) // Needs a reference to the data server in order to manage handlers + + traceChannel := make(chan string) + + go ctrlServer.Start(traceChannel) + go dataServer.Start(traceChannel) + go ctrlServer.Start(traceChannel) + + // Wait for ever while writing logs + for { + log.Print(<-traceChannel) + } +} diff --git a/server/server_test.go b/server/server_test.go new file mode 100644 index 0000000..75c1b30 --- /dev/null +++ b/server/server_test.go @@ -0,0 +1,39 @@ +package server_test + +import ( + "testing" + + "github.com/BBVA/kapow/server" +) + +func TestStartServerWhenInvalidBindAddrReturnsError(t *testing.T) { + + err := server.StartServer("foo;bar", "", "", true) + if err == nil { + t.Errorf("Expected error not found") + } +} + +func TestStartServerWhenInvalidPortNumberReturnsError(t *testing.T) { + + err := server.StartServer("0.0.0.0:bar", "", "", true) + if err == nil { + t.Errorf("Expected error not found") + } +} + +func TestStartServerWhenCertfileDontExistReturnsError(t *testing.T) { + + err := server.StartServer("0.0.0.0:8080", "/notExist", "", true) + if err == nil { + t.Errorf("Expected error not found") + } +} + +func TestStartServerWhenKeyfileDontExistReturnsError(t *testing.T) { + + err := server.StartServer("0.0.0.0:8080", "", "/notExist", true) + if err == nil { + t.Errorf("Expected error not found") + } +} From 7fdef70e397df4a26080b25bb5c601265bfffb33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Hurtado?= Date: Tue, 8 Oct 2019 08:56:04 +0200 Subject: [PATCH 2/3] Moved to internal --- {server => internal/server}/server.go | 0 {server => internal/server}/server_test.go | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {server => internal/server}/server.go (100%) rename {server => internal/server}/server_test.go (100%) diff --git a/server/server.go b/internal/server/server.go similarity index 100% rename from server/server.go rename to internal/server/server.go diff --git a/server/server_test.go b/internal/server/server_test.go similarity index 100% rename from server/server_test.go rename to internal/server/server_test.go From bb0a283813fba2862f06d2c6ea977a2ccc77b901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Hurtado?= Date: Tue, 8 Oct 2019 09:40:51 +0200 Subject: [PATCH 3/3] Prepare to merge master --- internal/server/server.go | 45 ++++++---------------------------- internal/server/server_test.go | 18 +------------- 2 files changed, 9 insertions(+), 54 deletions(-) diff --git a/internal/server/server.go b/internal/server/server.go index 976028f..08b7af5 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -2,14 +2,8 @@ package server import ( "fmt" - "log" "net/url" - "os" "strconv" - - "github.com/BBVA/kapow/server/control" - "github.com/BBVA/kapow/server/data" - "github.com/BBVA/kapow/server/user" ) // StartServer Starts one instance of each server in a goroutine and remains listening on a channel for trace events generated by them @@ -26,37 +20,14 @@ func StartServer(bindAddr, certfile, keyfile string, interactive bool) error { return fmt.Errorf("Error extracting port from provided address %s", bindAddr) } - if certfile != "" { - if _, err := os.Stat(certfile); err != nil { - if os.IsNotExist(err) { - return fmt.Errorf("Certfile %s does not exist", certfile) - } - } - } + ctrlBindAddr := fmt.Sprintf("%s:%d", userBindAddr.Host, userPort+1) + dataBindAddr := fmt.Sprintf("%s:%d", userBindAddr.Host, userPort+2) - if keyfile != "" { - if _, err := os.Stat(keyfile); err != nil { - if os.IsNotExist(err) { - return fmt.Errorf("Keyfile %s does not exist", keyfile) - } - } - } + fmt.Printf("User server bind address: %s, Control server bind address: %s, Data server bind address: %s", bindAddr, ctrlBindAddr, dataBindAddr) + //go ctrlServer.Start(traceChannel) + //go dataServer.Start(traceChannel) + //go ctrlServer.Start(traceChannel) - ctrlPort := userPort + 1 - dataPort := ctrlPort + 1 - - dataServer := data.NewDataServer(userBindAddr.Host(), dataPort, certfile, keyfile) - ctrlServer := control.NewControlServer(userBindAddr.Host(), ctrlPort, certfile, keyfile) // Needs a reference to the user server in order to manage routes - userServer := user.NewUserServer(userBindAddr.Host(), controlServerPort, certfile, keyfile) // Needs a reference to the data server in order to manage handlers - - traceChannel := make(chan string) - - go ctrlServer.Start(traceChannel) - go dataServer.Start(traceChannel) - go ctrlServer.Start(traceChannel) - - // Wait for ever while writing logs - for { - log.Print(<-traceChannel) - } + // Wait for ever + select {} } diff --git a/internal/server/server_test.go b/internal/server/server_test.go index 75c1b30..d104143 100644 --- a/internal/server/server_test.go +++ b/internal/server/server_test.go @@ -3,7 +3,7 @@ package server_test import ( "testing" - "github.com/BBVA/kapow/server" + "github.com/BBVA/kapow/internal/server" ) func TestStartServerWhenInvalidBindAddrReturnsError(t *testing.T) { @@ -21,19 +21,3 @@ func TestStartServerWhenInvalidPortNumberReturnsError(t *testing.T) { t.Errorf("Expected error not found") } } - -func TestStartServerWhenCertfileDontExistReturnsError(t *testing.T) { - - err := server.StartServer("0.0.0.0:8080", "/notExist", "", true) - if err == nil { - t.Errorf("Expected error not found") - } -} - -func TestStartServerWhenKeyfileDontExistReturnsError(t *testing.T) { - - err := server.StartServer("0.0.0.0:8080", "", "/notExist", true) - if err == nil { - t.Errorf("Expected error not found") - } -}