1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
9
gc "launchpad.net/gocheck"
11
"launchpad.net/juju-core/state"
12
"launchpad.net/juju-core/state/api/params"
13
"launchpad.net/juju-core/state/apiserver/common"
14
apiservertesting "launchpad.net/juju-core/state/apiserver/testing"
15
jc "launchpad.net/juju-core/testing/checkers"
18
type unitsWatcherSuite struct{}
20
var _ = gc.Suite(&unitsWatcherSuite{})
22
type fakeUnitsWatcher struct {
28
func (f *fakeUnitsWatcher) WatchUnits() state.StringsWatcher {
29
changes := make(chan []string, 1)
30
// Simulate initial event.
32
return &fakeStringsWatcher{changes}
35
type fakeStringsWatcher struct {
39
func (*fakeStringsWatcher) Stop() error {
43
func (*fakeStringsWatcher) Kill() {}
45
func (*fakeStringsWatcher) Wait() error {
49
func (*fakeStringsWatcher) Err() error {
53
func (w *fakeStringsWatcher) Changes() <-chan []string {
57
func (*unitsWatcherSuite) TestWatchUnits(c *gc.C) {
59
entities: map[string]entityWithError{
60
"x0": &fakeUnitsWatcher{fetchError: "x0 fails"},
61
"x1": &fakeUnitsWatcher{initial: []string{"foo", "bar"}},
62
"x2": &fakeUnitsWatcher{},
65
getCanWatch := func() (common.AuthFunc, error) {
66
return func(tag string) bool {
74
resources := common.NewResources()
75
w := common.NewUnitsWatcher(st, resources, getCanWatch)
76
entities := params.Entities{[]params.Entity{
77
{"x0"}, {"x1"}, {"x2"}, {"x3"},
79
result, err := w.WatchUnits(entities)
80
c.Assert(err, gc.IsNil)
81
c.Assert(result, jc.DeepEquals, params.StringsWatchResults{
82
Results: []params.StringsWatchResult{
83
{Error: ¶ms.Error{Message: "x0 fails"}},
84
{"1", []string{"foo", "bar"}, nil},
85
{Error: apiservertesting.ErrUnauthorized},
86
{Error: apiservertesting.ErrUnauthorized},
91
func (*unitsWatcherSuite) TestWatchUnitsError(c *gc.C) {
92
getCanWatch := func() (common.AuthFunc, error) {
93
return nil, fmt.Errorf("pow")
95
resources := common.NewResources()
96
w := common.NewUnitsWatcher(
101
_, err := w.WatchUnits(params.Entities{[]params.Entity{{"x0"}}})
102
c.Assert(err, gc.ErrorMatches, "pow")
105
func (*unitsWatcherSuite) TestWatchNoArgsNoError(c *gc.C) {
106
getCanWatch := func() (common.AuthFunc, error) {
107
return nil, fmt.Errorf("pow")
109
resources := common.NewResources()
110
w := common.NewUnitsWatcher(
115
result, err := w.WatchUnits(params.Entities{})
116
c.Assert(err, gc.IsNil)
117
c.Assert(result.Results, gc.HasLen, 0)