1
// Copyright 2014 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
gc "launchpad.net/gocheck"
9
"launchpad.net/juju-core/environs"
10
"launchpad.net/juju-core/environs/config"
11
"launchpad.net/juju-core/state"
12
"launchpad.net/juju-core/state/api/watcher"
13
statetesting "launchpad.net/juju-core/state/testing"
14
jc "launchpad.net/juju-core/testing/checkers"
22
type Façade interface {
23
WatchForEnvironConfigChanges() (watcher.NotifyWatcher, error)
24
EnvironConfig() (*config.Config, error)
27
type EnvironWatcherTest struct {
34
func NewEnvironWatcherTest(
38
hasSecrets bool) *EnvironWatcherTest {
39
return &EnvironWatcherTest{facade, st, backing, hasSecrets}
42
func (s *EnvironWatcherTest) TestEnvironConfig(c *gc.C) {
43
envConfig, err := s.st.EnvironConfig()
44
c.Assert(err, gc.IsNil)
46
conf, err := s.facade.EnvironConfig()
47
c.Assert(err, gc.IsNil)
49
// If the facade doesn't have secrets, we need to replace the config
50
// values in our environment to compare against with the secrets replaced.
52
env, err := environs.New(envConfig)
53
c.Assert(err, gc.IsNil)
54
secretAttrs, err := env.Provider().SecretAttrs(envConfig)
55
c.Assert(err, gc.IsNil)
56
secrets := make(map[string]interface{})
57
for key := range secretAttrs {
58
secrets[key] = "not available"
60
envConfig, err = envConfig.Apply(secrets)
61
c.Assert(err, gc.IsNil)
64
c.Assert(conf, jc.DeepEquals, envConfig)
67
func (s *EnvironWatcherTest) TestWatchForEnvironConfigChanges(c *gc.C) {
68
envConfig, err := s.st.EnvironConfig()
69
c.Assert(err, gc.IsNil)
71
w, err := s.facade.WatchForEnvironConfigChanges()
72
c.Assert(err, gc.IsNil)
73
defer statetesting.AssertStop(c, w)
74
wc := statetesting.NewNotifyWatcherC(c, s.backing, w)
79
// Change the environment configuration, check it's detected.
80
attrs := envConfig.AllAttrs()
81
attrs["type"] = "blah"
82
newConfig, err := config.New(config.NoDefaults, attrs)
83
c.Assert(err, gc.IsNil)
84
err = s.st.SetEnvironConfig(newConfig, envConfig)
85
c.Assert(err, gc.IsNil)
88
// Change it back to the original config.
89
err = s.st.SetEnvironConfig(envConfig, newConfig)
90
c.Assert(err, gc.IsNil)
93
statetesting.AssertStop(c, w)