~rogpeppe/juju-core/themue-058-debug-log-api

« back to all changes in this revision

Viewing changes to state/api/common/testing/environwatcher.go

  • Committer: Frank Mueller
  • Date: 2014-01-23 14:14:49 UTC
  • mfrom: (2152.1.95 juju-core)
  • Revision ID: frank.mueller@canonical.com-20140123141449-b30l57y7gs3wjkpw
debugger: merged trunk and fixed permission and interface problems

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2014 Canonical Ltd.
 
2
// Licensed under the AGPLv3, see LICENCE file for details.
 
3
 
 
4
package testing
 
5
 
 
6
import (
 
7
        gc "launchpad.net/gocheck"
 
8
 
 
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"
 
15
)
 
16
 
 
17
const (
 
18
        HasSecrets = true
 
19
        NoSecrets  = false
 
20
)
 
21
 
 
22
type Façade interface {
 
23
        WatchForEnvironConfigChanges() (watcher.NotifyWatcher, error)
 
24
        EnvironConfig() (*config.Config, error)
 
25
}
 
26
 
 
27
type EnvironWatcherTest struct {
 
28
        facade     Façade
 
29
        st         *state.State
 
30
        backing    *state.State
 
31
        hasSecrets bool
 
32
}
 
33
 
 
34
func NewEnvironWatcherTest(
 
35
        facade Façade,
 
36
        st *state.State,
 
37
        backing *state.State,
 
38
        hasSecrets bool) *EnvironWatcherTest {
 
39
        return &EnvironWatcherTest{facade, st, backing, hasSecrets}
 
40
}
 
41
 
 
42
func (s *EnvironWatcherTest) TestEnvironConfig(c *gc.C) {
 
43
        envConfig, err := s.st.EnvironConfig()
 
44
        c.Assert(err, gc.IsNil)
 
45
 
 
46
        conf, err := s.facade.EnvironConfig()
 
47
        c.Assert(err, gc.IsNil)
 
48
 
 
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.
 
51
        if !s.hasSecrets {
 
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"
 
59
                }
 
60
                envConfig, err = envConfig.Apply(secrets)
 
61
                c.Assert(err, gc.IsNil)
 
62
        }
 
63
 
 
64
        c.Assert(conf, jc.DeepEquals, envConfig)
 
65
}
 
66
 
 
67
func (s *EnvironWatcherTest) TestWatchForEnvironConfigChanges(c *gc.C) {
 
68
        envConfig, err := s.st.EnvironConfig()
 
69
        c.Assert(err, gc.IsNil)
 
70
 
 
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)
 
75
 
 
76
        // Initial event.
 
77
        wc.AssertOneChange()
 
78
 
 
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)
 
86
        wc.AssertOneChange()
 
87
 
 
88
        // Change it back to the original config.
 
89
        err = s.st.SetEnvironConfig(envConfig, newConfig)
 
90
        c.Assert(err, gc.IsNil)
 
91
        wc.AssertOneChange()
 
92
 
 
93
        statetesting.AssertStop(c, w)
 
94
        wc.AssertClosed()
 
95
}