summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
Diffstat (limited to 'service')
-rw-r--r--service/env/environment.go16
-rw-r--r--service/env/service.go14
-rw-r--r--service/env/service_test.go17
-rw-r--r--service/http/service.go17
4 files changed, 52 insertions, 12 deletions
diff --git a/service/env/environment.go b/service/env/environment.go
index 52a5bcf4..fe8f1dd8 100644
--- a/service/env/environment.go
+++ b/service/env/environment.go
@@ -3,9 +3,21 @@ package env
// Environment aggregates list of environment variables. This interface can be used in custom implementation to drive
// values from external sources.
type Environment interface {
- // GetEnv must return list of env variables.
- GetEnv() (map[string]string, error)
+ Setter
+ Getter
+
+ // Copy all environment values.
+ Copy(setter Setter) error
+}
+// Setter provides ability to set environment value.
+type Setter interface {
// SetEnv sets or creates environment value.
SetEnv(key, value string)
}
+
+// Setter provides ability to set environment value.
+type Getter 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
index 4d1327d4..83175b36 100644
--- a/service/env/service.go
+++ b/service/env/service.go
@@ -39,3 +39,17 @@ func (s *Service) GetEnv() (map[string]string, error) {
func (s *Service) SetEnv(key, value string) {
s.values[key] = value
}
+
+// Copy all environment values.
+func (s *Service) Copy(setter Setter) error {
+ values, err := s.GetEnv()
+ if err != nil {
+ return err
+ }
+
+ for k, v := range values {
+ setter.SetEnv(k, v)
+ }
+
+ return nil
+}
diff --git a/service/env/service_test.go b/service/env/service_test.go
index 61fecd28..c20bb76c 100644
--- a/service/env/service_test.go
+++ b/service/env/service_test.go
@@ -49,3 +49,20 @@ func Test_Set(t *testing.T) {
assert.Equal(t, "value-new", values["key"])
assert.Equal(t, "new", values["other"])
}
+
+func Test_Copy(t *testing.T) {
+ s1 := NewService(map[string]string{"RR": "version"})
+ s2 := NewService(map[string]string{})
+
+ s1.SetEnv("key", "value-new")
+ s1.SetEnv("other", "new")
+
+ assert.NoError(t, s1.Copy(s2))
+
+ values, err := s2.GetEnv()
+ assert.NoError(t, err)
+ assert.Len(t, values, 3)
+ assert.Equal(t, "version", values["RR"])
+ assert.Equal(t, "value-new", values["key"])
+ assert.Equal(t, "new", values["other"])
+}
diff --git a/service/http/service.go b/service/http/service.go
index e8e8eb51..ad59f887 100644
--- a/service/http/service.go
+++ b/service/http/service.go
@@ -54,7 +54,9 @@ func (s *Service) Init(cfg *Config, r *rpc.Service, e env.Environment) (bool, er
s.cfg = cfg
s.env = e
if r != nil {
- r.Register(ID, &rpcServer{s})
+ if err := r.Register(ID, &rpcServer{s}); err != nil {
+ return false, err
+ }
}
return true, nil
@@ -65,18 +67,13 @@ func (s *Service) Serve() error {
s.mu.Lock()
if s.env != nil {
- values, err := s.env.GetEnv()
- if err != nil {
- return err
- }
-
- for k, v := range values {
- s.cfg.Workers.SetEnv(k, v)
+ if err := s.env.Copy(s.cfg.Workers); err != nil {
+ return nil
}
-
- s.cfg.Workers.SetEnv("RR_HTTP", "true")
}
+ s.cfg.Workers.SetEnv("RR_HTTP", "true")
+
s.rr = roadrunner.NewServer(s.cfg.Workers)
s.rr.Listen(s.throw)