github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/common/upgradeseries_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common_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 apitesting "github.com/juju/juju/api/base/testing" 14 "github.com/juju/juju/api/common" 15 "github.com/juju/juju/apiserver/params" 16 "github.com/juju/juju/core/model" 17 ) 18 19 type upgradeSeriesSuite struct { 20 testing.IsolationSuite 21 tag names.Tag 22 } 23 24 var _ = gc.Suite(&upgradeSeriesSuite{}) 25 26 func (s *upgradeSeriesSuite) SetUpTest(c *gc.C) { 27 s.tag = names.NewMachineTag("0") 28 } 29 30 func (s *upgradeSeriesSuite) TestWatchUpgradeSeriesNotifications(c *gc.C) { 31 facadeCaller := apitesting.StubFacadeCaller{Stub: &testing.Stub{}} 32 facadeCaller.FacadeCallFn = func(name string, args, response interface{}) error { 33 c.Assert(name, gc.Equals, "WatchUpgradeSeriesNotifications") 34 c.Assert(args, jc.DeepEquals, params.Entities{Entities: []params.Entity{ 35 {Tag: s.tag.String()}, 36 }}) 37 *(response.(*params.NotifyWatchResults)) = params.NotifyWatchResults{ 38 Results: []params.NotifyWatchResult{{ 39 NotifyWatcherId: "1", 40 Error: nil, 41 }}, 42 } 43 return nil 44 } 45 apiCaller := apitesting.APICallerFunc( 46 func(objType string, 47 version int, 48 id, request string, 49 a, result interface{}, 50 ) error { 51 c.Check(objType, gc.Equals, "NotifyWatcher") 52 c.Check(id, gc.Equals, "1") 53 c.Check(request, gc.Equals, "Next") 54 c.Check(a, gc.IsNil) 55 return nil 56 }, 57 ) 58 facadeCaller.ReturnRawAPICaller = apitesting.BestVersionCaller{APICallerFunc: apiCaller, BestVersion: 1} 59 60 api := common.NewUpgradeSeriesAPI(&facadeCaller, s.tag) 61 _, err := api.WatchUpgradeSeriesNotifications() 62 c.Assert(err, jc.ErrorIsNil) 63 } 64 65 func (s *upgradeSeriesSuite) TestUpgradeSeriesStatusPrepare(c *gc.C) { 66 facadeCaller := apitesting.StubFacadeCaller{Stub: &testing.Stub{}} 67 facadeCaller.FacadeCallFn = func(name string, args, response interface{}) error { 68 c.Assert(name, gc.Equals, "UpgradeSeriesUnitStatus") 69 c.Assert(args, jc.DeepEquals, params.Entities{Entities: []params.Entity{ 70 {Tag: s.tag.String()}, 71 }}) 72 *(response.(*params.UpgradeSeriesStatusResults)) = params.UpgradeSeriesStatusResults{ 73 Results: []params.UpgradeSeriesStatusResult{{Status: model.UpgradeSeriesCompleted}}, 74 } 75 return nil 76 } 77 api := common.NewUpgradeSeriesAPI(&facadeCaller, s.tag) 78 watchResult, err := api.UpgradeSeriesUnitStatus() 79 c.Assert(err, jc.ErrorIsNil) 80 81 exp := []model.UpgradeSeriesStatus{model.UpgradeSeriesCompleted} 82 c.Check(watchResult, jc.SameContents, exp) 83 } 84 85 func (s *upgradeSeriesSuite) TestUpgradeSeriesStatusWithComplete(c *gc.C) { 86 facadeCaller := apitesting.StubFacadeCaller{Stub: &testing.Stub{}} 87 facadeCaller.FacadeCallFn = func(name string, args, response interface{}) error { 88 c.Assert(name, gc.Equals, "UpgradeSeriesUnitStatus") 89 c.Assert(args, jc.DeepEquals, params.Entities{Entities: []params.Entity{ 90 {Tag: s.tag.String()}, 91 }}) 92 *(response.(*params.UpgradeSeriesStatusResults)) = params.UpgradeSeriesStatusResults{ 93 Results: []params.UpgradeSeriesStatusResult{{Status: model.UpgradeSeriesCompleted}}, 94 } 95 return nil 96 } 97 api := common.NewUpgradeSeriesAPI(&facadeCaller, s.tag) 98 watchResult, err := api.UpgradeSeriesUnitStatus() 99 c.Assert(err, jc.ErrorIsNil) 100 101 exp := []model.UpgradeSeriesStatus{model.UpgradeSeriesCompleted} 102 c.Check(watchResult, jc.SameContents, exp) 103 } 104 105 func (s *upgradeSeriesSuite) TestUpgradeSeriesStatusNotFound(c *gc.C) { 106 facadeCaller := apitesting.StubFacadeCaller{Stub: &testing.Stub{}} 107 facadeCaller.FacadeCallFn = func(name string, args, response interface{}) error { 108 c.Assert(name, gc.Equals, "UpgradeSeriesUnitStatus") 109 c.Assert(args, jc.DeepEquals, params.Entities{Entities: []params.Entity{ 110 {Tag: s.tag.String()}, 111 }}) 112 *(response.(*params.UpgradeSeriesStatusResults)) = params.UpgradeSeriesStatusResults{ 113 Results: []params.UpgradeSeriesStatusResult{{ 114 Error: ¶ms.Error{ 115 Code: params.CodeNotFound, 116 Message: `testing`, 117 }, 118 }}, 119 } 120 return nil 121 } 122 api := common.NewUpgradeSeriesAPI(&facadeCaller, s.tag) 123 watchResult, err := api.UpgradeSeriesUnitStatus() 124 c.Assert(err, gc.ErrorMatches, "testing") 125 c.Check(errors.IsNotFound(err), jc.IsTrue) 126 c.Check(watchResult, gc.HasLen, 0) 127 } 128 129 func (s *upgradeSeriesSuite) TestUpgradeSeriesStatusMultiple(c *gc.C) { 130 facadeCaller := apitesting.StubFacadeCaller{Stub: &testing.Stub{}} 131 facadeCaller.FacadeCallFn = func(name string, args, response interface{}) error { 132 c.Assert(name, gc.Equals, "UpgradeSeriesUnitStatus") 133 c.Assert(args, jc.DeepEquals, params.Entities{Entities: []params.Entity{ 134 {Tag: s.tag.String()}, 135 }}) 136 *(response.(*params.UpgradeSeriesStatusResults)) = params.UpgradeSeriesStatusResults{ 137 Results: []params.UpgradeSeriesStatusResult{ 138 {Status: "prepare started"}, 139 {Status: "prepare completed"}, 140 }, 141 } 142 return nil 143 } 144 api := common.NewUpgradeSeriesAPI(&facadeCaller, s.tag) 145 watchResult, err := api.UpgradeSeriesUnitStatus() 146 c.Assert(err, jc.ErrorIsNil) 147 148 exp := []model.UpgradeSeriesStatus{model.UpgradeSeriesPrepareStarted, model.UpgradeSeriesPrepareCompleted} 149 c.Check(watchResult, jc.SameContents, exp) 150 } 151 152 func (s *upgradeSeriesSuite) TestSetUpgradeSeriesStatus(c *gc.C) { 153 facadeCaller := apitesting.StubFacadeCaller{Stub: &testing.Stub{}} 154 facadeCaller.FacadeCallFn = func(name string, args, response interface{}) error { 155 c.Assert(name, gc.Equals, "SetUpgradeSeriesUnitStatus") 156 c.Assert(args, jc.DeepEquals, params.UpgradeSeriesStatusParams{ 157 Params: []params.UpgradeSeriesStatusParam{{ 158 Entity: params.Entity{Tag: s.tag.String()}, 159 Status: model.UpgradeSeriesError, 160 }}, 161 }) 162 *(response.(*params.ErrorResults)) = params.ErrorResults{ 163 Results: []params.ErrorResult{{ 164 Error: nil, 165 }}, 166 } 167 return nil 168 } 169 api := common.NewUpgradeSeriesAPI(&facadeCaller, s.tag) 170 err := api.SetUpgradeSeriesUnitStatus(model.UpgradeSeriesError, "") 171 c.Assert(err, jc.ErrorIsNil) 172 } 173 174 func (s *upgradeSeriesSuite) TestSetUpgradeSeriesStatusNotOne(c *gc.C) { 175 facadeCaller := apitesting.StubFacadeCaller{Stub: &testing.Stub{}} 176 facadeCaller.FacadeCallFn = func(name string, args, response interface{}) error { 177 c.Assert(name, gc.Equals, "SetUpgradeSeriesUnitStatus") 178 c.Assert(args, jc.DeepEquals, params.UpgradeSeriesStatusParams{ 179 Params: []params.UpgradeSeriesStatusParam{{ 180 Entity: params.Entity{Tag: s.tag.String()}, 181 Status: model.UpgradeSeriesError, 182 }}, 183 }) 184 *(response.(*params.ErrorResults)) = params.ErrorResults{ 185 Results: []params.ErrorResult{}, 186 } 187 return nil 188 } 189 api := common.NewUpgradeSeriesAPI(&facadeCaller, s.tag) 190 err := api.SetUpgradeSeriesUnitStatus(model.UpgradeSeriesError, "") 191 c.Assert(err, gc.ErrorMatches, "expected 1 result, got 0") 192 } 193 194 func (s *upgradeSeriesSuite) TestSetUpgradeSeriesStatusResultError(c *gc.C) { 195 facadeCaller := apitesting.StubFacadeCaller{Stub: &testing.Stub{}} 196 facadeCaller.FacadeCallFn = func(name string, args, response interface{}) error { 197 c.Assert(name, gc.Equals, "SetUpgradeSeriesUnitStatus") 198 c.Assert(args, jc.DeepEquals, params.UpgradeSeriesStatusParams{ 199 Params: []params.UpgradeSeriesStatusParam{{ 200 Entity: params.Entity{Tag: s.tag.String()}, 201 Status: model.UpgradeSeriesError, 202 }}, 203 }) 204 *(response.(*params.ErrorResults)) = params.ErrorResults{ 205 Results: []params.ErrorResult{{ 206 Error: ¶ms.Error{Message: "error in call"}, 207 }}, 208 } 209 return nil 210 } 211 api := common.NewUpgradeSeriesAPI(&facadeCaller, s.tag) 212 err := api.SetUpgradeSeriesUnitStatus(model.UpgradeSeriesError, "") 213 c.Assert(err, gc.ErrorMatches, "error in call") 214 }