First non-working version of server package
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user