github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/common/modelmachineswatcher_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  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  	"gopkg.in/juju/names.v2"
    10  
    11  	"github.com/juju/juju/apiserver/common"
    12  	"github.com/juju/juju/apiserver/params"
    13  	apiservertesting "github.com/juju/juju/apiserver/testing"
    14  	"github.com/juju/juju/state"
    15  	"github.com/juju/juju/testing"
    16  )
    17  
    18  type modelMachinesWatcherSuite struct {
    19  	testing.BaseSuite
    20  }
    21  
    22  var _ = gc.Suite(&modelMachinesWatcherSuite{})
    23  
    24  type fakeModelMachinesWatcher struct {
    25  	state.ModelMachinesWatcher
    26  	initial []string
    27  }
    28  
    29  func (f *fakeModelMachinesWatcher) WatchModelMachines() state.StringsWatcher {
    30  	changes := make(chan []string, 1)
    31  	// Simulate initial event.
    32  	changes <- f.initial
    33  	return &fakeStringsWatcher{changes}
    34  }
    35  
    36  func (s *modelMachinesWatcherSuite) TestWatchModelMachines(c *gc.C) {
    37  	authorizer := apiservertesting.FakeAuthorizer{
    38  		Tag:        names.NewMachineTag("0"),
    39  		Controller: true,
    40  	}
    41  	resources := common.NewResources()
    42  	s.AddCleanup(func(_ *gc.C) { resources.StopAll() })
    43  	e := common.NewModelMachinesWatcher(
    44  		&fakeModelMachinesWatcher{initial: []string{"foo"}},
    45  		resources,
    46  		authorizer,
    47  	)
    48  	result, err := e.WatchModelMachines()
    49  	c.Assert(err, jc.ErrorIsNil)
    50  	c.Assert(result, jc.DeepEquals, params.StringsWatchResult{"1", []string{"foo"}, nil})
    51  	c.Assert(resources.Count(), gc.Equals, 1)
    52  }
    53  
    54  func (s *modelMachinesWatcherSuite) TestWatchAuthError(c *gc.C) {
    55  	authorizer := apiservertesting.FakeAuthorizer{
    56  		Tag:        names.NewMachineTag("1"),
    57  		Controller: false,
    58  	}
    59  	resources := common.NewResources()
    60  	s.AddCleanup(func(_ *gc.C) { resources.StopAll() })
    61  	e := common.NewModelMachinesWatcher(
    62  		&fakeModelMachinesWatcher{},
    63  		resources,
    64  		authorizer,
    65  	)
    66  	_, err := e.WatchModelMachines()
    67  	c.Assert(err, gc.ErrorMatches, "permission denied")
    68  	c.Assert(resources.Count(), gc.Equals, 0)
    69  }