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  }