github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/apiserver/common/environmachineswatcher_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common_test 5 6 import ( 7 "fmt" 8 9 gc "launchpad.net/gocheck" 10 11 "launchpad.net/juju-core/state" 12 "launchpad.net/juju-core/state/api/params" 13 "launchpad.net/juju-core/state/apiserver/common" 14 jc "launchpad.net/juju-core/testing/checkers" 15 ) 16 17 type environMachinesWatcherSuite struct{} 18 19 var _ = gc.Suite(&environMachinesWatcherSuite{}) 20 21 type fakeEnvironMachinesWatcher struct { 22 state.EnvironMachinesWatcher 23 initial []string 24 } 25 26 func (f *fakeEnvironMachinesWatcher) WatchEnvironMachines() state.StringsWatcher { 27 changes := make(chan []string, 1) 28 // Simulate initial event. 29 changes <- f.initial 30 return &fakeStringsWatcher{changes} 31 } 32 33 func (*environMachinesWatcherSuite) TestWatchEnvironMachines(c *gc.C) { 34 getCanWatch := func() (common.AuthFunc, error) { 35 return func(tag string) bool { 36 return true 37 }, nil 38 } 39 resources := common.NewResources() 40 e := common.NewEnvironMachinesWatcher( 41 &fakeEnvironMachinesWatcher{initial: []string{"foo"}}, 42 resources, 43 getCanWatch, 44 ) 45 result, err := e.WatchEnvironMachines() 46 c.Assert(err, gc.IsNil) 47 c.Assert(result, jc.DeepEquals, params.StringsWatchResult{"1", []string{"foo"}, nil}) 48 c.Assert(resources.Count(), gc.Equals, 1) 49 } 50 51 func (*environMachinesWatcherSuite) TestWatchGetAuthError(c *gc.C) { 52 getCanWatch := func() (common.AuthFunc, error) { 53 return nil, fmt.Errorf("pow") 54 } 55 resources := common.NewResources() 56 e := common.NewEnvironMachinesWatcher( 57 &fakeEnvironMachinesWatcher{}, 58 resources, 59 getCanWatch, 60 ) 61 _, err := e.WatchEnvironMachines() 62 c.Assert(err, gc.ErrorMatches, "pow") 63 c.Assert(resources.Count(), gc.Equals, 0) 64 } 65 66 func (*environMachinesWatcherSuite) TestWatchAuthError(c *gc.C) { 67 getCanWatch := func() (common.AuthFunc, error) { 68 return func(tag string) bool { 69 return false 70 }, nil 71 } 72 resources := common.NewResources() 73 e := common.NewEnvironMachinesWatcher( 74 &fakeEnvironMachinesWatcher{}, 75 resources, 76 getCanWatch, 77 ) 78 _, err := e.WatchEnvironMachines() 79 c.Assert(err, gc.ErrorMatches, "permission denied") 80 c.Assert(resources.Count(), gc.Equals, 0) 81 }