github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/vsphere/upgrades_test.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package vsphere_test 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 "github.com/vmware/govmomi/vim25/mo" 9 "github.com/vmware/govmomi/vim25/types" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/environs" 13 "github.com/juju/juju/environs/context" 14 ) 15 16 type environUpgradeSuite struct { 17 EnvironFixture 18 } 19 20 var _ = gc.Suite(&environUpgradeSuite{}) 21 22 func (s *environUpgradeSuite) TestEnvironImplementsUpgrader(c *gc.C) { 23 c.Assert(s.env, gc.Implements, new(environs.Upgrader)) 24 } 25 26 func (s *environUpgradeSuite) TestEnvironUpgradeOperations(c *gc.C) { 27 upgrader := s.env.(environs.Upgrader) 28 ops := upgrader.UpgradeOperations(s.callCtx, environs.UpgradeOperationsParams{}) 29 c.Assert(ops, gc.HasLen, 1) 30 c.Assert(ops[0].TargetVersion, gc.Equals, 1) 31 c.Assert(ops[0].Steps, gc.HasLen, 2) 32 c.Assert(ops[0].Steps[0].Description(), gc.Equals, "Update ExtraConfig properties with standard Juju tags") 33 c.Assert(ops[0].Steps[1].Description(), gc.Equals, "Move VMs into controller/model folders") 34 } 35 36 func (s *environUpgradeSuite) TestEnvironUpgradeOperationUpdateExtraConfig(c *gc.C) { 37 upgrader := s.env.(environs.Upgrader) 38 step := upgrader.UpgradeOperations(s.callCtx, 39 environs.UpgradeOperationsParams{ 40 ControllerUUID: "foo", 41 })[0].Steps[0] 42 43 vm1 := buildVM("vm-1").extraConfig("juju_controller_uuid_key", "old").vm() 44 vm2 := buildVM("vm-1").extraConfig("juju_controller_uuid_key", "old").extraConfig("juju_is_controller_key", "yep").vm() 45 vm3 := buildVM("vm-2").vm() 46 s.client.virtualMachines = []*mo.VirtualMachine{vm1, vm2, vm3} 47 48 err := step.Run(s.callCtx) 49 c.Assert(err, jc.ErrorIsNil) 50 51 s.client.CheckCallNames(c, "VirtualMachines", "UpdateVirtualMachineExtraConfig", "UpdateVirtualMachineExtraConfig", "Close") 52 53 updateCall1 := s.client.Calls()[1] 54 c.Assert(updateCall1.Args[1], gc.Equals, vm1) 55 c.Assert(updateCall1.Args[2], jc.DeepEquals, map[string]string{ 56 "juju-controller-uuid": "foo", 57 "juju-model-uuid": "2d02eeac-9dbb-11e4-89d3-123b93f75cba", 58 }) 59 60 updateCall2 := s.client.Calls()[2] 61 c.Assert(updateCall2.Args[1], gc.Equals, vm2) 62 c.Assert(updateCall2.Args[2], jc.DeepEquals, map[string]string{ 63 "juju-controller-uuid": "foo", 64 "juju-model-uuid": "2d02eeac-9dbb-11e4-89d3-123b93f75cba", 65 "juju-is-controller": "true", 66 }) 67 } 68 69 func (s *environUpgradeSuite) TestEnvironUpgradeOperationModelFolders(c *gc.C) { 70 upgrader := s.env.(environs.Upgrader) 71 step := upgrader.UpgradeOperations(s.callCtx, 72 environs.UpgradeOperationsParams{ 73 ControllerUUID: "foo", 74 })[0].Steps[1] 75 76 vm1 := buildVM("vm-1").vm() 77 vm2 := buildVM("vm-2").vm() 78 vm3 := buildVM("vm-3").vm() 79 s.client.virtualMachines = []*mo.VirtualMachine{vm1, vm2, vm3} 80 81 err := step.Run(s.callCtx) 82 c.Assert(err, jc.ErrorIsNil) 83 84 s.client.CheckCallNames(c, "EnsureVMFolder", "VirtualMachines", "MoveVMsInto", "Close") 85 ensureVMFolderCall := s.client.Calls()[0] 86 moveVMsIntoCall := s.client.Calls()[2] 87 c.Assert(ensureVMFolderCall.Args[1], gc.Equals, 88 `Juju Controller (foo)/Model "testmodel" (2d02eeac-9dbb-11e4-89d3-123b93f75cba)`) 89 c.Assert(moveVMsIntoCall.Args[1], gc.Equals, 90 `Juju Controller (foo)/Model "testmodel" (2d02eeac-9dbb-11e4-89d3-123b93f75cba)`) 91 c.Assert(moveVMsIntoCall.Args[2], jc.DeepEquals, 92 []types.ManagedObjectReference{vm1.Reference(), vm2.Reference(), vm3.Reference()}, 93 ) 94 } 95 96 func (s *environUpgradeSuite) TestExtraConfigPermissionError(c *gc.C) { 97 upgrader := s.env.(environs.Upgrader) 98 step := upgrader.UpgradeOperations(s.callCtx, 99 environs.UpgradeOperationsParams{ 100 ControllerUUID: "foo", 101 })[0].Steps[0] 102 AssertInvalidatesCredential(c, s.client, func(ctx context.ProviderCallContext) error { 103 return step.Run(ctx) 104 }) 105 } 106 func (s *environUpgradeSuite) TestModelFoldersPermissionError(c *gc.C) { 107 upgrader := s.env.(environs.Upgrader) 108 step := upgrader.UpgradeOperations(s.callCtx, 109 environs.UpgradeOperationsParams{ 110 ControllerUUID: "foo", 111 })[0].Steps[1] 112 AssertInvalidatesCredential(c, s.client, func(ctx context.ProviderCallContext) error { 113 return step.Run(ctx) 114 }) 115 }