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 }