github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/agent/leadership/settings_test.go (about) 1 // Copyright 2014-2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package leadership_test 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/testing" 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 "gopkg.in/juju/names.v2" 12 13 "github.com/juju/juju/apiserver/facades/agent/leadership" 14 "github.com/juju/juju/apiserver/params" 15 coreleadership "github.com/juju/juju/core/leadership" 16 ) 17 18 // TODO(fwereade): this is *severely* undertested. 19 type settingsSuite struct { 20 testing.IsolationSuite 21 } 22 23 var _ = gc.Suite(&settingsSuite{}) 24 25 func (s *settingsSuite) TestReadSettings(c *gc.C) { 26 27 settingsToReturn := params.Settings(map[string]string{"foo": "bar"}) 28 numGetSettingCalls := 0 29 getSettings := func(serviceId string) (map[string]string, error) { 30 numGetSettingCalls++ 31 c.Check(serviceId, gc.Equals, StubAppNm) 32 return settingsToReturn, nil 33 } 34 authorizer := stubAuthorizer{tag: names.NewUnitTag(StubUnitNm)} 35 accessor := leadership.NewLeadershipSettingsAccessor(authorizer, nil, getSettings, nil, nil) 36 37 results, err := accessor.Read(params.Entities{ 38 Entities: []params.Entity{ 39 {Tag: names.NewApplicationTag(StubAppNm).String()}, 40 }, 41 }) 42 c.Assert(err, gc.IsNil) 43 c.Assert(numGetSettingCalls, gc.Equals, 1) 44 c.Assert(results.Results, gc.HasLen, 1) 45 c.Assert(results.Results[0].Error, gc.IsNil) 46 c.Check(results.Results[0].Settings, gc.DeepEquals, settingsToReturn) 47 } 48 49 func (s *settingsSuite) TestWriteSettings(c *gc.C) { 50 51 expectToken := &fakeToken{} 52 53 numLeaderCheckCalls := 0 54 leaderCheck := func(appName, unitId string) coreleadership.Token { 55 numLeaderCheckCalls++ 56 c.Check(appName, gc.Equals, StubAppNm) 57 c.Check(unitId, gc.Equals, StubUnitNm) 58 return expectToken 59 } 60 61 numWriteSettingCalls := 0 62 writeSettings := func(token coreleadership.Token, serviceId string, settings map[string]string) error { 63 numWriteSettingCalls++ 64 c.Check(serviceId, gc.Equals, StubAppNm) 65 c.Check(token, gc.Equals, expectToken) 66 c.Check(settings, jc.DeepEquals, map[string]string{"baz": "biz"}) 67 return nil 68 } 69 70 authorizer := stubAuthorizer{tag: names.NewUnitTag(StubUnitNm)} 71 accessor := leadership.NewLeadershipSettingsAccessor(authorizer, nil, nil, leaderCheck, writeSettings) 72 73 results, err := accessor.Merge(params.MergeLeadershipSettingsBulkParams{ 74 Params: []params.MergeLeadershipSettingsParam{ 75 { 76 ApplicationTag: names.NewApplicationTag(StubAppNm).String(), 77 Settings: map[string]string{"baz": "biz"}, 78 }, 79 }, 80 }) 81 c.Assert(err, gc.IsNil) 82 c.Assert(results.Results, gc.HasLen, 1) 83 c.Check(results.Results[0].Error, gc.IsNil) 84 c.Check(numWriteSettingCalls, gc.Equals, 1) 85 c.Check(numLeaderCheckCalls, gc.Equals, 1) 86 } 87 88 func (s *settingsSuite) TestWriteSettingsWrongUnit(c *gc.C) { 89 90 numLeaderCheckCalls := 0 91 leaderCheck := func(appName, unitId string) coreleadership.Token { 92 numLeaderCheckCalls++ 93 return &fakeToken{} 94 } 95 96 numWriteSettingCalls := 0 97 writeSettings := func(token coreleadership.Token, serviceId string, settings map[string]string) error { 98 numWriteSettingCalls++ 99 return nil 100 } 101 102 authorizer := stubAuthorizer{tag: names.NewUnitTag(StubUnitNm)} 103 accessor := leadership.NewLeadershipSettingsAccessor(authorizer, nil, nil, leaderCheck, writeSettings) 104 105 results, err := accessor.Merge(params.MergeLeadershipSettingsBulkParams{ 106 Params: []params.MergeLeadershipSettingsParam{ 107 { 108 ApplicationTag: names.NewApplicationTag(StubAppNm).String(), 109 UnitTag: names.NewUnitTag("foo/0").String(), 110 Settings: map[string]string{"baz": "biz"}, 111 }, 112 }, 113 }) 114 c.Assert(err, gc.IsNil) 115 c.Assert(results.Results, gc.HasLen, 1) 116 c.Check(results.Results[0].Error, gc.ErrorMatches, "permission denied") 117 c.Check(numWriteSettingCalls, gc.Equals, 0) 118 c.Check(numLeaderCheckCalls, gc.Equals, 0) 119 } 120 121 func (s *settingsSuite) TestWriteSettingsError(c *gc.C) { 122 123 expectToken := &fakeToken{} 124 125 numLeaderCheckCalls := 0 126 leaderCheck := func(serviceId, unitId string) coreleadership.Token { 127 numLeaderCheckCalls++ 128 c.Check(serviceId, gc.Equals, StubAppNm) 129 c.Check(unitId, gc.Equals, StubUnitNm) 130 return expectToken 131 } 132 133 numWriteSettingCalls := 0 134 writeSettings := func(token coreleadership.Token, serviceId string, settings map[string]string) error { 135 numWriteSettingCalls++ 136 c.Check(serviceId, gc.Equals, StubAppNm) 137 c.Check(token, gc.Equals, expectToken) 138 c.Check(settings, jc.DeepEquals, map[string]string{"baz": "biz"}) 139 return errors.New("zap blort") 140 } 141 142 authorizer := stubAuthorizer{tag: names.NewUnitTag(StubUnitNm)} 143 accessor := leadership.NewLeadershipSettingsAccessor(authorizer, nil, nil, leaderCheck, writeSettings) 144 145 results, err := accessor.Merge(params.MergeLeadershipSettingsBulkParams{ 146 Params: []params.MergeLeadershipSettingsParam{ 147 { 148 ApplicationTag: names.NewApplicationTag(StubAppNm).String(), 149 Settings: map[string]string{"baz": "biz"}, 150 }, 151 }, 152 }) 153 c.Assert(err, gc.IsNil) 154 c.Assert(results.Results, gc.HasLen, 1) 155 c.Check(results.Results[0].Error, gc.ErrorMatches, "zap blort") 156 c.Check(numWriteSettingCalls, gc.Equals, 1) 157 c.Check(numLeaderCheckCalls, gc.Equals, 1) 158 } 159 160 func (s *settingsSuite) TestBlockUntilChanges(c *gc.C) { 161 162 numSettingsWatcherCalls := 0 163 registerWatcher := func(appName string) (string, error) { 164 numSettingsWatcherCalls++ 165 c.Check(appName, gc.Equals, StubAppNm) 166 return "foo", nil 167 } 168 169 authorizer := &stubAuthorizer{tag: names.NewUnitTag(StubUnitNm)} 170 accessor := leadership.NewLeadershipSettingsAccessor(authorizer, registerWatcher, nil, nil, nil) 171 172 results, err := accessor.WatchLeadershipSettings(params.Entities{Entities: []params.Entity{ 173 {Tag: names.NewApplicationTag(StubAppNm).String()}, 174 }}) 175 c.Assert(err, gc.IsNil) 176 c.Assert(results.Results, gc.HasLen, 1) 177 c.Assert(results.Results[0].Error, gc.IsNil) 178 } 179 180 type fakeToken struct { 181 coreleadership.Token 182 }