diff options
author | Wolfy-J <[email protected]> | 2018-07-26 17:47:46 +0300 |
---|---|---|
committer | GitHub <[email protected]> | 2018-07-26 17:47:46 +0300 |
commit | 3bed6a4ff255a5cb16fc4ad5f9faa62a068ef723 (patch) | |
tree | fcd055b054d57efcb7a8289724e334460169a25f /service/env | |
parent | 0f8e2bab6888f1b27ed2bd1b91ac6b2677f03450 (diff) | |
parent | a2c1861165c9f61f8ece133f2edecb9aadfabe26 (diff) |
Merge pull request #32 from spiral/feature/env-manager
Feature/env manager
Diffstat (limited to 'service/env')
-rw-r--r-- | service/env/config.go | 16 | ||||
-rw-r--r-- | service/env/config_test.go | 29 | ||||
-rw-r--r-- | service/env/provider.go | 8 | ||||
-rw-r--r-- | service/env/service.go | 30 | ||||
-rw-r--r-- | service/env/service_test.go | 24 |
5 files changed, 107 insertions, 0 deletions
diff --git a/service/env/config.go b/service/env/config.go new file mode 100644 index 00000000..d0ba686b --- /dev/null +++ b/service/env/config.go @@ -0,0 +1,16 @@ +package env + +import ( + "github.com/spiral/roadrunner/service" +) + +// Config defines set of env values for RR workers. +type Config struct { + // values to set as worker _ENV. + Values map[string]string +} + +// Hydrate must populate Config values using given Config source. Must return error if Config is not valid. +func (c *Config) Hydrate(cfg service.Config) error { + return cfg.Unmarshal(&c.Values) +} diff --git a/service/env/config_test.go b/service/env/config_test.go new file mode 100644 index 00000000..3ae2afbc --- /dev/null +++ b/service/env/config_test.go @@ -0,0 +1,29 @@ +package env + +import ( + "encoding/json" + "github.com/spiral/roadrunner/service" + "github.com/stretchr/testify/assert" + "testing" +) + +type mockCfg struct{ cfg string } + +func (cfg *mockCfg) Get(name string) service.Config { return nil } +func (cfg *mockCfg) Unmarshal(out interface{}) error { return json.Unmarshal([]byte(cfg.cfg), out) } + +func Test_Config_Hydrate(t *testing.T) { + cfg := &mockCfg{`{"key":"value"}`} + c := &Config{} + + assert.NoError(t, c.Hydrate(cfg)) + assert.Len(t, c.Values, 1) +} + +func Test_Config_Hydrate_Empty(t *testing.T) { + cfg := &mockCfg{`{}`} + c := &Config{} + + assert.NoError(t, c.Hydrate(cfg)) + assert.Len(t, c.Values, 0) +} diff --git a/service/env/provider.go b/service/env/provider.go new file mode 100644 index 00000000..2918f18c --- /dev/null +++ b/service/env/provider.go @@ -0,0 +1,8 @@ +package env + +// Provider aggregates list of environment variables. This interface can be used in custom implementation to drive +// values from external sources. +type Provider interface { + // GetEnv must return list of env variables. + GetEnv() (map[string]string, error) +} diff --git a/service/env/service.go b/service/env/service.go new file mode 100644 index 00000000..9fb110c3 --- /dev/null +++ b/service/env/service.go @@ -0,0 +1,30 @@ +package env + +// ID contains default svc name. +const ID = "env" + +// Service provides ability to map _ENV values from config file. +type Service struct { + // values is default set of values. + values map[string]string +} + +// NewService creates new env service instance for given rr version. +func NewService(version string) *Service { + return &Service{values: map[string]string{"rr": version}} +} + +// Init must return configure svc and return true if svc hasStatus enabled. Must return error in case of +// misconfiguration. Services must not be used without proper configuration pushed first. +func (s *Service) Init(cfg *Config) (bool, error) { + for k, v := range cfg.Values { + s.values[k] = v + } + + return true, nil +} + +// GetEnv must return list of env variables. +func (s *Service) GetEnv() (map[string]string, error) { + return s.values, nil +} diff --git a/service/env/service_test.go b/service/env/service_test.go new file mode 100644 index 00000000..f25e56c7 --- /dev/null +++ b/service/env/service_test.go @@ -0,0 +1,24 @@ +package env + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func Test_NewService(t *testing.T) { + s := NewService("version") + assert.Len(t, s.values, 1) +} + +func Test_Extend(t *testing.T) { + s := NewService("version") + + s.Init(&Config{Values: map[string]string{"key": "value"}}) + assert.Len(t, s.values, 2) + + values, err := s.GetEnv() + assert.NoError(t, err) + assert.Len(t, values, 2) + assert.Equal(t, "version", values["rr"]) + assert.Equal(t, "value", values["key"]) +} |