diff --git a/internal/server/server.go b/internal/server/server.go new file mode 100644 index 0000000..08b7af5 --- /dev/null +++ b/internal/server/server.go @@ -0,0 +1,33 @@ +package server + +import ( + "fmt" + "net/url" + "strconv" +) + +// 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) + } + + ctrlBindAddr := fmt.Sprintf("%s:%d", userBindAddr.Host, userPort+1) + dataBindAddr := fmt.Sprintf("%s:%d", userBindAddr.Host, userPort+2) + + 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) + + // Wait for ever + select {} +} diff --git a/internal/server/server_test.go b/internal/server/server_test.go new file mode 100644 index 0000000..d104143 --- /dev/null +++ b/internal/server/server_test.go @@ -0,0 +1,23 @@ +package server_test + +import ( + "testing" + + "github.com/BBVA/kapow/internal/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") + } +}