github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/apiserver/leadership/settings_test.go (about)

     1  package leadership
     2  
     3  import (
     4  	"github.com/juju/names"
     5  	gc "gopkg.in/check.v1"
     6  
     7  	"github.com/juju/juju/apiserver/params"
     8  )
     9  
    10  func init() {
    11  	gc.Suite(&settingsSuite{})
    12  }
    13  
    14  type settingsSuite struct{}
    15  
    16  func (s *settingsSuite) TestReadSettings(c *gc.C) {
    17  
    18  	settingsToReturn := params.Settings(map[string]string{"foo": "bar"})
    19  	numGetSettingCalls := 0
    20  	getSettings := func(serviceId string) (map[string]string, error) {
    21  		numGetSettingCalls++
    22  		c.Check(serviceId, gc.Equals, StubServiceNm)
    23  		return settingsToReturn, nil
    24  	}
    25  	stubAuthorizer := &stubAuthorizer{}
    26  	accessor := NewLeadershipSettingsAccessor(stubAuthorizer, nil, getSettings, nil, nil)
    27  
    28  	results, err := accessor.Read(params.Entities{
    29  		[]params.Entity{
    30  			{Tag: names.NewServiceTag(StubServiceNm).String()},
    31  		},
    32  	})
    33  	c.Assert(err, gc.IsNil)
    34  	c.Assert(numGetSettingCalls, gc.Equals, 1)
    35  	c.Assert(results.Results, gc.HasLen, 1)
    36  	c.Assert(results.Results[0].Error, gc.IsNil)
    37  	c.Check(results.Results[0].Settings, gc.DeepEquals, settingsToReturn)
    38  }
    39  
    40  func (s *settingsSuite) TestWriteSettings(c *gc.C) {
    41  
    42  	numWriteSettingCalls := 0
    43  	writeSettings := func(serviceId string, settings map[string]string) error {
    44  		numWriteSettingCalls++
    45  		c.Check(serviceId, gc.Equals, StubServiceNm)
    46  		return nil
    47  	}
    48  
    49  	numIsLeaderCalls := 0
    50  	isLeader := func(serviceId, unitId string) bool {
    51  		numIsLeaderCalls++
    52  		c.Check(serviceId, gc.Equals, StubServiceNm)
    53  		c.Check(unitId, gc.Equals, StubUnitNm)
    54  		return true
    55  	}
    56  
    57  	accessor := NewLeadershipSettingsAccessor(&stubAuthorizer{}, nil, nil, writeSettings, isLeader)
    58  
    59  	results, err := accessor.Merge(params.MergeLeadershipSettingsBulkParams{
    60  		[]params.MergeLeadershipSettingsParam{
    61  			{
    62  				ServiceTag: names.NewServiceTag(StubServiceNm).String(),
    63  				Settings:   map[string]string{"baz": "biz"},
    64  			},
    65  		},
    66  	})
    67  	c.Assert(err, gc.IsNil)
    68  	c.Assert(results.Results, gc.HasLen, 1)
    69  	c.Check(results.Results[0].Error, gc.IsNil)
    70  	c.Check(numWriteSettingCalls, gc.Equals, 1)
    71  	c.Check(numIsLeaderCalls, gc.Equals, 1)
    72  }
    73  
    74  func (s *settingsSuite) TestWriteSettingFailsForNonLeader(c *gc.C) {
    75  	numIsLeaderCalls := 0
    76  	isLeader := func(serviceId, unitId string) bool {
    77  		numIsLeaderCalls++
    78  		c.Check(serviceId, gc.Equals, StubServiceNm)
    79  		c.Check(unitId, gc.Equals, StubUnitNm)
    80  		return false
    81  	}
    82  
    83  	accessor := NewLeadershipSettingsAccessor(&stubAuthorizer{}, nil, nil, nil, isLeader)
    84  
    85  	results, err := accessor.Merge(params.MergeLeadershipSettingsBulkParams{
    86  		[]params.MergeLeadershipSettingsParam{
    87  			{
    88  				ServiceTag: names.NewServiceTag(StubServiceNm).String(),
    89  				Settings:   map[string]string{"baz": "biz"},
    90  			},
    91  		},
    92  	})
    93  	c.Assert(err, gc.IsNil)
    94  	c.Assert(results.Results, gc.HasLen, 1)
    95  	c.Check(results.Results[0].Error, gc.ErrorMatches, "permission denied")
    96  }
    97  
    98  func (s *settingsSuite) TestBlockUntilChanges(c *gc.C) {
    99  
   100  	numSettingsWatcherCalls := 0
   101  	registerWatcher := func(serviceId string) (string, error) {
   102  		numSettingsWatcherCalls++
   103  		c.Check(serviceId, gc.Equals, StubServiceNm)
   104  		return "foo", nil
   105  	}
   106  
   107  	accessor := NewLeadershipSettingsAccessor(&stubAuthorizer{}, registerWatcher, nil, nil, nil)
   108  
   109  	results, err := accessor.WatchLeadershipSettings(params.Entities{[]params.Entity{
   110  		{names.NewServiceTag(StubServiceNm).String()},
   111  	}})
   112  	c.Assert(err, gc.IsNil)
   113  	c.Assert(results.Results, gc.HasLen, 1)
   114  	c.Assert(results.Results[0].Error, gc.IsNil)
   115  }