github.com/cloudfoundry-incubator/stembuild@v0.0.0-20211223202937-5b61d62226c6/iaas_cli/iaas_clients/vcenter_manager/vcenter_manager_test.go (about)

     1  package vcenter_manager_test
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"runtime"
     7  
     8  	"github.com/cloudfoundry-incubator/stembuild/iaas_cli/iaas_clients/factory"
     9  
    10  	"github.com/cloudfoundry-incubator/stembuild/iaas_cli/iaas_clients/guest_manager"
    11  	"github.com/vmware/govmomi/guest"
    12  	"github.com/vmware/govmomi/object"
    13  
    14  	"github.com/cloudfoundry-incubator/stembuild/iaas_cli/iaas_clients/vcenter_manager"
    15  	"github.com/cloudfoundry-incubator/stembuild/iaas_cli/iaas_clients/vcenter_manager/vcenter_managerfakes"
    16  	. "github.com/onsi/ginkgo"
    17  	. "github.com/onsi/gomega"
    18  	"github.com/vmware/govmomi/vim25"
    19  )
    20  
    21  var _ = Describe("VcenterManager", func() {
    22  
    23  	var (
    24  		fakeGovmomiClient vcenter_managerfakes.FakeGovmomiClient
    25  		fakeVimClient     vim25.Client
    26  		fakeFinder        vcenter_managerfakes.FakeFinder
    27  	)
    28  
    29  	BeforeEach(func() {
    30  		fakeGovmomiClient = vcenter_managerfakes.FakeGovmomiClient{}
    31  		fakeVimClient = vim25.Client{}
    32  	})
    33  
    34  	Context("Login", func() {
    35  
    36  		It("logs the user into vcenter", func() {
    37  
    38  			fakeGovmomiClient.LoginReturns(nil)
    39  
    40  			vcManager, err := vcenter_manager.NewVCenterManager(&fakeGovmomiClient, &fakeVimClient, &fakeFinder, "user", "pass")
    41  			Expect(err).ToNot(HaveOccurred())
    42  
    43  			err = vcManager.Login(context.TODO())
    44  
    45  			_, u := fakeGovmomiClient.LoginArgsForCall(0)
    46  			pass, _ := u.Password()
    47  			Expect(u.Username()).To(Equal("user"))
    48  			Expect(pass).To(Equal("pass"))
    49  
    50  			Expect(err).ToNot(HaveOccurred())
    51  		})
    52  
    53  		It("returns an error if the client encounters one", func() {
    54  
    55  			loginErr := errors.New("bummer dude")
    56  			fakeGovmomiClient.LoginReturns(loginErr)
    57  
    58  			vcManager, err := vcenter_manager.NewVCenterManager(&fakeGovmomiClient, &fakeVimClient, &fakeFinder, "user", "pass")
    59  			Expect(err).ToNot(HaveOccurred())
    60  
    61  			err = vcManager.Login(context.TODO())
    62  			Expect(err).To(MatchError(loginErr))
    63  		})
    64  	})
    65  
    66  	Context("FindVM", func() {
    67  
    68  		It("searches for the specified vm", func() {
    69  
    70  			fakeVM := &object.VirtualMachine{}
    71  			fakeFinder.VirtualMachineReturns(fakeVM, nil)
    72  
    73  			vcManager, err := vcenter_manager.NewVCenterManager(&fakeGovmomiClient, &fakeVimClient, &fakeFinder, "user", "pass")
    74  			Expect(err).ToNot(HaveOccurred())
    75  
    76  			vm, err := vcManager.FindVM(context.TODO(), "/path/to/some/vm")
    77  			Expect(err).ToNot(HaveOccurred())
    78  			_, path := fakeFinder.VirtualMachineArgsForCall(0)
    79  			Expect(path).To(Equal("/path/to/some/vm"))
    80  
    81  			Expect(vm).To(BeEquivalentTo(fakeVM))
    82  		})
    83  
    84  		It("returns an error if the finder does", func() {
    85  
    86  			findErr := errors.New("can't find it, friend.")
    87  			fakeFinder.VirtualMachineReturns(nil, findErr)
    88  
    89  			vcManager, err := vcenter_manager.NewVCenterManager(&fakeGovmomiClient, &fakeVimClient, &fakeFinder, "user", "pass")
    90  			Expect(err).ToNot(HaveOccurred())
    91  
    92  			_, err = vcManager.FindVM(context.TODO(), "/path/to/some/vm")
    93  			Expect(err).To(MatchError(findErr))
    94  
    95  		})
    96  	})
    97  
    98  	Context("GuestManager", func() {
    99  
   100  		It("searches for the specified vm", func() {
   101  
   102  			fakeProcManager := &guest.ProcessManager{}
   103  			fakeOpsManager := &vcenter_managerfakes.FakeOpsManager{}
   104  			fakeOpsManager.ProcessManagerReturns(fakeProcManager, nil)
   105  
   106  			vcManager, err := vcenter_manager.NewVCenterManager(&fakeGovmomiClient, &fakeVimClient, &fakeFinder, "user", "pass")
   107  			Expect(err).ToNot(HaveOccurred())
   108  
   109  			gm, err := vcManager.GuestManager(context.TODO(), fakeOpsManager, "guestUser", "guestPass")
   110  			Expect(err).ToNot(HaveOccurred())
   111  
   112  			Expect(gm).To(BeAssignableToTypeOf(&guest_manager.GuestManager{}))
   113  		})
   114  
   115  		It("returns an error if the finder does", func() {
   116  
   117  			guestErr := errors.New("not today, junior")
   118  			fakeOpsManager := &vcenter_managerfakes.FakeOpsManager{}
   119  			fakeOpsManager.ProcessManagerReturns(nil, guestErr)
   120  
   121  			vcManager, err := vcenter_manager.NewVCenterManager(&fakeGovmomiClient, &fakeVimClient, &fakeFinder, "user", "pass")
   122  			Expect(err).ToNot(HaveOccurred())
   123  
   124  			_, err = vcManager.GuestManager(context.TODO(), fakeOpsManager, "guestUser", "guestPass")
   125  			Expect(err).To(MatchError(guestErr))
   126  
   127  		})
   128  	})
   129  
   130  	Context("running against vcsim server", func() {
   131  		Context("CloneVM", func() {
   132  			It("clones a vm", func() {
   133  				if runtime.GOOS == "windows" {
   134  					Skip("windows cannot run a vcsim server")
   135  				}
   136  
   137  				inventoryPath := "/DC0/vm/DC0_H0_VM0"
   138  				clonePath := "/DC0/vm/DC0_H0_VM0_NewClone"
   139  
   140  				factoryConfig := &vcenter_client_factory.FactoryConfig{
   141  					VCenterServer:  "https://user:pass@127.0.0.1:8989/sdk",
   142  					Username:       "user",
   143  					Password:       "pass",
   144  					ClientCreator:  &vcenter_client_factory.ClientCreator{},
   145  					FinderCreator:  &vcenter_client_factory.GovmomiFinderCreator{},
   146  					RootCACertPath: CertPath,
   147  				}
   148  
   149  				managerFactory := &vcenter_client_factory.ManagerFactory{
   150  					*factoryConfig,
   151  				}
   152  
   153  				ctx := context.TODO()
   154  
   155  				vCenterManager, err := managerFactory.VCenterManager(ctx)
   156  				Expect(err).ToNot(HaveOccurred())
   157  
   158  				err = vCenterManager.Login(ctx)
   159  				Expect(err).ToNot(HaveOccurred())
   160  
   161  				vmToClone, err := vCenterManager.FindVM(ctx, inventoryPath)
   162  				Expect(err).ToNot(HaveOccurred())
   163  
   164  				err = vCenterManager.CloneVM(ctx, vmToClone, clonePath)
   165  				Expect(err).ToNot(HaveOccurred())
   166  
   167  				_, err = vCenterManager.FindVM(ctx, clonePath)
   168  				Expect(err).ToNot(HaveOccurred())
   169  
   170  			})
   171  		})
   172  	})
   173  })