github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/apiserver/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/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, StubServiceNm) 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 []params.Entity{ 39 {Tag: names.NewApplicationTag(StubServiceNm).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(serviceId, unitId string) coreleadership.Token { 55 numLeaderCheckCalls++ 56 c.Check(serviceId, gc.Equals, StubServiceNm) 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, StubServiceNm) 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.MergeLeadershipSettingsParam{ 75 { 76 ApplicationTag: names.NewApplicationTag(StubServiceNm).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) TestWriteSettingsError(c *gc.C) { 89 90 expectToken := &fakeToken{} 91 92 numLeaderCheckCalls := 0 93 leaderCheck := func(serviceId, unitId string) coreleadership.Token { 94 numLeaderCheckCalls++ 95 c.Check(serviceId, gc.Equals, StubServiceNm) 96 c.Check(unitId, gc.Equals, StubUnitNm) 97 return expectToken 98 } 99 100 numWriteSettingCalls := 0 101 writeSettings := func(token coreleadership.Token, serviceId string, settings map[string]string) error { 102 numWriteSettingCalls++ 103 c.Check(serviceId, gc.Equals, StubServiceNm) 104 c.Check(token, gc.Equals, expectToken) 105 c.Check(settings, jc.DeepEquals, map[string]string{"baz": "biz"}) 106 return errors.New("zap blort") 107 } 108 109 authorizer := stubAuthorizer{tag: names.NewUnitTag(StubUnitNm)} 110 accessor := leadership.NewLeadershipSettingsAccessor(authorizer, nil, nil, leaderCheck, writeSettings) 111 112 results, err := accessor.Merge(params.MergeLeadershipSettingsBulkParams{ 113 []params.MergeLeadershipSettingsParam{ 114 { 115 ApplicationTag: names.NewApplicationTag(StubServiceNm).String(), 116 Settings: map[string]string{"baz": "biz"}, 117 }, 118 }, 119 }) 120 c.Assert(err, gc.IsNil) 121 c.Assert(results.Results, gc.HasLen, 1) 122 c.Check(results.Results[0].Error, gc.ErrorMatches, "zap blort") 123 c.Check(numWriteSettingCalls, gc.Equals, 1) 124 c.Check(numLeaderCheckCalls, gc.Equals, 1) 125 } 126 127 func (s *settingsSuite) TestBlockUntilChanges(c *gc.C) { 128 129 numSettingsWatcherCalls := 0 130 registerWatcher := func(serviceId string) (string, error) { 131 numSettingsWatcherCalls++ 132 c.Check(serviceId, gc.Equals, StubServiceNm) 133 return "foo", nil 134 } 135 136 authorizer := &stubAuthorizer{tag: names.NewUnitTag(StubUnitNm)} 137 accessor := leadership.NewLeadershipSettingsAccessor(authorizer, registerWatcher, nil, nil, nil) 138 139 results, err := accessor.WatchLeadershipSettings(params.Entities{[]params.Entity{ 140 {names.NewApplicationTag(StubServiceNm).String()}, 141 }}) 142 c.Assert(err, gc.IsNil) 143 c.Assert(results.Results, gc.HasLen, 1) 144 c.Assert(results.Results[0].Error, gc.IsNil) 145 } 146 147 type fakeToken struct { 148 coreleadership.Token 149 }