launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/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  	"launchpad.net/errgo/errors"
     8  	gc "launchpad.net/gocheck"
     9  
    10  	"launchpad.net/juju-core/state"
    11  	"launchpad.net/juju-core/state/api/params"
    12  	"launchpad.net/juju-core/state/apiserver/common"
    13  	jc "launchpad.net/juju-core/testing/checkers"
    14  )
    15  
    16  type environMachinesWatcherSuite struct{}
    17  
    18  var _ = gc.Suite(&environMachinesWatcherSuite{})
    19  
    20  type fakeEnvironMachinesWatcher struct {
    21  	state.EnvironMachinesWatcher
    22  	initial []string
    23  }
    24  
    25  func (f *fakeEnvironMachinesWatcher) WatchEnvironMachines() state.StringsWatcher {
    26  	changes := make(chan []string, 1)
    27  	// Simulate initial event.
    28  	changes <- f.initial
    29  	return &fakeStringsWatcher{changes}
    30  }
    31  
    32  func (*environMachinesWatcherSuite) TestWatchEnvironMachines(c *gc.C) {
    33  	getCanWatch := func() (common.AuthFunc, error) {
    34  		return func(tag string) bool {
    35  			return true
    36  		}, nil
    37  	}
    38  	resources := common.NewResources()
    39  	e := common.NewEnvironMachinesWatcher(
    40  		&fakeEnvironMachinesWatcher{initial: []string{"foo"}},
    41  		resources,
    42  		getCanWatch,
    43  	)
    44  	result, err := e.WatchEnvironMachines()
    45  	c.Assert(err, gc.IsNil)
    46  	c.Assert(result, jc.DeepEquals, params.StringsWatchResult{"1", []string{"foo"}, nil})
    47  	c.Assert(resources.Count(), gc.Equals, 1)
    48  }
    49  
    50  func (*environMachinesWatcherSuite) TestWatchGetAuthError(c *gc.C) {
    51  	getCanWatch := func() (common.AuthFunc, error) {
    52  		return nil, errors.Newf("pow")
    53  	}
    54  	resources := common.NewResources()
    55  	e := common.NewEnvironMachinesWatcher(
    56  		&fakeEnvironMachinesWatcher{},
    57  		resources,
    58  		getCanWatch,
    59  	)
    60  	_, err := e.WatchEnvironMachines()
    61  	c.Assert(err, gc.ErrorMatches, "pow")
    62  	c.Assert(resources.Count(), gc.Equals, 0)
    63  }
    64  
    65  func (*environMachinesWatcherSuite) TestWatchAuthError(c *gc.C) {
    66  	getCanWatch := func() (common.AuthFunc, error) {
    67  		return func(tag string) bool {
    68  			return false
    69  		}, nil
    70  	}
    71  	resources := common.NewResources()
    72  	e := common.NewEnvironMachinesWatcher(
    73  		&fakeEnvironMachinesWatcher{},
    74  		resources,
    75  		getCanWatch,
    76  	)
    77  	_, err := e.WatchEnvironMachines()
    78  	c.Assert(err, gc.ErrorMatches, "permission denied")
    79  	c.Assert(resources.Count(), gc.Equals, 0)
    80  }