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  }