diff options
-rw-r--r-- | go.mod | 1 | ||||
-rw-r--r-- | go.sum | 1 | ||||
-rw-r--r-- | service/container.go | 7 | ||||
-rw-r--r-- | service/container_test.go | 33 | ||||
-rw-r--r-- | service/gzip/service.go | 5 | ||||
-rw-r--r-- | service/gzip/service_test.go | 18 |
6 files changed, 49 insertions, 16 deletions
@@ -22,4 +22,5 @@ require ( github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a github.com/yookoala/gofast v0.4.0 golang.org/x/net v0.0.0-20200222125558-5a598a2470a0 + golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e ) @@ -271,6 +271,7 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/service/container.go b/service/container.go index 85f63eeb..77a6dfc0 100644 --- a/service/container.go +++ b/service/container.go @@ -166,8 +166,10 @@ func (c *container) Init(cfg Config) error { // Serve all configured services. Non blocking. func (c *container) Serve() error { + var running = 0 for _, e := range c.services { if e.hasStatus(StatusOK) && e.canServe() { + running++ c.log.Debugf("[%s]: started", e.name) go func(e *entry) { e.setStatus(StatusServing) @@ -187,6 +189,11 @@ func (c *container) Serve() error { } } + // simple handler to handle empty configs + if running == 0 { + return nil + } + for fail := range c.errc { if fail.err == errTempFix223 { // if we call stop, then stop all plugins diff --git a/service/container_test.go b/service/container_test.go index 94bc243f..d7ca73a7 100644 --- a/service/container_test.go +++ b/service/container_test.go @@ -302,22 +302,23 @@ func TestContainer_ConfigureTwice(t *testing.T) { assert.Error(t, c.Init(&testCfg{`{"test":"something"}`})) } -//func TestContainer_ServeEmptyContainer(t *testing.T) { -// logger, hook := test.NewNullLogger() -// logger.SetLevel(logrus.DebugLevel) -// -// svc := &testService{ok: true} -// -// c := NewContainer(logger) -// c.Register("test", svc) -// assert.Equal(t, 0, len(hook.Entries)) -// -// go assert.NoError(t, c.Serve()) -// -// time.Sleep(time.Millisecond * 500) -// -// c.Stop() -//} +// bug #276 test +func TestContainer_ServeEmptyContainer(t *testing.T) { + logger, hook := test.NewNullLogger() + logger.SetLevel(logrus.DebugLevel) + + svc := &testService{ok: true} + + c := NewContainer(logger) + c.Register("test", svc) + assert.Equal(t, 0, len(hook.Entries)) + + go assert.NoError(t, c.Serve()) + + time.Sleep(time.Millisecond * 500) + + c.Stop() +} func TestContainer_Serve(t *testing.T) { logger, hook := test.NewNullLogger() diff --git a/service/gzip/service.go b/service/gzip/service.go index bb6bcfcd..5ae3ffd5 100644 --- a/service/gzip/service.go +++ b/service/gzip/service.go @@ -1,6 +1,7 @@ package gzip import ( + "errors" "github.com/NYTimes/gziphandler" rrhttp "github.com/spiral/roadrunner/service/http" "net/http" @@ -8,12 +9,16 @@ import ( // ID contains default service name. const ID = "gzip" +var httpNotInitialized = errors.New("http service should be defined properly in config") type Service struct { cfg *Config } func (s *Service) Init(cfg *Config, r *rrhttp.Service) (bool, error) { + if r == nil { + return false, httpNotInitialized + } s.cfg = cfg if !s.cfg.Enable { diff --git a/service/gzip/service_test.go b/service/gzip/service_test.go index 858dbe56..ba14b862 100644 --- a/service/gzip/service_test.go +++ b/service/gzip/service_test.go @@ -47,3 +47,21 @@ func Test_Disabled(t *testing.T) { assert.NotNil(t, s) assert.Equal(t, service.StatusInactive, st) } + +// TEST bug #275 +func Test_Bug275(t *testing.T) { + logger, _ := test.NewNullLogger() + logger.SetLevel(logrus.DebugLevel) + + c := service.NewContainer(logger) + c.Register(ID, &Service{}) + + assert.Error(t, c.Init(&testCfg{ + httpCfg:"", + gzip: `{"enable":false}`, + })) + + s, st := c.Get(ID) + assert.NotNil(t, s) + assert.Equal(t, service.StatusInactive, st) +} |