~ubuntu-branches/ubuntu/trusty/juju-core/trusty-proposed

« back to all changes in this revision

Viewing changes to src/launchpad.net/juju-core/state/apiserver/common/testing/environwatcher.go

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-01-29 11:40:20 UTC
  • mfrom: (23.1.1 trusty-proposed)
  • Revision ID: package-import@ubuntu.com-20140129114020-ejieitm8smtt5vln
Tags: 1.17.1-0ubuntu2
d/tests/local-provider: Don't fail tests if ~/.juju is present as its
created by the juju version command. 

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/state"
 
11
        "launchpad.net/juju-core/state/api/params"
 
12
        "launchpad.net/juju-core/state/apiserver/common"
 
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 EnvironmentWatcher interface {
 
23
        WatchForEnvironConfigChanges() (params.NotifyWatchResult, error)
 
24
        EnvironConfig() (params.EnvironConfigResult, error)
 
25
}
 
26
 
 
27
type EnvironWatcherTest struct {
 
28
        envWatcher EnvironmentWatcher
 
29
        st         *state.State
 
30
        resources  *common.Resources
 
31
        hasSecrets bool
 
32
}
 
33
 
 
34
func NewEnvironWatcherTest(
 
35
        envWatcher EnvironmentWatcher,
 
36
        st *state.State,
 
37
        resources *common.Resources,
 
38
        hasSecrets bool) *EnvironWatcherTest {
 
39
        return &EnvironWatcherTest{envWatcher, st, resources, hasSecrets}
 
40
}
 
41
 
 
42
// AssertEnvironConfig provides a method to test the config from the
 
43
// envWatcher.  This allows other tests that embed this type to have
 
44
// more than just the default test.
 
45
func (s *EnvironWatcherTest) AssertEnvironConfig(c *gc.C, envWatcher EnvironmentWatcher, hasSecrets bool) {
 
46
        envConfig, err := s.st.EnvironConfig()
 
47
        c.Assert(err, gc.IsNil)
 
48
 
 
49
        result, err := envWatcher.EnvironConfig()
 
50
        c.Assert(err, gc.IsNil)
 
51
        c.Assert(result.Error, gc.IsNil)
 
52
 
 
53
        configAttributes := envConfig.AllAttrs()
 
54
        // If the implementor doesn't provide secrets, we need to replace the config
 
55
        // values in our environment to compare against with the secrets replaced.
 
56
        if !hasSecrets {
 
57
                env, err := environs.New(envConfig)
 
58
                c.Assert(err, gc.IsNil)
 
59
                secretAttrs, err := env.Provider().SecretAttrs(envConfig)
 
60
                c.Assert(err, gc.IsNil)
 
61
                for key := range secretAttrs {
 
62
                        configAttributes[key] = "not available"
 
63
                }
 
64
        }
 
65
 
 
66
        c.Assert(result.Config, jc.DeepEquals, params.EnvironConfig(configAttributes))
 
67
}
 
68
 
 
69
func (s *EnvironWatcherTest) TestEnvironConfig(c *gc.C) {
 
70
        s.AssertEnvironConfig(c, s.envWatcher, s.hasSecrets)
 
71
}
 
72
 
 
73
func (s *EnvironWatcherTest) TestWatchForEnvironConfigChanges(c *gc.C) {
 
74
        c.Assert(s.resources.Count(), gc.Equals, 0)
 
75
 
 
76
        result, err := s.envWatcher.WatchForEnvironConfigChanges()
 
77
        c.Assert(err, gc.IsNil)
 
78
        c.Assert(result, gc.DeepEquals, params.NotifyWatchResult{
 
79
                NotifyWatcherId: "1",
 
80
        })
 
81
 
 
82
        // Verify the resources were registered and stop them when done.
 
83
        c.Assert(s.resources.Count(), gc.Equals, 1)
 
84
        resource := s.resources.Get("1")
 
85
        defer statetesting.AssertStop(c, resource)
 
86
 
 
87
        // Check that the Watch has consumed the initial event ("returned"
 
88
        // in the Watch call)
 
89
        wc := statetesting.NewNotifyWatcherC(c, s.st, resource.(state.NotifyWatcher))
 
90
        wc.AssertNoChange()
 
91
}