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 })