Add e2e test
diff --git a/core/kg/server/grpc_server.go b/core/kg/server/grpc_server.go
index 0e4f9e6..966029e 100644
--- a/core/kg/server/grpc_server.go
+++ b/core/kg/server/grpc_server.go
@@ -5,7 +5,6 @@
"net"
"os"
- "github.com/giolekva/pcloud/core/kg/app"
"github.com/giolekva/pcloud/core/kg/log"
"github.com/giolekva/pcloud/core/kg/model"
"github.com/giolekva/pcloud/core/kg/model/proto"
@@ -15,16 +14,16 @@
// GRPCServerImpl grpc server implementation
type GRPCServerImpl struct {
- Log *log.Logger
+ Log loggerIface
srv *grpc.Server
config *model.Config
- app *app.App
+ app appIface
}
var _ Server = &GRPCServerImpl{}
// NewGRPCServer creates new GRPC Server
-func NewGRPCServer(logger *log.Logger, config *model.Config, app *app.App) Server {
+func NewGRPCServer(logger loggerIface, config *model.Config, app appIface) Server {
a := &GRPCServerImpl{
Log: logger,
config: config,
diff --git a/core/kg/server/http_server.go b/core/kg/server/http_server.go
index 6802332..67eab88 100644
--- a/core/kg/server/http_server.go
+++ b/core/kg/server/http_server.go
@@ -16,7 +16,7 @@
// HTTPServerImpl http server implementation
type HTTPServerImpl struct {
- Log *log.Logger
+ Log loggerIface
srv *http.Server
root *mux.Router
config *model.Config
@@ -26,7 +26,7 @@
var _ Server = &HTTPServerImpl{}
// NewHTTPServer creates new HTTP Server
-func NewHTTPServer(logger *log.Logger, config *model.Config, store store.Store) Server {
+func NewHTTPServer(logger loggerIface, config *model.Config, store store.Store) Server {
a := &HTTPServerImpl{
Log: logger,
root: mux.NewRouter(),
diff --git a/core/kg/server/interfaces.go b/core/kg/server/interfaces.go
new file mode 100644
index 0000000..0316ea6
--- /dev/null
+++ b/core/kg/server/interfaces.go
@@ -0,0 +1,17 @@
+package server
+
+import (
+ "github.com/giolekva/pcloud/core/kg/log"
+ "github.com/giolekva/pcloud/core/kg/model"
+)
+
+type loggerIface interface {
+ Debug(message string, fields ...log.Field)
+ Info(message string, fields ...log.Field)
+ Warn(message string, fields ...log.Field)
+ Error(message string, fields ...log.Field)
+}
+
+type appIface interface {
+ GetUser(userID string) (*model.User, error)
+}
diff --git a/core/kg/server/servers.go b/core/kg/server/servers.go
index 7363a0e..9d91b34 100644
--- a/core/kg/server/servers.go
+++ b/core/kg/server/servers.go
@@ -17,11 +17,11 @@
// Servers represents different server services
type Servers struct {
servers []Server
- logger *log.Logger
+ logger loggerIface
}
// New provides new service application
-func New(logger *log.Logger) *Servers {
+func New(logger loggerIface) *Servers {
return &Servers{
logger: logger,
}
diff --git a/core/kg/server/servers_mock.go b/core/kg/server/servers_mock.go
new file mode 100644
index 0000000..2260d2c
--- /dev/null
+++ b/core/kg/server/servers_mock.go
@@ -0,0 +1,54 @@
+package server
+
+import (
+ "testing"
+ "time"
+
+ "github.com/giolekva/pcloud/core/kg/app"
+ "github.com/giolekva/pcloud/core/kg/log"
+ "github.com/giolekva/pcloud/core/kg/model"
+)
+
+type MockServer struct {
+ App appIface
+ Servers []Server
+ Config *model.Config
+}
+
+func Setup(tb testing.TB) *MockServer {
+ if testing.Short() {
+ tb.SkipNow()
+ }
+ app := app.NewTestApp()
+ config := model.NewConfig()
+ logger := &log.NoOpLogger{}
+ grpcServer := NewGRPCServer(logger, config, app)
+ httpServer := NewHTTPServer(logger, config, nil)
+ ts := &MockServer{
+ App: app,
+ Servers: []Server{grpcServer, httpServer},
+ Config: config,
+ }
+ go grpcServer.Start()
+ go httpServer.Start()
+ time.Sleep(1 * time.Second)
+ return ts
+}
+
+func (ts *MockServer) ShutdownServers() {
+ done := make(chan bool)
+ go func() {
+ for _, server := range ts.Servers {
+ server.Shutdown()
+ }
+ close(done)
+ }()
+
+ select {
+ case <-done:
+ case <-time.After(30 * time.Second):
+ // panic instead of fatal to terminate all tests in this package, otherwise the
+ // still running server could spuriously fail subsequent tests.
+ panic("failed to shutdown server within 30 seconds")
+ }
+}