blob: 2260d2c6156ae6f347c02bc6138c21843b11bd5b [file] [log] [blame]
iomodocf795602021-03-07 23:14:15 +04001package server
2
3import (
4 "testing"
5 "time"
6
7 "github.com/giolekva/pcloud/core/kg/app"
8 "github.com/giolekva/pcloud/core/kg/log"
9 "github.com/giolekva/pcloud/core/kg/model"
10)
11
12type MockServer struct {
13 App appIface
14 Servers []Server
15 Config *model.Config
16}
17
18func Setup(tb testing.TB) *MockServer {
19 if testing.Short() {
20 tb.SkipNow()
21 }
22 app := app.NewTestApp()
23 config := model.NewConfig()
24 logger := &log.NoOpLogger{}
25 grpcServer := NewGRPCServer(logger, config, app)
26 httpServer := NewHTTPServer(logger, config, nil)
27 ts := &MockServer{
28 App: app,
29 Servers: []Server{grpcServer, httpServer},
30 Config: config,
31 }
32 go grpcServer.Start()
33 go httpServer.Start()
34 time.Sleep(1 * time.Second)
35 return ts
36}
37
38func (ts *MockServer) ShutdownServers() {
39 done := make(chan bool)
40 go func() {
41 for _, server := range ts.Servers {
42 server.Shutdown()
43 }
44 close(done)
45 }()
46
47 select {
48 case <-done:
49 case <-time.After(30 * time.Second):
50 // panic instead of fatal to terminate all tests in this package, otherwise the
51 // still running server could spuriously fail subsequent tests.
52 panic("failed to shutdown server within 30 seconds")
53 }
54}