github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/apiserver/uniter/uniter_v0_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package uniter_test 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 10 "github.com/juju/juju/apiserver/common" 11 commontesting "github.com/juju/juju/apiserver/common/testing" 12 meterstatustesting "github.com/juju/juju/apiserver/meterstatus/testing" 13 "github.com/juju/juju/apiserver/params" 14 apiservertesting "github.com/juju/juju/apiserver/testing" 15 "github.com/juju/juju/apiserver/uniter" 16 "github.com/juju/juju/state" 17 ) 18 19 type uniterV0Suite struct { 20 uniterBaseSuite 21 *commontesting.EnvironWatcherTest 22 23 uniter *uniter.UniterAPIV0 24 meteredUniter *uniter.UniterAPIV0 25 } 26 27 var _ = gc.Suite(&uniterV0Suite{}) 28 29 func (s *uniterV0Suite) SetUpTest(c *gc.C) { 30 s.uniterBaseSuite.setUpTest(c) 31 32 uniterAPIV0, err := uniter.NewUniterAPIV0( 33 s.State, 34 s.resources, 35 s.authorizer, 36 ) 37 c.Assert(err, jc.ErrorIsNil) 38 s.uniter = uniterAPIV0 39 40 meteredAuthorizer := apiservertesting.FakeAuthorizer{ 41 Tag: s.meteredUnit.Tag(), 42 } 43 s.meteredUniter, err = uniter.NewUniterAPIV0( 44 s.State, 45 s.resources, 46 meteredAuthorizer, 47 ) 48 c.Assert(err, jc.ErrorIsNil) 49 50 s.EnvironWatcherTest = commontesting.NewEnvironWatcherTest( 51 s.uniter, 52 s.State, 53 s.resources, 54 commontesting.NoSecrets, 55 ) 56 } 57 58 func (s *uniterV0Suite) TestUniterFailsWithNonUnitAgentUser(c *gc.C) { 59 factory := func(st *state.State, res *common.Resources, auth common.Authorizer) error { 60 _, err := uniter.NewUniterAPIV0(st, res, auth) 61 return err 62 } 63 s.testUniterFailsWithNonUnitAgentUser(c, factory) 64 } 65 66 func (s *uniterV0Suite) TestSetStatus(c *gc.C) { 67 s.testSetStatus(c, s.uniter) 68 } 69 70 func (s *uniterV0Suite) TestLife(c *gc.C) { 71 s.testLife(c, s.uniter) 72 } 73 74 func (s *uniterV0Suite) TestEnsureDead(c *gc.C) { 75 s.testEnsureDead(c, s.uniter) 76 } 77 78 func (s *uniterV0Suite) TestWatch(c *gc.C) { 79 s.testWatch(c, s.uniter) 80 } 81 82 func (s *uniterV0Suite) TestPublicAddress(c *gc.C) { 83 s.testPublicAddress(c, s.uniter) 84 } 85 86 func (s *uniterV0Suite) TestPrivateAddress(c *gc.C) { 87 s.testPrivateAddress(c, s.uniter) 88 } 89 90 func (s *uniterV0Suite) TestResolved(c *gc.C) { 91 s.testResolved(c, s.uniter) 92 } 93 94 func (s *uniterV0Suite) TestClearResolved(c *gc.C) { 95 s.testClearResolved(c, s.uniter) 96 } 97 98 func (s *uniterV0Suite) TestGetPrincipal(c *gc.C) { 99 factory := func( 100 st *state.State, 101 resources *common.Resources, 102 authorizer common.Authorizer, 103 ) (getPrincipal, error) { 104 return uniter.NewUniterAPIV0(st, resources, authorizer) 105 } 106 s.testGetPrincipal(c, s.uniter, factory) 107 } 108 109 func (s *uniterV0Suite) TestHasSubordinates(c *gc.C) { 110 s.testHasSubordinates(c, s.uniter) 111 } 112 113 func (s *uniterV0Suite) TestDestroy(c *gc.C) { 114 s.testDestroy(c, s.uniter) 115 } 116 117 func (s *uniterV0Suite) TestDestroyAllSubordinates(c *gc.C) { 118 s.testDestroyAllSubordinates(c, s.uniter) 119 } 120 121 func (s *uniterV0Suite) TestCharmURL(c *gc.C) { 122 s.testCharmURL(c, s.uniter) 123 } 124 125 func (s *uniterV0Suite) TestSetCharmURL(c *gc.C) { 126 s.testSetCharmURL(c, s.uniter) 127 } 128 129 func (s *uniterV0Suite) TestOpenPorts(c *gc.C) { 130 s.testOpenPorts(c, s.uniter) 131 } 132 133 func (s *uniterV0Suite) TestClosePorts(c *gc.C) { 134 s.testClosePorts(c, s.uniter) 135 } 136 137 func (s *uniterV0Suite) TestOpenPort(c *gc.C) { 138 s.testOpenPort(c, s.uniter) 139 } 140 141 func (s *uniterV0Suite) TestClosePort(c *gc.C) { 142 s.testClosePort(c, s.uniter) 143 } 144 145 func (s *uniterV0Suite) TestWatchConfigSettings(c *gc.C) { 146 s.testWatchConfigSettings(c, s.uniter) 147 } 148 149 func (s *uniterV0Suite) TestWatchActionNotifications(c *gc.C) { 150 s.testWatchActionNotifications(c, s.uniter) 151 } 152 153 func (s *uniterV0Suite) TestWatchPreexistingActions(c *gc.C) { 154 s.testWatchPreexistingActions(c, s.uniter) 155 } 156 157 func (s *uniterV0Suite) TestWatchActionNotificationsMalformedTag(c *gc.C) { 158 s.testWatchActionNotificationsMalformedTag(c, s.uniter) 159 } 160 161 func (s *uniterV0Suite) TestWatchActionNotificationsMalformedUnitName(c *gc.C) { 162 s.testWatchActionNotificationsMalformedUnitName(c, s.uniter) 163 } 164 165 func (s *uniterV0Suite) TestWatchActionNotificationsNotUnit(c *gc.C) { 166 s.testWatchActionNotificationsNotUnit(c, s.uniter) 167 } 168 169 func (s *uniterV0Suite) TestWatchActionNotificationsPermissionDenied(c *gc.C) { 170 s.testWatchActionNotificationsPermissionDenied(c, s.uniter) 171 } 172 173 func (s *uniterV0Suite) TestConfigSettings(c *gc.C) { 174 s.testConfigSettings(c, s.uniter) 175 } 176 177 func (s *uniterV0Suite) TestWatchServiceRelations(c *gc.C) { 178 s.testWatchServiceRelations(c, s.uniter) 179 } 180 181 func (s *uniterV0Suite) TestCharmArchiveSha256(c *gc.C) { 182 s.testCharmArchiveSha256(c, s.uniter) 183 } 184 185 func (s *uniterV0Suite) TestCharmArchiveURLs(c *gc.C) { 186 s.testCharmArchiveURLs(c, s.uniter) 187 } 188 189 func (s *uniterV0Suite) TestCurrentEnvironUUID(c *gc.C) { 190 s.testCurrentEnvironUUID(c, s.uniter) 191 } 192 193 func (s *uniterV0Suite) TestCurrentEnvironment(c *gc.C) { 194 s.testCurrentEnvironment(c, s.uniter) 195 } 196 197 func (s *uniterV0Suite) TestActions(c *gc.C) { 198 s.testActions(c, s.uniter) 199 } 200 201 func (s *uniterV0Suite) TestActionsNotPresent(c *gc.C) { 202 s.testActionsNotPresent(c, s.uniter) 203 } 204 205 func (s *uniterV0Suite) TestActionsWrongUnit(c *gc.C) { 206 factory := func( 207 st *state.State, 208 resources *common.Resources, 209 authorizer common.Authorizer, 210 ) (actions, error) { 211 return uniter.NewUniterAPIV0(st, resources, authorizer) 212 } 213 s.testActionsWrongUnit(c, factory) 214 } 215 216 func (s *uniterV0Suite) TestActionsPermissionDenied(c *gc.C) { 217 s.testActionsPermissionDenied(c, s.uniter) 218 } 219 220 func (s *uniterV0Suite) TestFinishActionsSuccess(c *gc.C) { 221 s.testFinishActionsSuccess(c, s.uniter) 222 } 223 224 func (s *uniterV0Suite) TestFinishActionsFailure(c *gc.C) { 225 s.testFinishActionsFailure(c, s.uniter) 226 } 227 228 func (s *uniterV0Suite) TestFinishActionsAuthAccess(c *gc.C) { 229 s.testFinishActionsAuthAccess(c, s.uniter) 230 } 231 232 func (s *uniterV0Suite) TestBeginActions(c *gc.C) { 233 s.testBeginActions(c, s.uniter) 234 } 235 236 func (s *uniterV0Suite) TestRelation(c *gc.C) { 237 s.testRelation(c, s.uniter) 238 } 239 240 func (s *uniterV0Suite) TestRelationById(c *gc.C) { 241 s.testRelationById(c, s.uniter) 242 } 243 244 func (s *uniterV0Suite) TestProviderType(c *gc.C) { 245 s.testProviderType(c, s.uniter) 246 } 247 248 func (s *uniterV0Suite) TestEnterScope(c *gc.C) { 249 s.testEnterScope(c, s.uniter) 250 } 251 252 func (s *uniterV0Suite) TestLeaveScope(c *gc.C) { 253 s.testLeaveScope(c, s.uniter) 254 } 255 256 func (s *uniterV0Suite) TestJoinedRelations(c *gc.C) { 257 s.testJoinedRelations(c, s.uniter) 258 } 259 260 func (s *uniterV0Suite) TestReadSettings(c *gc.C) { 261 s.testReadSettings(c, s.uniter) 262 } 263 264 func (s *uniterV0Suite) TestReadSettingsWithNonStringValuesFails(c *gc.C) { 265 s.testReadSettingsWithNonStringValuesFails(c, s.uniter) 266 } 267 268 func (s *uniterV0Suite) TestReadRemoteSettings(c *gc.C) { 269 s.testReadRemoteSettings(c, s.uniter) 270 } 271 272 func (s *uniterV0Suite) TestReadRemoteSettingsWithNonStringValuesFails(c *gc.C) { 273 s.testReadRemoteSettingsWithNonStringValuesFails(c, s.uniter) 274 } 275 276 func (s *uniterV0Suite) TestUpdateSettings(c *gc.C) { 277 s.testUpdateSettings(c, s.uniter) 278 } 279 280 func (s *uniterV0Suite) TestWatchRelationUnits(c *gc.C) { 281 s.testWatchRelationUnits(c, s.uniter) 282 } 283 284 func (s *uniterV0Suite) TestAPIAddresses(c *gc.C) { 285 s.testAPIAddresses(c, s.uniter) 286 } 287 288 func (s *uniterV0Suite) TestWatchUnitAddresses(c *gc.C) { 289 s.testWatchUnitAddresses(c, s.uniter) 290 } 291 292 func (s *uniterV0Suite) TestGetMeterStatus(c *gc.C) { 293 meterstatustesting.TestGetMeterStatus(c, s.uniter, s.wordpressUnit) 294 } 295 296 func (s *uniterV0Suite) TestGetMeterStatusUnauthenticated(c *gc.C) { 297 s.testGetMeterStatusUnauthenticated(c, s.uniter) 298 } 299 300 func (s *uniterV0Suite) TestGetMeterStatusBadTag(c *gc.C) { 301 s.testGetMeterStatusBadTag(c, s.uniter) 302 } 303 304 func (s *uniterV0Suite) TestWatchMeterStatus(c *gc.C) { 305 meterstatustesting.TestWatchMeterStatus(c, s.uniter, s.wordpressUnit, s.State, s.resources) 306 } 307 308 func (s *uniterV0Suite) TestGetOwnerTag(c *gc.C) { 309 tag := s.mysql.Tag().String() 310 args := params.Entities{Entities: []params.Entity{ 311 {Tag: tag}, 312 }} 313 result, err := s.uniter.GetOwnerTag(args) 314 c.Assert(err, jc.ErrorIsNil) 315 c.Assert(result, gc.DeepEquals, params.StringResult{ 316 Result: s.AdminUserTag(c).String(), 317 }) 318 } 319 320 func (s *uniterV0Suite) TestServiceOwnerV0NotImplemented(c *gc.C) { 321 apiservertesting.AssertNotImplemented(c, s.uniter, "ServiceOwner") 322 } 323 324 func (s *uniterV0Suite) TestAssignedMachineV0NotImplemented(c *gc.C) { 325 apiservertesting.AssertNotImplemented(c, s.uniter, "AssignedMachine") 326 } 327 328 func (s *uniterV0Suite) TestAllMachinePortsV0NotImplemented(c *gc.C) { 329 apiservertesting.AssertNotImplemented(c, s.uniter, "AllMachinePorts") 330 } 331 332 func (s *uniterV0Suite) TestRequestReboot(c *gc.C) { 333 args := params.Entities{Entities: []params.Entity{ 334 {Tag: s.machine0.Tag().String()}, 335 {Tag: s.machine1.Tag().String()}, 336 {Tag: "bogus"}, 337 {Tag: "nasty-tag"}, 338 }} 339 errResult, err := s.uniter.RequestReboot(args) 340 c.Assert(err, jc.ErrorIsNil) 341 c.Assert(errResult, gc.DeepEquals, params.ErrorResults{ 342 Results: []params.ErrorResult{ 343 {Error: nil}, 344 {Error: apiservertesting.ErrUnauthorized}, 345 {Error: apiservertesting.ErrUnauthorized}, 346 {Error: apiservertesting.ErrUnauthorized}, 347 }}) 348 349 rFlag, err := s.machine0.GetRebootFlag() 350 c.Assert(err, jc.ErrorIsNil) 351 c.Assert(rFlag, jc.IsTrue) 352 353 rFlag, err = s.machine1.GetRebootFlag() 354 c.Assert(err, jc.ErrorIsNil) 355 c.Assert(rFlag, jc.IsFalse) 356 }