github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/vapp_test.go (about) 1 //go:build vapp || functional || ALL 2 3 /* 4 * Copyright 2021 VMware, Inc. All rights reserved. Licensed under the Apache v2 License. 5 */ 6 7 package govcd 8 9 import ( 10 "fmt" 11 "github.com/kr/pretty" 12 "regexp" 13 "time" 14 15 . "gopkg.in/check.v1" 16 17 "github.com/vmware/go-vcloud-director/v2/types/v56" 18 ) 19 20 func init() { 21 testingTags["vapp"] = "vapp_test.go" 22 } 23 24 // Tests the helper function getParentVDC with the vapp 25 // created at the start of testing 26 func (vcd *TestVCD) TestGetParentVDC(check *C) { 27 if vcd.skipVappTests { 28 check.Skip("Skipping test because vApp was not successfully created at setup") 29 } 30 vapp, err := vcd.vdc.GetVAppByName(vcd.vapp.VApp.Name, false) 31 check.Assert(err, IsNil) 32 33 vdc, err := vapp.GetParentVDC() 34 35 check.Assert(err, IsNil) 36 check.Assert(vdc.Vdc.Name, Equals, vcd.vdc.Vdc.Name) 37 } 38 39 func (vcd *TestVCD) TestGetVappByHref(check *C) { 40 if vcd.skipVappTests { 41 check.Skip("Skipping test because vApp was not successfully created at setup") 42 } 43 vapp, err := vcd.vdc.GetVAppByName(vcd.vapp.VApp.Name, false) 44 check.Assert(err, IsNil) 45 46 vdc, err := vapp.GetParentVDC() 47 check.Assert(err, IsNil) 48 49 orgVappByHref, err := vcd.org.GetVAppByHref(vapp.VApp.HREF) 50 check.Assert(err, IsNil) 51 check.Assert(orgVappByHref.VApp, DeepEquals, vapp.VApp) 52 53 vdcVappByHref, err := vdc.GetVAppByHref(vapp.VApp.HREF) 54 check.Assert(err, IsNil) 55 check.Assert(vdcVappByHref.VApp, DeepEquals, vapp.VApp) 56 } 57 58 // Tests Powering On and Powering Off a VApp. Also tests Deletion 59 // of a VApp 60 func (vcd *TestVCD) Test_PowerOn(check *C) { 61 if vcd.skipVappTests { 62 check.Skip("Skipping test because vApp was not successfully created at setup") 63 } 64 task, err := vcd.vapp.PowerOn() 65 check.Assert(err, IsNil) 66 err = task.WaitTaskCompletion() 67 check.Assert(err, IsNil) 68 check.Assert(task.Task.Status, Equals, "success") 69 } 70 71 // TODO: Find out if there is a way to check if the vapp is on without 72 // powering it on. 73 func (vcd *TestVCD) Test_Reboot(check *C) { 74 if vcd.skipVappTests { 75 check.Skip("Skipping test because vApp was not successfully created at setup") 76 } 77 task, err := vcd.vapp.PowerOn() 78 check.Assert(err, IsNil) 79 err = task.WaitTaskCompletion() 80 check.Assert(err, IsNil) 81 task, err = vcd.vapp.Reboot() 82 check.Assert(err, IsNil) 83 err = task.WaitTaskCompletion() 84 check.Assert(err, IsNil) 85 check.Assert(task.Task.Status, Equals, "success") 86 87 } 88 89 func (vcd *TestVCD) Test_BlockWhileStatus(check *C) { 90 if vcd.skipVappTests { 91 check.Skip("Skipping test because vApp was not successfully created at setup") 92 } 93 94 initialVappStatus, err := vcd.vapp.GetStatus() 95 check.Assert(err, IsNil) 96 97 // This must timeout as the timeout is zero and we are not changing vApp 98 errMustTimeout := vcd.vapp.BlockWhileStatus(initialVappStatus, 0) 99 check.Assert(errMustTimeout, ErrorMatches, "timed out waiting for vApp to exit state .* after .* seconds") 100 101 task, err := vcd.vapp.PowerOn() 102 check.Assert(err, IsNil) 103 // This must wait until vApp changes status from initialVappStatus 104 err = vcd.vapp.BlockWhileStatus(initialVappStatus, vcd.vapp.client.MaxRetryTimeout) 105 check.Assert(err, IsNil) 106 107 // Ensure the powerOn operation succeeded 108 err = task.WaitTaskCompletion() 109 check.Assert(err, IsNil) 110 check.Assert(task.Task.Status, Equals, "success") 111 112 // Clean up and leave it down 113 task, err = vcd.vapp.PowerOff() 114 check.Assert(err, IsNil) 115 err = task.WaitTaskCompletion() 116 check.Assert(err, IsNil) 117 check.Assert(task.Task.Status, Equals, "success") 118 } 119 120 // TODO: Add a check checking if the ovf was set properly 121 func (vcd *TestVCD) Test_SetOvf(check *C) { 122 if vcd.skipVappTests { 123 check.Skip("Skipping test because vApp was not successfully created at setup") 124 } 125 var test = make(map[string]string) 126 test["guestinfo.hostname"] = "testhostname" 127 task, err := vcd.vapp.SetOvf(test) 128 129 check.Assert(err, IsNil) 130 err = task.WaitTaskCompletion() 131 check.Assert(err, IsNil) 132 check.Assert(task.Task.Status, Equals, "success") 133 134 } 135 136 // TODO: Add a check checking if the customization script ran 137 func (vcd *TestVCD) Test_RunCustomizationScript(check *C) { 138 if vcd.skipVappTests { 139 check.Skip("Skipping test because vApp was not successfully created at setup") 140 } 141 // Run Script on Test Vapp 142 task, err := vcd.vapp.RunCustomizationScript("computername", "this is my script") 143 check.Assert(err, IsNil) 144 err = task.WaitTaskCompletion() 145 check.Assert(err, IsNil) 146 check.Assert(task.Task.Status, Equals, "success") 147 } 148 149 // TODO: Add a check checking if the cpu count did change 150 func (vcd *TestVCD) Test_ChangeCPUcount(check *C) { 151 if vcd.skipVappTests { 152 check.Skip("Skipping test because vApp was not successfully created at setup") 153 } 154 task, err := vcd.vapp.ChangeCPUCount(1) 155 check.Assert(err, IsNil) 156 err = task.WaitTaskCompletion() 157 check.Assert(err, IsNil) 158 check.Assert(task.Task.Status, Equals, "success") 159 } 160 161 // TODO: Add a check checking if the cpu count and cores did change 162 func (vcd *TestVCD) Test_ChangeCPUCountWithCore(check *C) { 163 if vcd.skipVappTests { 164 check.Skip("Skipping test because vApp was not successfully created at setup") 165 } 166 167 currentCpus := int64(0) 168 currentCores := 0 169 170 // save current values 171 if nil != vcd.vapp.VApp.Children.VM[0] && nil != vcd.vapp.VApp.Children.VM[0].VirtualHardwareSection && nil != vcd.vapp.VApp.Children.VM[0].VirtualHardwareSection.Item { 172 for _, item := range vcd.vapp.VApp.Children.VM[0].VirtualHardwareSection.Item { 173 if item.ResourceType == types.ResourceTypeProcessor { 174 currentCpus = item.VirtualQuantity 175 currentCores = item.CoresPerSocket 176 break 177 } 178 } 179 } 180 181 cores := 2 182 cpuCount := int64(4) 183 task, err := vcd.vapp.ChangeCPUCountWithCore(int(cpuCount), &cores) 184 check.Assert(err, IsNil) 185 err = task.WaitTaskCompletion() 186 check.Assert(err, IsNil) 187 check.Assert(task.Task.Status, Equals, "success") 188 189 err = vcd.vapp.Refresh() 190 check.Assert(err, IsNil) 191 foundItem := false 192 if nil != vcd.vapp.VApp.Children.VM[0] && nil != vcd.vapp.VApp.Children.VM[0].VirtualHardwareSection && nil != vcd.vapp.VApp.Children.VM[0].VirtualHardwareSection.Item { 193 for _, item := range vcd.vapp.VApp.Children.VM[0].VirtualHardwareSection.Item { 194 if item.ResourceType == types.ResourceTypeProcessor { 195 check.Assert(item.CoresPerSocket, Equals, cores) 196 check.Assert(item.VirtualQuantity, Equals, cpuCount) 197 foundItem = true 198 break 199 } 200 } 201 check.Assert(foundItem, Equals, true) 202 } 203 204 // return tu previous value 205 task, err = vcd.vapp.ChangeCPUCountWithCore(int(currentCpus), ¤tCores) 206 check.Assert(err, IsNil) 207 err = task.WaitTaskCompletion() 208 check.Assert(err, IsNil) 209 check.Assert(task.Task.Status, Equals, "success") 210 } 211 212 // TODO: Add a check checking if the vapp uses the new memory size 213 func (vcd *TestVCD) Test_ChangeMemorySize(check *C) { 214 if vcd.skipVappTests { 215 check.Skip("Skipping test because vapp was not successfully created at setup") 216 } 217 task, err := vcd.vapp.ChangeMemorySize(512) 218 219 check.Assert(err, IsNil) 220 err = task.WaitTaskCompletion() 221 check.Assert(err, IsNil) 222 check.Assert(task.Task.Status, Equals, "success") 223 } 224 225 // TODO: Add a check checking the if the vapp uses the new storage profile 226 func (vcd *TestVCD) Test_ChangeStorageProfile(check *C) { 227 if vcd.skipVappTests { 228 check.Skip("Skipping test because vapp was not successfully created at setup") 229 } 230 if vcd.config.VCD.StorageProfile.SP2 == "" { 231 check.Skip("Skipping test because second storage profile not given") 232 } 233 task, err := vcd.vapp.ChangeStorageProfile(vcd.config.VCD.StorageProfile.SP2) 234 errStr := fmt.Sprintf("%s", err) 235 236 re := regexp.MustCompile(`error retrieving storage profile`) 237 if re.MatchString(errStr) { 238 check.Skip("Skipping test because second storage profile not found") 239 } 240 check.Assert(err, IsNil) 241 err = task.WaitTaskCompletion() 242 check.Assert(err, IsNil) 243 } 244 245 // TODO: Add a check checking the vm name 246 func (vcd *TestVCD) Test_ChangeVMName(check *C) { 247 if vcd.skipVappTests { 248 check.Skip("Skipping test because vapp was not successfully created at setup") 249 } 250 task, err := vcd.vapp.ChangeVMName("My-vm") 251 check.Assert(err, IsNil) 252 err = task.WaitTaskCompletion() 253 check.Assert(err, IsNil) 254 check.Assert(task.Task.Status, Equals, "success") 255 } 256 257 // TODO: Find out if there is a way to check if the vapp is on without 258 // powering it on. 259 func (vcd *TestVCD) Test_Reset(check *C) { 260 if vcd.skipVappTests { 261 check.Skip("Skipping test because vapp was not successfully created at setup") 262 } 263 task, err := vcd.vapp.PowerOn() 264 check.Assert(err, IsNil) 265 err = task.WaitTaskCompletion() 266 check.Assert(err, IsNil) 267 task, err = vcd.vapp.Reset() 268 check.Assert(err, IsNil) 269 err = task.WaitTaskCompletion() 270 check.Assert(err, IsNil) 271 check.Assert(task.Task.Status, Equals, "success") 272 } 273 274 // TODO: Find out if there is a way to check if the vapp is on without 275 // powering it on. 276 func (vcd *TestVCD) Test_Suspend(check *C) { 277 if vcd.skipVappTests { 278 check.Skip("Skipping test because vapp was not successfully created at setup") 279 } 280 task, err := vcd.vapp.PowerOn() 281 check.Assert(err, IsNil) 282 err = task.WaitTaskCompletion() 283 check.Assert(err, IsNil) 284 task, err = vcd.vapp.Suspend() 285 check.Assert(err, IsNil) 286 err = task.WaitTaskCompletion() 287 check.Assert(err, IsNil) 288 check.Assert(task.Task.Status, Equals, "success") 289 290 } 291 292 // TODO: Find out if there is a way to check if the vapp is on without 293 // powering it on. 294 func (vcd *TestVCD) Test_Shutdown(check *C) { 295 if vcd.skipVappTests { 296 check.Skip("Skipping test because vapp was not successfully created at setup") 297 } 298 task, err := vcd.vapp.PowerOn() 299 check.Assert(err, IsNil) 300 err = task.WaitTaskCompletion() 301 check.Assert(err, IsNil) 302 task, err = vcd.vapp.Shutdown() 303 check.Assert(err, IsNil) 304 err = task.WaitTaskCompletion() 305 check.Assert(err, IsNil) 306 check.Assert(task.Task.Status, Equals, "success") 307 308 } 309 310 func (vcd *TestVCD) Test_Deploy(check *C) { 311 if vcd.skipVappTests { 312 check.Skip("Skipping test because vapp was not successfully created at setup") 313 } 314 // Deploy 315 task, err := vcd.vapp.Deploy() 316 check.Assert(err, IsNil) 317 err = task.WaitTaskCompletion() 318 check.Assert(err, IsNil) 319 check.Assert(task.Task.Status, Equals, "success") 320 } 321 322 // TODO: Find out if there is a way to check if the vapp is on without 323 // powering it on. 324 func (vcd *TestVCD) Test_PowerOff(check *C) { 325 if vcd.skipVappTests { 326 check.Skip("Skipping test because vapp was not successfully created at setup") 327 } 328 task, err := vcd.vapp.PowerOn() 329 check.Assert(err, IsNil) 330 err = task.WaitTaskCompletion() 331 check.Assert(err, IsNil) 332 task, err = vcd.vapp.PowerOff() 333 check.Assert(err, IsNil) 334 err = task.WaitTaskCompletion() 335 check.Assert(err, IsNil) 336 check.Assert(task.Task.Status, Equals, "success") 337 } 338 339 // TODO: EVENTUALLY REMOVE THIS REDEPLOY 340 func (vcd *TestVCD) Test_Undeploy(check *C) { 341 if vcd.skipVappTests { 342 check.Skip("Skipping test because vapp was not successfully created at setup") 343 } 344 // Check if the vapp has been deployed yet 345 err := vcd.vapp.Refresh() 346 check.Assert(err, IsNil) 347 if !vcd.vapp.VApp.Deployed { 348 task, err := vcd.vapp.Deploy() 349 check.Assert(err, IsNil) 350 err = task.WaitTaskCompletion() 351 check.Assert(err, IsNil) 352 } 353 // Undeploy 354 task, err := vcd.vapp.Undeploy() 355 check.Assert(err, IsNil) 356 err = task.WaitTaskCompletion() 357 check.Assert(err, IsNil) 358 check.Assert(task.Task.Status, Equals, "success") 359 // Deploy 360 // For some reason it will not work without redeploying 361 // TODO: EVENTUALLY REMOVE THIS REDEPLOY 362 task, err = vcd.vapp.Deploy() 363 check.Assert(err, IsNil) 364 err = task.WaitTaskCompletion() 365 check.Assert(err, IsNil) 366 check.Assert(task.Task.Status, Equals, "success") 367 } 368 369 func (vcd *TestVCD) Test_AddAndRemoveIsolatedNetwork(check *C) { 370 if vcd.skipVappTests { 371 check.Skip("Skipping test because vapp was not successfully created at setup") 372 } 373 // Add Metadata 374 networkName := "AddAndRemoveIsolatedNetworkTest" 375 const gateway = "192.168.0.1" 376 const netmask = "255.255.255.0" 377 const dns1 = "8.8.8.8" 378 const dns2 = "1.1.1.1" 379 const dnsSuffix = "biz.biz" 380 const startAddress = "192.168.0.10" 381 const endAddress = "192.168.0.20" 382 const dhcpStartAddress = "192.168.0.30" 383 const dhcpEndAddress = "192.168.0.40" 384 const maxLeaseTime = 3500 385 const defaultLeaseTime = 2400 386 var guestVlanAllowed = true 387 388 vappNetworkSettings := &VappNetworkSettings{ 389 Name: networkName, 390 Gateway: gateway, 391 NetMask: netmask, 392 DNS1: dns1, 393 DNS2: dns2, 394 DNSSuffix: dnsSuffix, 395 GuestVLANAllowed: &guestVlanAllowed, 396 StaticIPRanges: []*types.IPRange{{StartAddress: startAddress, EndAddress: endAddress}}, 397 DhcpSettings: &DhcpSettings{IsEnabled: true, MaxLeaseTime: maxLeaseTime, DefaultLeaseTime: defaultLeaseTime, IPRange: &types.IPRange{StartAddress: dhcpStartAddress, EndAddress: dhcpEndAddress}}, 398 } 399 400 task, err := vcd.vapp.AddIsolatedNetwork(vappNetworkSettings) 401 check.Assert(err, IsNil) 402 err = task.WaitTaskCompletion() 403 check.Assert(err, IsNil) 404 check.Assert(task.Task.Status, Equals, "success") 405 406 err = vcd.vapp.Refresh() 407 check.Assert(err, IsNil) 408 networkConfig, err := vcd.vapp.GetNetworkConfig() 409 check.Assert(err, IsNil) 410 411 networkFound := types.VAppNetworkConfiguration{} 412 for _, networkConfig := range networkConfig.NetworkConfig { 413 if networkConfig.NetworkName == networkName { 414 networkFound = networkConfig 415 } 416 } 417 418 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Gateway, Equals, gateway) 419 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Netmask, Equals, netmask) 420 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS1, Equals, dns1) 421 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS2, Equals, dns2) 422 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNSSuffix, Equals, dnsSuffix) 423 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress, Equals, startAddress) 424 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress, Equals, endAddress) 425 426 check.Assert(networkFound.Configuration.Features.DhcpService.IsEnabled, Equals, true) 427 check.Assert(networkFound.Configuration.Features.DhcpService.MaxLeaseTime, Equals, maxLeaseTime) 428 check.Assert(networkFound.Configuration.Features.DhcpService.DefaultLeaseTime, Equals, defaultLeaseTime) 429 check.Assert(networkFound.Configuration.Features.DhcpService.IPRange.StartAddress, Equals, dhcpStartAddress) 430 check.Assert(networkFound.Configuration.Features.DhcpService.IPRange.EndAddress, Equals, dhcpEndAddress) 431 432 task, err = vcd.vapp.RemoveIsolatedNetwork(networkName) 433 check.Assert(err, IsNil) 434 err = task.WaitTaskCompletion() 435 check.Assert(err, IsNil) 436 check.Assert(task.Task.Status, Equals, "success") 437 438 err = vcd.vapp.Refresh() 439 check.Assert(err, IsNil) 440 networkConfig, err = vcd.vapp.GetNetworkConfig() 441 check.Assert(err, IsNil) 442 443 isExist := false 444 for _, networkConfig := range networkConfig.NetworkConfig { 445 if networkConfig.NetworkName == networkName { 446 isExist = true 447 } 448 } 449 check.Assert(isExist, Equals, false) 450 } 451 452 // Test_AddNewVMNilNIC creates VM with nil network configuration 453 func (vcd *TestVCD) Test_AddNewVMNilNIC(check *C) { 454 455 if vcd.skipVappTests { 456 check.Skip("Skipping test because vapp was not successfully created at setup") 457 } 458 459 // Find VApp 460 if vcd.vapp.VApp == nil { 461 check.Skip("skipping test because no vApp is found") 462 } 463 464 // Populate Catalog 465 cat, err := vcd.org.GetCatalogByName(vcd.config.VCD.Catalog.Name, false) 466 check.Assert(err, IsNil) 467 check.Assert(cat, NotNil) 468 469 // Populate Catalog Item 470 catitem, err := cat.GetCatalogItemByName(vcd.config.VCD.Catalog.CatalogItem, false) 471 check.Assert(err, IsNil) 472 check.Assert(catitem, NotNil) 473 474 // Get VAppTemplate 475 vapptemplate, err := catitem.GetVAppTemplate() 476 check.Assert(err, IsNil) 477 478 vapp, err := deployVappForTest(vcd, "Test_AddNewVMNilNIC") 479 check.Assert(err, IsNil) 480 check.Assert(vapp, NotNil) 481 task, err := vapp.AddNewVM(check.TestName(), vapptemplate, nil, true) 482 483 check.Assert(err, IsNil) 484 485 err = task.WaitTaskCompletion() 486 check.Assert(err, IsNil) 487 check.Assert(task.Task.Status, Equals, "success") 488 489 vm, err := vapp.GetVMByName(check.TestName(), true) 490 check.Assert(err, IsNil) 491 492 // Cleanup the created VM 493 err = vapp.RemoveVM(*vm) 494 check.Assert(err, IsNil) 495 task, err = vapp.Delete() 496 check.Assert(err, IsNil) 497 err = task.WaitTaskCompletion() 498 check.Assert(err, IsNil) 499 check.Assert(task.Task.Status, Equals, "success") 500 } 501 502 // Test_AddNewVMMultiNIC creates a new VM in vApp with multiple network cards 503 func (vcd *TestVCD) Test_AddNewVMMultiNIC(check *C) { 504 505 if vcd.skipVappTests { 506 check.Skip("Skipping test because vapp was not successfully created at setup") 507 } 508 509 config := vcd.config 510 if config.VCD.Network.Net1 == "" { 511 check.Skip("Skipping test because no network was given") 512 } 513 514 // Find VApp 515 if vcd.vapp.VApp == nil { 516 check.Skip("skipping test because no vApp is found") 517 } 518 519 // Populate Catalog 520 cat, err := vcd.org.GetCatalogByName(vcd.config.VCD.Catalog.Name, true) 521 check.Assert(err, IsNil) 522 check.Assert(cat, NotNil) 523 524 // Populate Catalog Item 525 catitem, err := cat.GetCatalogItemByName(vcd.config.VCD.Catalog.CatalogItem, false) 526 check.Assert(err, IsNil) 527 check.Assert(catitem, NotNil) 528 529 // Get VAppTemplate 530 vapptemplate, err := catitem.GetVAppTemplate() 531 check.Assert(err, IsNil) 532 533 vapp, err := deployVappForTest(vcd, "Test_AddNewVMMultiNIC") 534 check.Assert(err, IsNil) 535 check.Assert(vapp, NotNil) 536 537 desiredNetConfig := &types.NetworkConnectionSection{} 538 desiredNetConfig.PrimaryNetworkConnectionIndex = 0 539 desiredNetConfig.NetworkConnection = append(desiredNetConfig.NetworkConnection, 540 &types.NetworkConnection{ 541 IsConnected: true, 542 IPAddressAllocationMode: types.IPAllocationModePool, 543 Network: config.VCD.Network.Net1, 544 NetworkConnectionIndex: 0, 545 }, 546 &types.NetworkConnection{ 547 IsConnected: true, 548 IPAddressAllocationMode: types.IPAllocationModeNone, 549 Network: types.NoneNetwork, 550 NetworkConnectionIndex: 1, 551 }) 552 553 // Test with two different networks if we have them 554 if config.VCD.Network.Net2 != "" { 555 // Attach second vdc network to vApp 556 vdcNetwork2, err := vcd.vdc.GetOrgVdcNetworkByName(vcd.config.VCD.Network.Net2, false) 557 check.Assert(err, IsNil) 558 _, err = vapp.AddOrgNetwork(&VappNetworkSettings{}, vdcNetwork2.OrgVDCNetwork, false) 559 check.Assert(err, IsNil) 560 561 desiredNetConfig.NetworkConnection = append(desiredNetConfig.NetworkConnection, 562 &types.NetworkConnection{ 563 IsConnected: true, 564 IPAddressAllocationMode: types.IPAllocationModePool, 565 Network: config.VCD.Network.Net2, 566 NetworkConnectionIndex: 2, 567 }, 568 ) 569 } else { 570 fmt.Println("Skipping adding another vdc network as network2 was not specified") 571 } 572 573 var task Task 574 var sp types.Reference 575 var customSP = false 576 577 if vcd.config.VCD.StorageProfile.SP1 != "" { 578 sp, _ = vcd.vdc.FindStorageProfileReference(vcd.config.VCD.StorageProfile.SP1) 579 } 580 581 // TODO: explore the feasibility of adding a test for either case (with or without storage profile). 582 if sp.HREF != "" { 583 if testVerbose { 584 fmt.Printf("Custom storage profile found. Using AddNewVMWithStorage \n") 585 } 586 customSP = true 587 task, err = vapp.AddNewVMWithStorageProfile(check.TestName(), vapptemplate, desiredNetConfig, &sp, true) 588 } else { 589 if testVerbose { 590 fmt.Printf("Custom storage profile not found. Using AddNewVM\n") 591 } 592 task, err = vapp.AddNewVM(check.TestName(), vapptemplate, desiredNetConfig, true) 593 } 594 595 check.Assert(err, IsNil) 596 597 err = task.WaitTaskCompletion() 598 check.Assert(err, IsNil) 599 check.Assert(task.Task.Status, Equals, "success") 600 601 vm, err := vapp.GetVMByName(check.TestName(), true) 602 check.Assert(err, IsNil) 603 604 // Ensure network config was valid 605 actualNetConfig, err := vm.GetNetworkConnectionSection() 606 check.Assert(err, IsNil) 607 608 if customSP { 609 check.Assert(vm.VM.StorageProfile.HREF, Equals, sp.HREF) 610 } 611 612 verifyNetworkConnectionSection(check, actualNetConfig, desiredNetConfig) 613 614 allVappNetworks, err := vapp.QueryAllVappNetworks(nil) 615 check.Assert(err, IsNil) 616 printVerbose("%# v\n", pretty.Formatter(allVappNetworks)) 617 check.Assert(len(allVappNetworks), Equals, 2) 618 619 vappNetworks, err := vapp.QueryVappNetworks(nil) 620 check.Assert(err, IsNil) 621 printVerbose("%# v\n", pretty.Formatter(vappNetworks)) 622 check.Assert(len(vappNetworks), Equals, 0) 623 vappOrgNetworks, err := vapp.QueryVappOrgNetworks(nil) 624 check.Assert(err, IsNil) 625 printVerbose("%# v\n", pretty.Formatter(vappOrgNetworks)) 626 check.Assert(len(vappOrgNetworks), Equals, 2) 627 628 // Cleanup 629 err = vapp.RemoveVM(*vm) 630 check.Assert(err, IsNil) 631 632 // Ensure network is detached from vApp to avoid conflicts in other tests 633 task, err = vapp.RemoveAllNetworks() 634 check.Assert(err, IsNil) 635 err = task.WaitTaskCompletion() 636 check.Assert(err, IsNil) 637 task, err = vapp.Delete() 638 check.Assert(err, IsNil) 639 err = task.WaitTaskCompletion() 640 check.Assert(err, IsNil) 641 check.Assert(task.Task.Status, Equals, "success") 642 } 643 644 func (vcd *TestVCD) Test_RemoveAllNetworks(check *C) { 645 if vcd.skipVappTests { 646 check.Skip("Skipping test because vapp was not successfully created at setup") 647 } 648 649 networkName := "Test_RemoveAllNetworks" 650 networkName2 := "Test_RemoveAllNetworks2" 651 const gateway = "192.168.0.1" 652 const netmask = "255.255.255.0" 653 const dns1 = "8.8.8.8" 654 const dns2 = "1.1.1.1" 655 const dnsSuffix = "biz.biz" 656 const startAddress = "192.168.0.10" 657 const endAddress = "192.168.0.20" 658 const dhcpStartAddress = "192.168.0.30" 659 const dhcpEndAddress = "192.168.0.40" 660 const maxLeaseTime = 3500 661 const defaultLeaseTime = 2400 662 var guestVlanAllowed = true 663 664 vappNetworkSettings := &VappNetworkSettings{ 665 Name: networkName, 666 Gateway: gateway, 667 NetMask: netmask, 668 DNS1: dns1, 669 DNS2: dns2, 670 DNSSuffix: dnsSuffix, 671 StaticIPRanges: []*types.IPRange{{StartAddress: startAddress, EndAddress: endAddress}}, 672 DhcpSettings: &DhcpSettings{IsEnabled: true, MaxLeaseTime: maxLeaseTime, DefaultLeaseTime: defaultLeaseTime, IPRange: &types.IPRange{StartAddress: dhcpStartAddress, EndAddress: dhcpEndAddress}}, 673 } 674 675 vappNetworkSettings2 := &VappNetworkSettings{ 676 Name: networkName2, 677 Gateway: gateway, 678 NetMask: netmask, 679 DNS1: dns1, 680 DNS2: dns2, 681 DNSSuffix: dnsSuffix, 682 StaticIPRanges: []*types.IPRange{{StartAddress: startAddress, EndAddress: endAddress}}, 683 DhcpSettings: &DhcpSettings{IsEnabled: true, MaxLeaseTime: maxLeaseTime, DefaultLeaseTime: defaultLeaseTime, IPRange: &types.IPRange{StartAddress: dhcpStartAddress, EndAddress: dhcpEndAddress}}, 684 GuestVLANAllowed: &guestVlanAllowed, 685 } 686 687 _, err := vcd.vapp.CreateVappNetwork(vappNetworkSettings, nil) 688 check.Assert(err, IsNil) 689 690 _, err = vcd.vapp.CreateVappNetwork(vappNetworkSettings2, nil) 691 check.Assert(err, IsNil) 692 693 err = vcd.vapp.Refresh() 694 check.Assert(err, IsNil) 695 networkConfig, err := vcd.vapp.GetNetworkConfig() 696 check.Assert(err, IsNil) 697 698 check.Assert(len(networkConfig.NetworkConfig), Equals, 2) 699 700 // Network removal requires for the vApp to be down therefore attempt to power off vApp before 701 // network removal, but ignore error as it might already be powered off 702 vappStatus, err := vcd.vapp.GetStatus() 703 check.Assert(err, IsNil) 704 705 allVappNetworks, err := vcd.vapp.QueryAllVappNetworks(nil) 706 check.Assert(err, IsNil) 707 printVerbose("%# v\n", pretty.Formatter(allVappNetworks)) 708 check.Assert(len(allVappNetworks), Equals, 2) 709 710 vappNetworks, err := vcd.vapp.QueryVappNetworks(nil) 711 check.Assert(err, IsNil) 712 printVerbose("%# v\n", pretty.Formatter(vappNetworks)) 713 check.Assert(len(vappNetworks), Equals, 1) 714 vappOrgNetworks, err := vcd.vapp.QueryVappOrgNetworks(nil) 715 check.Assert(err, IsNil) 716 printVerbose("%# v\n", pretty.Formatter(vappOrgNetworks)) 717 check.Assert(len(vappOrgNetworks), Equals, 1) 718 719 if vappStatus != "POWERED_OFF" { 720 task, err := vcd.vapp.Undeploy() 721 check.Assert(err, IsNil) 722 err = task.WaitTaskCompletion() 723 check.Assert(err, IsNil) 724 } 725 726 vappStatus, err = vcd.vapp.GetStatus() 727 check.Assert(err, IsNil) 728 printVerbose("vApp status before network removal: %s\n", vappStatus) 729 730 task, err := vcd.vapp.RemoveAllNetworks() 731 check.Assert(err, IsNil) 732 err = task.WaitTaskCompletion() 733 check.Assert(err, IsNil) 734 check.Assert(task.Task.Status, Equals, "success") 735 736 err = vcd.vapp.Refresh() 737 check.Assert(err, IsNil) 738 networkConfig, err = vcd.vapp.GetNetworkConfig() 739 check.Assert(err, IsNil) 740 741 hasNetworks := false 742 for _, networkConfig := range networkConfig.NetworkConfig { 743 if networkConfig.NetworkName == networkName || networkConfig.NetworkName == networkName2 { 744 hasNetworks = true 745 } 746 747 } 748 check.Assert(hasNetworks, Equals, false) 749 750 // Power on shared vApp for other tests 751 task, err = vcd.vapp.PowerOn() 752 check.Assert(err, IsNil) 753 err = task.WaitTaskCompletion() 754 check.Assert(err, IsNil) 755 } 756 757 // Test_VappSetProductSectionList sets vApp product section, retrieves it and deeply matches if 758 // properties were properly set using a propertyTester helper. 759 func (vcd *TestVCD) Test_VappSetProductSectionList(check *C) { 760 if vcd.skipVappTests { 761 check.Skip("Skipping test because vapp was not successfully created at setup") 762 } 763 vapp := vcd.findFirstVapp() 764 propertyTester(vcd, check, &vapp) 765 } 766 767 // Tests VM retrieval by name, by ID, and by a combination of name and ID 768 func (vcd *TestVCD) Test_GetVM(check *C) { 769 770 if vcd.skipVappTests { 771 check.Skip("Skipping test because vapp wasn't properly created") 772 } 773 if vcd.config.VCD.Org == "" { 774 check.Skip("Test_GetVapp: Org name not given.") 775 return 776 } 777 if vcd.config.VCD.Vdc == "" { 778 check.Skip("Test_GetVapp: VDC name not given.") 779 return 780 } 781 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 782 check.Assert(err, IsNil) 783 check.Assert(org, NotNil) 784 785 vdc, err := org.GetVDCByName(vcd.config.VCD.Vdc, false) 786 check.Assert(err, IsNil) 787 check.Assert(vdc, NotNil) 788 789 vapp := vcd.findFirstVapp() 790 791 if vapp.VApp == nil || vapp.VApp.HREF == "" || vapp.client == nil { 792 check.Skip("no suitable vApp found") 793 } 794 _, vmName := vcd.findFirstVm(vapp) 795 796 if vmName == "" { 797 check.Skip("no suitable VM found") 798 } 799 800 getByName := func(name string, refresh bool) (genericEntity, error) { 801 return vapp.GetVMByName(name, refresh) 802 } 803 getById := func(id string, refresh bool) (genericEntity, error) { return vapp.GetVMById(id, refresh) } 804 getByNameOrId := func(id string, refresh bool) (genericEntity, error) { 805 return vapp.GetVMByNameOrId(id, refresh) 806 } 807 808 var def = getterTestDefinition{ 809 parentType: "VApp", 810 parentName: vapp.VApp.Name, 811 entityType: "Vm", 812 entityName: vmName, 813 getByName: getByName, 814 getById: getById, 815 getByNameOrId: getByNameOrId, 816 } 817 vcd.testFinderGetGenericEntity(def, check) 818 } 819 820 func (vcd *TestVCD) Test_AddAndRemoveIsolatedVappNetwork(check *C) { 821 fmt.Printf("Running: %s\n", check.TestName()) 822 823 vapp, err := deployVappForTest(vcd, "Test_AddAndRemoveIsolatedVappNetwork") 824 check.Assert(err, IsNil) 825 check.Assert(vapp, NotNil) 826 827 // Add Metadata 828 networkName := "Test_AddAndRemoveIsolatedVappNetwork" 829 description := "Created in test" 830 const gateway = "192.168.0.1" 831 const netmask = "255.255.255.0" 832 const dns1 = "8.8.8.8" 833 const dns2 = "1.1.1.1" 834 const dnsSuffix = "biz.biz" 835 const startAddress = "192.168.0.10" 836 const endAddress = "192.168.0.20" 837 const dhcpStartAddress = "192.168.0.30" 838 const dhcpEndAddress = "192.168.0.40" 839 const maxLeaseTime = 3500 840 const defaultLeaseTime = 2400 841 var guestVlanAllowed = true 842 843 vappNetworkSettings := &VappNetworkSettings{ 844 Name: networkName, 845 Gateway: gateway, 846 NetMask: netmask, 847 DNS1: dns1, 848 DNS2: dns2, 849 DNSSuffix: dnsSuffix, 850 StaticIPRanges: []*types.IPRange{{StartAddress: startAddress, EndAddress: endAddress}}, 851 DhcpSettings: &DhcpSettings{IsEnabled: true, MaxLeaseTime: maxLeaseTime, DefaultLeaseTime: defaultLeaseTime, IPRange: &types.IPRange{StartAddress: dhcpStartAddress, EndAddress: dhcpEndAddress}}, 852 GuestVLANAllowed: &guestVlanAllowed, 853 Description: description, 854 } 855 856 vappNetworkConfig, err := vapp.CreateVappNetwork(vappNetworkSettings, nil) 857 check.Assert(err, IsNil) 858 check.Assert(vappNetworkConfig, NotNil) 859 860 networkFound := types.VAppNetworkConfiguration{} 861 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 862 if networkConfig.NetworkName == networkName { 863 networkFound = networkConfig 864 } 865 } 866 867 check.Assert(networkFound.Description, Equals, description) 868 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Gateway, Equals, gateway) 869 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Netmask, Equals, netmask) 870 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS1, Equals, dns1) 871 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS2, Equals, dns2) 872 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNSSuffix, Equals, dnsSuffix) 873 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress, Equals, startAddress) 874 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress, Equals, endAddress) 875 876 check.Assert(networkFound.Configuration.Features.DhcpService.IsEnabled, Equals, true) 877 check.Assert(networkFound.Configuration.Features.DhcpService.MaxLeaseTime, Equals, maxLeaseTime) 878 check.Assert(networkFound.Configuration.Features.DhcpService.DefaultLeaseTime, Equals, defaultLeaseTime) 879 check.Assert(networkFound.Configuration.Features.DhcpService.IPRange.StartAddress, Equals, dhcpStartAddress) 880 check.Assert(networkFound.Configuration.Features.DhcpService.IPRange.EndAddress, Equals, dhcpEndAddress) 881 882 err = vapp.Refresh() 883 check.Assert(err, IsNil) 884 vappNetworkConfig, err = vapp.RemoveNetwork(networkName) 885 check.Assert(err, IsNil) 886 check.Assert(vappNetworkConfig, NotNil) 887 888 isExist := false 889 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 890 if networkConfig.NetworkName == networkName { 891 isExist = true 892 } 893 } 894 check.Assert(isExist, Equals, false) 895 896 task, err := vapp.Delete() 897 check.Assert(err, IsNil) 898 err = task.WaitTaskCompletion() 899 check.Assert(err, IsNil) 900 check.Assert(task.Task.Status, Equals, "success") 901 } 902 903 // Test_AddAndRemoveIsolatedVappNetworkIpv6 is identical to Test_AddAndRemoveIsolatedVappNetwork, 904 // but it uses ipv6 values for network specification. 905 func (vcd *TestVCD) Test_AddAndRemoveIsolatedVappNetworkIpv6(check *C) { 906 fmt.Printf("Running: %s\n", check.TestName()) 907 908 vapp, err := deployVappForTest(vcd, "Test_AddAndRemoveIsolatedVappNetwork") 909 check.Assert(err, IsNil) 910 check.Assert(vapp, NotNil) 911 912 // Add Metadata 913 networkName := check.TestName() 914 description := "Created in test" 915 const gateway = "fe80:0:0:0:0:0:0:aaaa" 916 const prefixlength = "100" 917 // VCD API returns ipv6 addresses in expanded format, so this is 918 // needed to compare values properly. 919 const dns1 = "2001:4860:4860:0:0:0:0:8844" 920 const dns2 = "2001:4860:4860:0:0:0:0:8844" 921 const dnsSuffix = "biz.biz" 922 const startAddress = "fe80:0:0:0:0:0:0:aaab" 923 const endAddress = "fe80:0:0:0:0:0:0:bbbb" 924 const dhcpStartAddress = "fe80:0:0:0:0:0:0:cccc" 925 const dhcpEndAddress = "fe80:0:0:0:0:0:0:dddd" 926 const maxLeaseTime = 3500 927 const defaultLeaseTime = 2400 928 var guestVlanAllowed = true 929 930 vappNetworkSettings := &VappNetworkSettings{ 931 Name: networkName, 932 Gateway: gateway, 933 SubnetPrefixLength: prefixlength, 934 DNS1: dns1, 935 DNS2: dns2, 936 DNSSuffix: dnsSuffix, 937 StaticIPRanges: []*types.IPRange{{StartAddress: startAddress, EndAddress: endAddress}}, 938 DhcpSettings: &DhcpSettings{IsEnabled: true, MaxLeaseTime: maxLeaseTime, DefaultLeaseTime: defaultLeaseTime, IPRange: &types.IPRange{StartAddress: dhcpStartAddress, EndAddress: dhcpEndAddress}}, 939 GuestVLANAllowed: &guestVlanAllowed, 940 Description: description, 941 } 942 943 vappNetworkConfig, err := vapp.CreateVappNetwork(vappNetworkSettings, nil) 944 check.Assert(err, IsNil) 945 check.Assert(vappNetworkConfig, NotNil) 946 947 vappNetworkSettings.NetMask = "255.255.255.0" 948 vappNetworkConfig2, err := vapp.CreateVappNetwork(vappNetworkSettings, nil) 949 check.Assert(err, NotNil) 950 check.Assert(vappNetworkConfig2, IsNil) 951 952 networkFound := types.VAppNetworkConfiguration{} 953 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 954 if networkConfig.NetworkName == networkName { 955 networkFound = networkConfig 956 } 957 } 958 959 check.Assert(networkFound.Description, Equals, description) 960 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Gateway, Equals, gateway) 961 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].SubnetPrefixLength, Equals, prefixlength) 962 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS1, Equals, dns1) 963 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS2, Equals, dns2) 964 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNSSuffix, Equals, dnsSuffix) 965 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress, Equals, startAddress) 966 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress, Equals, endAddress) 967 968 check.Assert(networkFound.Configuration.Features.DhcpService.IsEnabled, Equals, true) 969 check.Assert(networkFound.Configuration.Features.DhcpService.MaxLeaseTime, Equals, maxLeaseTime) 970 check.Assert(networkFound.Configuration.Features.DhcpService.DefaultLeaseTime, Equals, defaultLeaseTime) 971 check.Assert(networkFound.Configuration.Features.DhcpService.IPRange.StartAddress, Equals, dhcpStartAddress) 972 check.Assert(networkFound.Configuration.Features.DhcpService.IPRange.EndAddress, Equals, dhcpEndAddress) 973 974 err = vapp.Refresh() 975 check.Assert(err, IsNil) 976 vappNetworkConfig, err = vapp.RemoveNetwork(networkName) 977 check.Assert(err, IsNil) 978 check.Assert(vappNetworkConfig, NotNil) 979 980 isExist := false 981 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 982 if networkConfig.NetworkName == networkName { 983 isExist = true 984 } 985 } 986 check.Assert(isExist, Equals, false) 987 988 task, err := vapp.Delete() 989 check.Assert(err, IsNil) 990 err = task.WaitTaskCompletion() 991 check.Assert(err, IsNil) 992 check.Assert(task.Task.Status, Equals, "success") 993 } 994 995 func (vcd *TestVCD) Test_AddAndRemoveNatVappNetwork(check *C) { 996 fmt.Printf("Running: %s\n", check.TestName()) 997 998 if vcd.config.VCD.Network.Net1 == "" { 999 check.Skip("Skipping test because no network was given") 1000 } 1001 1002 vapp, err := deployVappForTest(vcd, "Test_AddAndRemoveNatVappNetwork") 1003 check.Assert(err, IsNil) 1004 check.Assert(vapp, NotNil) 1005 1006 // Add Metadata 1007 networkName := "Test_AddAndRemoveNatVappNetwork" 1008 description := "Created in test" 1009 const gateway = "192.168.0.1" 1010 const netmask = "255.255.255.0" 1011 const dns1 = "8.8.8.8" 1012 const dns2 = "1.1.1.1" 1013 const dnsSuffix = "biz.biz" 1014 const startAddress = "192.168.0.10" 1015 const endAddress = "192.168.0.20" 1016 const dhcpStartAddress = "192.168.0.30" 1017 const dhcpEndAddress = "192.168.0.40" 1018 const maxLeaseTime = 3500 1019 const defaultLeaseTime = 2400 1020 var guestVlanAllowed = true 1021 var retainIpMacEnabled = true 1022 1023 orgVdcNetwork, err := vcd.vdc.GetOrgVdcNetworkByName(vcd.config.VCD.Network.Net1, false) 1024 check.Assert(err, IsNil) 1025 check.Assert(orgVdcNetwork, NotNil) 1026 1027 vappNetworkSettings := &VappNetworkSettings{ 1028 Name: networkName, 1029 Gateway: gateway, 1030 NetMask: netmask, 1031 DNS1: dns1, 1032 DNS2: dns2, 1033 DNSSuffix: dnsSuffix, 1034 StaticIPRanges: []*types.IPRange{{StartAddress: startAddress, EndAddress: endAddress}}, 1035 DhcpSettings: &DhcpSettings{IsEnabled: true, MaxLeaseTime: maxLeaseTime, DefaultLeaseTime: defaultLeaseTime, IPRange: &types.IPRange{StartAddress: dhcpStartAddress, EndAddress: dhcpEndAddress}}, 1036 GuestVLANAllowed: &guestVlanAllowed, 1037 Description: description, 1038 RetainIpMacEnabled: &retainIpMacEnabled, 1039 } 1040 1041 vappNetworkConfig, err := vapp.CreateVappNetwork(vappNetworkSettings, orgVdcNetwork.OrgVDCNetwork) 1042 check.Assert(err, IsNil) 1043 check.Assert(vappNetworkConfig, NotNil) 1044 1045 networkFound := types.VAppNetworkConfiguration{} 1046 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1047 if networkConfig.NetworkName == networkName { 1048 networkFound = networkConfig 1049 } 1050 } 1051 1052 check.Assert(networkFound.Description, Equals, description) 1053 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Gateway, Equals, gateway) 1054 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Netmask, Equals, netmask) 1055 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS1, Equals, dns1) 1056 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS2, Equals, dns2) 1057 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNSSuffix, Equals, dnsSuffix) 1058 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress, Equals, startAddress) 1059 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress, Equals, endAddress) 1060 1061 check.Assert(networkFound.Configuration.Features.DhcpService.IsEnabled, Equals, true) 1062 check.Assert(networkFound.Configuration.Features.DhcpService.MaxLeaseTime, Equals, maxLeaseTime) 1063 check.Assert(networkFound.Configuration.Features.DhcpService.DefaultLeaseTime, Equals, defaultLeaseTime) 1064 check.Assert(networkFound.Configuration.Features.DhcpService.IPRange.StartAddress, Equals, dhcpStartAddress) 1065 check.Assert(networkFound.Configuration.Features.DhcpService.IPRange.EndAddress, Equals, dhcpEndAddress) 1066 1067 check.Assert(*networkFound.Configuration.RetainNetInfoAcrossDeployments, Equals, retainIpMacEnabled) 1068 1069 check.Assert(networkFound.Configuration.ParentNetwork.Name, Equals, orgVdcNetwork.OrgVDCNetwork.Name) 1070 1071 err = vapp.Refresh() 1072 check.Assert(err, IsNil) 1073 vappNetworkConfig, err = vapp.RemoveNetwork(networkName) 1074 check.Assert(err, IsNil) 1075 check.Assert(vappNetworkConfig, NotNil) 1076 1077 isExist := false 1078 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1079 if networkConfig.NetworkName == networkName { 1080 isExist = true 1081 } 1082 } 1083 check.Assert(isExist, Equals, false) 1084 1085 task, err := vapp.Delete() 1086 check.Assert(err, IsNil) 1087 err = task.WaitTaskCompletion() 1088 check.Assert(err, IsNil) 1089 check.Assert(task.Task.Status, Equals, "success") 1090 } 1091 1092 func (vcd *TestVCD) Test_UpdateVappNetwork(check *C) { 1093 fmt.Printf("Running: %s\n", check.TestName()) 1094 1095 if vcd.config.VCD.Network.Net1 == "" { 1096 check.Skip("Skipping test because no network was given") 1097 } 1098 1099 vapp, err := deployVappForTest(vcd, "Test_UpdateVappNetwork") 1100 check.Assert(err, IsNil) 1101 check.Assert(vapp, NotNil) 1102 1103 // Add 1104 networkName := "Test_UpdateVappNetwork" 1105 description := "Created in test" 1106 const gateway = "192.168.0.1" 1107 const netmask = "255.255.255.0" 1108 const dns1 = "8.8.8.8" 1109 const dns2 = "1.1.1.1" 1110 const dnsSuffix = "biz.biz" 1111 const startAddress = "192.168.0.10" 1112 const endAddress = "192.168.0.20" 1113 const dhcpStartAddress = "192.168.0.30" 1114 const dhcpEndAddress = "192.168.0.40" 1115 const maxLeaseTime = 3500 1116 const defaultLeaseTime = 2400 1117 var guestVlanAllowed = true 1118 var retainIpMacEnabled = true 1119 1120 orgVdcNetwork, err := vcd.vdc.GetOrgVdcNetworkByName(vcd.config.VCD.Network.Net1, false) 1121 check.Assert(err, IsNil) 1122 check.Assert(orgVdcNetwork, NotNil) 1123 1124 vappNetworkSettings := &VappNetworkSettings{ 1125 Name: networkName, 1126 Gateway: gateway, 1127 NetMask: netmask, 1128 DNS1: dns1, 1129 DNS2: dns2, 1130 DNSSuffix: dnsSuffix, 1131 StaticIPRanges: []*types.IPRange{{StartAddress: startAddress, EndAddress: endAddress}}, 1132 DhcpSettings: &DhcpSettings{IsEnabled: true, MaxLeaseTime: maxLeaseTime, DefaultLeaseTime: defaultLeaseTime, IPRange: &types.IPRange{StartAddress: dhcpStartAddress, EndAddress: dhcpEndAddress}}, 1133 GuestVLANAllowed: &guestVlanAllowed, 1134 Description: description, 1135 RetainIpMacEnabled: &retainIpMacEnabled, 1136 } 1137 1138 vappNetworkConfig, err := vapp.CreateVappNetwork(vappNetworkSettings, nil) 1139 check.Assert(err, IsNil) 1140 check.Assert(vappNetworkConfig, NotNil) 1141 1142 networkFound := types.VAppNetworkConfiguration{} 1143 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1144 if networkConfig.NetworkName == networkName { 1145 networkFound = networkConfig 1146 } 1147 } 1148 1149 check.Assert(networkFound.Description, Equals, description) 1150 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Gateway, Equals, gateway) 1151 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Netmask, Equals, netmask) 1152 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS1, Equals, dns1) 1153 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS2, Equals, dns2) 1154 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNSSuffix, Equals, dnsSuffix) 1155 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress, Equals, startAddress) 1156 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress, Equals, endAddress) 1157 1158 check.Assert(networkFound.Configuration.Features.DhcpService.IsEnabled, Equals, true) 1159 check.Assert(networkFound.Configuration.Features.DhcpService.MaxLeaseTime, Equals, maxLeaseTime) 1160 check.Assert(networkFound.Configuration.Features.DhcpService.DefaultLeaseTime, Equals, defaultLeaseTime) 1161 check.Assert(networkFound.Configuration.Features.DhcpService.IPRange.StartAddress, Equals, dhcpStartAddress) 1162 check.Assert(networkFound.Configuration.Features.DhcpService.IPRange.EndAddress, Equals, dhcpEndAddress) 1163 1164 var emptyFirewallService *types.FirewallService 1165 check.Assert(networkFound.Configuration.Features.FirewallService, Equals, emptyFirewallService) 1166 check.Assert(*networkFound.Configuration.RetainNetInfoAcrossDeployments, Equals, retainIpMacEnabled) 1167 1168 // Update 1169 updateNetworkName := "Test_UpdateVappNetworkUpdated" 1170 updateDescription := "Created in test Updated" 1171 const updateGateway = "192.168.0.1" 1172 const updateNetmask = "255.255.255.0" 1173 const updateDns1 = "8.8.8.7" 1174 const updateDns2 = "1.1.1.2" 1175 const updateDnsSuffix = "biz.biz2" 1176 const updateStartAddress = "192.168.0.11" 1177 const updateEndAddress = "192.168.0.21" 1178 const updateDhcpStartAddress = "192.168.0.31" 1179 const updateDhcpEndAddress = "192.168.0.41" 1180 const updateMaxLeaseTime = 3400 1181 const updateDefaultLeaseTime = 2300 1182 var updateGuestVlanAllowed = false 1183 var updateRetainIpMacEnabled = false 1184 1185 uuid, err := GetUuidFromHref(networkFound.Link.HREF, false) 1186 check.Assert(err, IsNil) 1187 check.Assert(uuid, NotNil) 1188 1189 updateVappNetworkSettings := &VappNetworkSettings{ 1190 ID: uuid, 1191 Name: updateNetworkName, 1192 Description: updateDescription, 1193 Gateway: updateGateway, 1194 NetMask: updateNetmask, 1195 DNS1: updateDns1, 1196 DNS2: updateDns2, 1197 DNSSuffix: updateDnsSuffix, 1198 StaticIPRanges: []*types.IPRange{{StartAddress: updateStartAddress, EndAddress: updateEndAddress}}, 1199 DhcpSettings: &DhcpSettings{IsEnabled: true, MaxLeaseTime: updateMaxLeaseTime, DefaultLeaseTime: updateDefaultLeaseTime, IPRange: &types.IPRange{StartAddress: updateDhcpStartAddress, EndAddress: updateDhcpEndAddress}}, 1200 GuestVLANAllowed: &updateGuestVlanAllowed, 1201 RetainIpMacEnabled: &updateRetainIpMacEnabled, 1202 } 1203 1204 vappNetworkConfig, err = vapp.UpdateNetwork(updateVappNetworkSettings, orgVdcNetwork.OrgVDCNetwork) 1205 check.Assert(err, IsNil) 1206 check.Assert(vappNetworkConfig, NotNil) 1207 1208 networkFound = types.VAppNetworkConfiguration{} 1209 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1210 if networkConfig.NetworkName == updateNetworkName { 1211 networkFound = networkConfig 1212 } 1213 } 1214 1215 check.Assert(networkFound.Description, Equals, updateDescription) 1216 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Gateway, Equals, updateGateway) 1217 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Netmask, Equals, updateNetmask) 1218 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS1, Equals, updateDns1) 1219 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS2, Equals, updateDns2) 1220 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNSSuffix, Equals, updateDnsSuffix) 1221 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress, Equals, updateStartAddress) 1222 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress, Equals, updateEndAddress) 1223 1224 check.Assert(networkFound.Configuration.Features.DhcpService.IsEnabled, Equals, true) 1225 check.Assert(networkFound.Configuration.Features.DhcpService.MaxLeaseTime, Equals, updateMaxLeaseTime) 1226 check.Assert(networkFound.Configuration.Features.DhcpService.DefaultLeaseTime, Equals, updateDefaultLeaseTime) 1227 check.Assert(networkFound.Configuration.Features.DhcpService.IPRange.StartAddress, Equals, updateDhcpStartAddress) 1228 check.Assert(networkFound.Configuration.Features.DhcpService.IPRange.EndAddress, Equals, updateDhcpEndAddress) 1229 1230 check.Assert(*networkFound.Configuration.RetainNetInfoAcrossDeployments, Equals, updateRetainIpMacEnabled) 1231 1232 check.Assert(networkFound.Configuration.ParentNetwork.Name, Equals, orgVdcNetwork.OrgVDCNetwork.Name) 1233 1234 err = vapp.Refresh() 1235 check.Assert(err, IsNil) 1236 vappNetworkConfig, err = vapp.RemoveNetwork(updateNetworkName) 1237 check.Assert(err, IsNil) 1238 check.Assert(vappNetworkConfig, NotNil) 1239 1240 isExist := false 1241 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1242 if networkConfig.NetworkName == networkName { 1243 isExist = true 1244 } 1245 } 1246 check.Assert(isExist, Equals, false) 1247 1248 task, err := vapp.Delete() 1249 check.Assert(err, IsNil) 1250 err = task.WaitTaskCompletion() 1251 check.Assert(err, IsNil) 1252 check.Assert(task.Task.Status, Equals, "success") 1253 } 1254 1255 func (vcd *TestVCD) Test_AddAndRemoveVappNetworkWithMinimumValues(check *C) { 1256 fmt.Printf("Running: %s\n", check.TestName()) 1257 1258 vapp, err := deployVappForTest(vcd, "Test_AddAndRemoveVappNetworkWithMinimumValues") 1259 check.Assert(err, IsNil) 1260 check.Assert(vapp, NotNil) 1261 1262 // Add Metadata 1263 networkName := "Test_AddAndRemoveVappNetworkWithMinimumValues" 1264 const gateway = "192.168.0.1" 1265 const netmask = "255.255.255.0" 1266 1267 vappNetworkSettings := &VappNetworkSettings{ 1268 Name: networkName, 1269 Gateway: gateway, 1270 NetMask: netmask, 1271 } 1272 1273 vappNetworkConfig, err := vapp.CreateVappNetwork(vappNetworkSettings, nil) 1274 check.Assert(err, IsNil) 1275 check.Assert(vappNetworkConfig, NotNil) 1276 1277 networkFound := types.VAppNetworkConfiguration{} 1278 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1279 if networkConfig.NetworkName == networkName { 1280 networkFound = networkConfig 1281 } 1282 } 1283 1284 var ipRange *types.IPRanges 1285 var networkFeatures *types.NetworkFeatures 1286 var parentNetwork *types.Reference 1287 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Gateway, Equals, gateway) 1288 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Netmask, Equals, netmask) 1289 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS1, Equals, "") 1290 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS2, Equals, "") 1291 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNSSuffix, Equals, "") 1292 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges, Equals, ipRange) 1293 1294 check.Assert(networkFound.Configuration.Features, Equals, networkFeatures) 1295 1296 check.Assert(*networkFound.Configuration.RetainNetInfoAcrossDeployments, Equals, false) 1297 1298 check.Assert(networkFound.Configuration.ParentNetwork, Equals, parentNetwork) 1299 1300 err = vapp.Refresh() 1301 check.Assert(err, IsNil) 1302 vappNetworkConfig, err = vapp.RemoveNetwork(networkName) 1303 check.Assert(err, IsNil) 1304 check.Assert(vappNetworkConfig, NotNil) 1305 1306 isExist := false 1307 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1308 if networkConfig.NetworkName == networkName { 1309 isExist = true 1310 } 1311 } 1312 check.Assert(isExist, Equals, false) 1313 1314 task, err := vapp.Delete() 1315 check.Assert(err, IsNil) 1316 err = task.WaitTaskCompletion() 1317 check.Assert(err, IsNil) 1318 check.Assert(task.Task.Status, Equals, "success") 1319 } 1320 1321 func (vcd *TestVCD) Test_AddAndRemoveOrgVappNetworkWithMinimumValues(check *C) { 1322 fmt.Printf("Running: %s\n", check.TestName()) 1323 1324 if vcd.config.VCD.Network.Net1 == "" { 1325 check.Skip("Skipping test because no first network was given") 1326 } 1327 if vcd.config.VCD.Network.Net2 == "" { 1328 check.Skip("Skipping test because no second network was given") 1329 } 1330 vapp, err := deployVappForTest(vcd, "Test_AddAndRemoveOrgVappNetworkWithMinimumValues") 1331 check.Assert(err, IsNil) 1332 check.Assert(vapp, NotNil) 1333 1334 orgVdcNetwork, err := vcd.vdc.GetOrgVdcNetworkByName(vcd.config.VCD.Network.Net2, false) 1335 check.Assert(err, IsNil) 1336 check.Assert(orgVdcNetwork, NotNil) 1337 1338 vappNetworkSettings := &VappNetworkSettings{} 1339 1340 vappNetworkConfig, err := vapp.AddOrgNetwork(vappNetworkSettings, orgVdcNetwork.OrgVDCNetwork, false) 1341 check.Assert(err, IsNil) 1342 check.Assert(vappNetworkConfig, NotNil) 1343 1344 networkFound := types.VAppNetworkConfiguration{} 1345 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1346 if networkConfig.NetworkName == vcd.config.VCD.Network.Net2 { 1347 networkFound = networkConfig 1348 } 1349 } 1350 1351 var networkFeatures *types.NetworkFeatures 1352 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Gateway, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].Gateway) 1353 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Netmask, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].Netmask) 1354 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS1, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].DNS1) 1355 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress) 1356 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress) 1357 1358 check.Assert(networkFound.Configuration.Features, Equals, networkFeatures) 1359 1360 check.Assert(*networkFound.Configuration.RetainNetInfoAcrossDeployments, Equals, false) 1361 1362 check.Assert(networkFound.Configuration.ParentNetwork.Name, Equals, vcd.config.VCD.Network.Net2) 1363 1364 err = vapp.Refresh() 1365 check.Assert(err, IsNil) 1366 vappNetworkConfig, err = vapp.RemoveNetwork(vcd.config.VCD.Network.Net2) 1367 check.Assert(err, IsNil) 1368 check.Assert(vappNetworkConfig, NotNil) 1369 1370 isExist := false 1371 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1372 if networkConfig.NetworkName == vcd.config.VCD.Network.Net2 { 1373 isExist = true 1374 } 1375 } 1376 check.Assert(isExist, Equals, false) 1377 1378 task, err := vapp.Delete() 1379 check.Assert(err, IsNil) 1380 err = task.WaitTaskCompletion() 1381 check.Assert(err, IsNil) 1382 check.Assert(task.Task.Status, Equals, "success") 1383 } 1384 1385 func (vcd *TestVCD) Test_AddAndRemoveOrgVappNetwork(check *C) { 1386 fmt.Printf("Running: %s\n", check.TestName()) 1387 1388 if vcd.config.VCD.Network.Net1 == "" { 1389 check.Skip("Skipping test because no first network was given") 1390 } 1391 if vcd.config.VCD.Network.Net2 == "" { 1392 check.Skip("Skipping test because no second network was given") 1393 } 1394 1395 vapp, err := deployVappForTest(vcd, "Test_AddAndRemoveOrgVappNetwork") 1396 check.Assert(err, IsNil) 1397 check.Assert(vapp, NotNil) 1398 1399 orgVdcNetwork, err := vcd.vdc.GetOrgVdcNetworkByName(vcd.config.VCD.Network.Net2, false) 1400 check.Assert(err, IsNil) 1401 check.Assert(orgVdcNetwork, NotNil) 1402 1403 var retainIpMacEnabled = true 1404 1405 vappNetworkSettings := &VappNetworkSettings{ 1406 RetainIpMacEnabled: &retainIpMacEnabled, 1407 } 1408 1409 vappNetworkConfig, err := vapp.AddOrgNetwork(vappNetworkSettings, orgVdcNetwork.OrgVDCNetwork, true) 1410 check.Assert(err, IsNil) 1411 check.Assert(vappNetworkConfig, NotNil) 1412 1413 networkFound := types.VAppNetworkConfiguration{} 1414 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1415 if networkConfig.NetworkName == vcd.config.VCD.Network.Net2 { 1416 networkFound = networkConfig 1417 } 1418 } 1419 1420 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Gateway, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].Gateway) 1421 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Netmask, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].Netmask) 1422 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS1, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].DNS1) 1423 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress) 1424 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress) 1425 1426 check.Assert(*networkFound.Configuration.RetainNetInfoAcrossDeployments, Equals, retainIpMacEnabled) 1427 1428 check.Assert(networkFound.Configuration.ParentNetwork.Name, Equals, vcd.config.VCD.Network.Net2) 1429 1430 err = vapp.Refresh() 1431 check.Assert(err, IsNil) 1432 check.Assert(len(vapp.VApp.NetworkConfigSection.NetworkConfig), Equals, 2) 1433 vappNetworkConfig, err = vapp.RemoveNetwork(vcd.config.VCD.Network.Net2) 1434 check.Assert(err, IsNil) 1435 check.Assert(vappNetworkConfig, NotNil) 1436 1437 isExist := false 1438 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1439 if networkConfig.NetworkName == vcd.config.VCD.Network.Net2 { 1440 isExist = true 1441 } 1442 } 1443 check.Assert(isExist, Equals, false) 1444 1445 task, err := vapp.Delete() 1446 check.Assert(err, IsNil) 1447 err = task.WaitTaskCompletion() 1448 check.Assert(err, IsNil) 1449 check.Assert(task.Task.Status, Equals, "success") 1450 } 1451 1452 func (vcd *TestVCD) Test_UpdateOrgVappNetwork(check *C) { 1453 fmt.Printf("Running: %s\n", check.TestName()) 1454 1455 if vcd.config.VCD.Network.Net1 == "" { 1456 check.Skip("Skipping test because no first network was given") 1457 } 1458 if vcd.config.VCD.Network.Net2 == "" { 1459 check.Skip("Skipping test because no second network was given") 1460 } 1461 1462 vapp, err := deployVappForTest(vcd, "Test_UpdateOrgVappNetwork") 1463 check.Assert(err, IsNil) 1464 check.Assert(vapp, NotNil) 1465 1466 orgVdcNetwork, err := vcd.vdc.GetOrgVdcNetworkByName(vcd.config.VCD.Network.Net2, false) 1467 check.Assert(err, IsNil) 1468 check.Assert(orgVdcNetwork, NotNil) 1469 1470 var retainIpMacEnabled = true 1471 1472 vappNetworkSettings := &VappNetworkSettings{ 1473 RetainIpMacEnabled: &retainIpMacEnabled, 1474 } 1475 1476 vappNetworkConfig, err := vapp.AddOrgNetwork(vappNetworkSettings, orgVdcNetwork.OrgVDCNetwork, true) 1477 check.Assert(err, IsNil) 1478 check.Assert(vappNetworkConfig, NotNil) 1479 1480 networkFound := types.VAppNetworkConfiguration{} 1481 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1482 if networkConfig.NetworkName == vcd.config.VCD.Network.Net2 { 1483 networkFound = networkConfig 1484 } 1485 } 1486 1487 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Gateway, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].Gateway) 1488 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Netmask, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].Netmask) 1489 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS1, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].DNS1) 1490 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress) 1491 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress) 1492 1493 check.Assert(*networkFound.Configuration.RetainNetInfoAcrossDeployments, Equals, retainIpMacEnabled) 1494 1495 check.Assert(networkFound.Configuration.ParentNetwork.Name, Equals, vcd.config.VCD.Network.Net2) 1496 1497 uuid, err := GetUuidFromHref(networkFound.Link.HREF, false) 1498 check.Assert(err, IsNil) 1499 check.Assert(uuid, NotNil) 1500 1501 var updateRetainIpMacEnabled = false 1502 1503 vappNetworkSettings = &VappNetworkSettings{ 1504 ID: uuid, 1505 RetainIpMacEnabled: &updateRetainIpMacEnabled, 1506 } 1507 1508 vappNetworkConfig, err = vapp.UpdateOrgNetwork(vappNetworkSettings, false) 1509 check.Assert(err, IsNil) 1510 check.Assert(vappNetworkConfig, NotNil) 1511 1512 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1513 if networkConfig.NetworkName == vcd.config.VCD.Network.Net2 { 1514 networkFound = networkConfig 1515 } 1516 } 1517 1518 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Gateway, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].Gateway) 1519 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].Netmask, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].Netmask) 1520 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].DNS1, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].DNS1) 1521 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].StartAddress) 1522 check.Assert(networkFound.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress, Equals, orgVdcNetwork.OrgVDCNetwork.Configuration.IPScopes.IPScope[0].IPRanges.IPRange[0].EndAddress) 1523 1524 var emptyFirewallFeatures *types.NetworkFeatures 1525 check.Assert(networkFound.Configuration.Features, Equals, emptyFirewallFeatures) 1526 check.Assert(networkFound.Configuration.Features, Equals, emptyFirewallFeatures) 1527 check.Assert(*networkFound.Configuration.RetainNetInfoAcrossDeployments, Equals, updateRetainIpMacEnabled) 1528 1529 check.Assert(networkFound.Configuration.ParentNetwork.Name, Equals, vcd.config.VCD.Network.Net2) 1530 1531 err = vapp.Refresh() 1532 check.Assert(err, IsNil) 1533 check.Assert(len(vapp.VApp.NetworkConfigSection.NetworkConfig), Equals, 2) 1534 vappNetworkConfig, err = vapp.RemoveNetwork(vcd.config.VCD.Network.Net2) 1535 check.Assert(err, IsNil) 1536 check.Assert(vappNetworkConfig, NotNil) 1537 1538 isExist := false 1539 for _, networkConfig := range vappNetworkConfig.NetworkConfig { 1540 if networkConfig.NetworkName == vcd.config.VCD.Network.Net2 { 1541 isExist = true 1542 } 1543 } 1544 check.Assert(isExist, Equals, false) 1545 1546 task, err := vapp.Delete() 1547 check.Assert(err, IsNil) 1548 err = task.WaitTaskCompletion() 1549 check.Assert(err, IsNil) 1550 check.Assert(task.Task.Status, Equals, "success") 1551 } 1552 1553 // Test_AddNewVMFromMultiVmTemplate creates VM from OVA holding a few VMs 1554 func (vcd *TestVCD) Test_AddNewVMFromMultiVmTemplate(check *C) { 1555 1556 if vcd.skipVappTests { 1557 check.Skip("Skipping test because vapp was not successfully created at setup") 1558 } 1559 1560 if vcd.config.OVA.OvaMultiVmPath == "" && vcd.config.VCD.Catalog.CatalogItemWithMultiVms == "" { 1561 check.Skip("skipping test because ovaMultiVmPath or catalogItemWithMultiVms has to be defined") 1562 } 1563 1564 if vcd.config.VCD.Catalog.VmNameInMultiVmItem == "" { 1565 check.Skip("skipping test because vmNameInMultiVmItem is not defined") 1566 } 1567 1568 // Populate Catalog 1569 catalog, err := vcd.org.GetCatalogByName(vcd.config.VCD.Catalog.NsxtBackedCatalogName, false) 1570 check.Assert(err, IsNil) 1571 check.Assert(catalog, NotNil) 1572 1573 uploadedItem := false 1574 itemName := vcd.config.VCD.Catalog.CatalogItemWithMultiVms 1575 if itemName == "" { 1576 check.Logf("Using `OvaMultiVmPath` '%s' for test. Will upload to use it.", vcd.config.OVA.OvaMultiVmPath) 1577 itemName = check.TestName() 1578 uploadTask, err := catalog.UploadOvf(vcd.config.OVA.OvaMultiVmPath, itemName, "upload from test", 1024) 1579 check.Assert(err, IsNil) 1580 err = uploadTask.WaitTaskCompletion() 1581 check.Assert(err, IsNil) 1582 1583 uploadedItem = true 1584 AddToCleanupList(itemName, "catalogItem", vcd.org.Org.Name+"|"+vcd.config.VCD.Catalog.NsxtBackedCatalogName, check.TestName()) 1585 } else { 1586 check.Logf("Using pre-loaded `CatalogItemWithMultiVms` '%s' for test", itemName) 1587 } 1588 1589 vmInTemplateRecord, err := vcd.nsxtVdc.QueryVappSynchronizedVmTemplate(vcd.config.VCD.Catalog.NsxtBackedCatalogName, itemName, vcd.config.VCD.Catalog.VmNameInMultiVmItem) 1590 check.Assert(err, IsNil) 1591 1592 // Get VAppTemplate 1593 returnedVappTemplate, err := catalog.GetVappTemplateByHref(vmInTemplateRecord.HREF) 1594 check.Assert(err, IsNil) 1595 1596 vapp, err := deployVappForTest(vcd, "Test_AddNewVMFromMultiVmTemplate") 1597 check.Assert(err, IsNil) 1598 check.Assert(vapp, NotNil) 1599 task, err := vapp.AddNewVM(check.TestName(), *returnedVappTemplate, nil, true) 1600 1601 check.Assert(err, IsNil) 1602 1603 err = task.WaitTaskCompletion() 1604 check.Assert(err, IsNil) 1605 check.Assert(task.Task.Status, Equals, "success") 1606 1607 vm, err := vapp.GetVMByName(check.TestName(), true) 1608 check.Assert(err, IsNil) 1609 1610 // Cleanup the created VM 1611 err = vapp.RemoveVM(*vm) 1612 check.Assert(err, IsNil) 1613 task, err = vapp.Delete() 1614 check.Assert(err, IsNil) 1615 err = task.WaitTaskCompletion() 1616 check.Assert(err, IsNil) 1617 check.Assert(task.Task.Status, Equals, "success") 1618 1619 // Remove uploaded catalog item 1620 if uploadedItem { 1621 catalogItem, err := catalog.GetCatalogItemByName(itemName, true) 1622 check.Assert(err, IsNil) 1623 1624 err = catalogItem.Delete() 1625 check.Assert(err, IsNil) 1626 } 1627 } 1628 1629 // Test_AddNewVMWithComputeCapacity creates a new VM in vApp with VM using compute capacity 1630 func (vcd *TestVCD) Test_AddNewVMWithComputeCapacity(check *C) { 1631 vcd.skipIfNotSysAdmin(check) 1632 if vcd.skipVappTests { 1633 check.Skip("Skipping test because vApp was not successfully created at setup") 1634 } 1635 1636 // Find VApp 1637 if vcd.vapp.VApp == nil { 1638 check.Skip("skipping test because no vApp is found") 1639 } 1640 1641 // Populate Catalog 1642 cat, err := vcd.org.GetCatalogByName(vcd.config.VCD.Catalog.Name, true) 1643 check.Assert(err, IsNil) 1644 check.Assert(cat, NotNil) 1645 1646 // Populate Catalog Item 1647 catitem, err := cat.GetCatalogItemByName(vcd.config.VCD.Catalog.CatalogItem, false) 1648 check.Assert(err, IsNil) 1649 check.Assert(catitem, NotNil) 1650 1651 // Get VAppTemplate 1652 vapptemplate, err := catitem.GetVAppTemplate() 1653 check.Assert(err, IsNil) 1654 1655 vapp, err := deployVappForTest(vcd, "Test_AddNewVMWithComputeCapacity") 1656 check.Assert(err, IsNil) 1657 check.Assert(vapp, NotNil) 1658 1659 // Create and assign compute policy 1660 newComputePolicy := &VdcComputePolicy{ 1661 client: vcd.org.client, 1662 VdcComputePolicy: &types.VdcComputePolicy{ 1663 Name: check.TestName() + "_empty", 1664 Description: addrOf("Empty policy created by test"), 1665 }, 1666 } 1667 1668 adminOrg, err := vcd.client.GetAdminOrgByName(vcd.org.Org.Name) 1669 check.Assert(err, IsNil) 1670 check.Assert(adminOrg, NotNil) 1671 1672 adminVdc, err := adminOrg.GetAdminVDCByName(vcd.vdc.Vdc.Name, false) 1673 if adminVdc == nil || err != nil { 1674 vcd.infoCleanup(notFoundMsg, "vdc", vcd.vdc.Vdc.Name) 1675 } 1676 1677 createdPolicy, err := adminOrg.CreateVdcComputePolicy(newComputePolicy.VdcComputePolicy) 1678 check.Assert(err, IsNil) 1679 1680 AddToCleanupList(createdPolicy.VdcComputePolicy.ID, "vdcComputePolicy", vcd.org.Org.Name, "Test_AddNewEmptyVMWithVmComputePolicy") 1681 1682 vdcComputePolicyHref, err := adminOrg.client.OpenApiBuildEndpoint(types.OpenApiPathVersion1_0_0, types.OpenApiEndpointVdcComputePolicies) 1683 check.Assert(err, IsNil) 1684 1685 // Get policy to existing ones (can be only default one) 1686 allAssignedComputePolicies, err := adminVdc.GetAllAssignedVdcComputePolicies(nil) 1687 check.Assert(err, IsNil) 1688 var policyReferences []*types.Reference 1689 for _, assignedPolicy := range allAssignedComputePolicies { 1690 policyReferences = append(policyReferences, &types.Reference{HREF: vdcComputePolicyHref.String() + assignedPolicy.VdcComputePolicy.ID}) 1691 } 1692 policyReferences = append(policyReferences, &types.Reference{HREF: vdcComputePolicyHref.String() + createdPolicy.VdcComputePolicy.ID}) 1693 1694 assignedVdcComputePolicies, err := adminVdc.SetAssignedComputePolicies(types.VdcComputePolicyReferences{VdcComputePolicyReference: policyReferences}) 1695 check.Assert(err, IsNil) 1696 check.Assert(len(allAssignedComputePolicies)+1, Equals, len(assignedVdcComputePolicies.VdcComputePolicyReference)) 1697 // end 1698 1699 var task Task 1700 1701 task, err = vapp.AddNewVMWithComputePolicy(check.TestName(), vapptemplate, nil, nil, createdPolicy.VdcComputePolicy, true) 1702 1703 check.Assert(err, IsNil) 1704 1705 err = task.WaitTaskCompletion() 1706 check.Assert(err, IsNil) 1707 check.Assert(task.Task.Status, Equals, "success") 1708 1709 createdVm, err := vapp.GetVMByName(check.TestName(), true) 1710 check.Assert(err, IsNil) 1711 1712 check.Assert(createdVm.VM.ComputePolicy, NotNil) 1713 check.Assert(createdVm.VM.ComputePolicy.VmSizingPolicy, NotNil) 1714 check.Assert(createdVm.VM.ComputePolicy.VmSizingPolicy.ID, Equals, createdPolicy.VdcComputePolicy.ID) 1715 1716 // Cleanup 1717 err = vapp.RemoveVM(*createdVm) 1718 check.Assert(err, IsNil) 1719 1720 // Ensure network is detached from vApp to avoid conflicts in other tests 1721 task, err = vapp.RemoveAllNetworks() 1722 check.Assert(err, IsNil) 1723 err = task.WaitTaskCompletion() 1724 check.Assert(err, IsNil) 1725 task, err = vapp.Delete() 1726 check.Assert(err, IsNil) 1727 err = task.WaitTaskCompletion() 1728 check.Assert(err, IsNil) 1729 check.Assert(task.Task.Status, Equals, "success") 1730 1731 // cleanup assigned compute policy 1732 var beforeTestPolicyReferences []*types.Reference 1733 for _, assignedPolicy := range allAssignedComputePolicies { 1734 beforeTestPolicyReferences = append(beforeTestPolicyReferences, &types.Reference{HREF: vdcComputePolicyHref.String() + assignedPolicy.VdcComputePolicy.ID}) 1735 } 1736 1737 _, err = adminVdc.SetAssignedComputePolicies(types.VdcComputePolicyReferences{VdcComputePolicyReference: beforeTestPolicyReferences}) 1738 check.Assert(err, IsNil) 1739 } 1740 1741 func (vcd *TestVCD) testUpdateVapp(op string, check *C, vapp *VApp, name, description string, vms []string) { 1742 1743 var err error 1744 switch op { 1745 case "update_desc", "remove_desc": 1746 printVerbose("[%s] testing vapp.UpdateDescription(\"%s\")\n", op, description) 1747 err = vapp.UpdateDescription(description) 1748 check.Assert(err, IsNil) 1749 case "update_both": 1750 printVerbose("[%s] testing vapp.UpdateNameDescription(\"%s\", \"%s\")\n", op, name, description) 1751 err = vapp.UpdateNameDescription(name, description) 1752 check.Assert(err, IsNil) 1753 case "rename": 1754 printVerbose("[%s] testing vapp.Rename(\"%s\")\n", op, name) 1755 err = vapp.Rename(name) 1756 check.Assert(err, IsNil) 1757 default: 1758 check.Assert("unhandled operation", Equals, "true") 1759 } 1760 1761 if name == "" { 1762 name = vapp.VApp.Name 1763 } 1764 1765 // Get a fresh copy of the vApp 1766 vapp, err = vcd.vdc.GetVAppByName(name, true) 1767 check.Assert(err, IsNil) 1768 1769 check.Assert(vapp.VApp.Name, Equals, name) 1770 check.Assert(vapp.VApp.Description, Equals, description) 1771 // check that the VMs still exist after vApp update 1772 for _, vm := range vms { 1773 printVerbose("checking VM %s\n", vm) 1774 _, err = vapp.GetVMByName(vm, true) 1775 check.Assert(err, IsNil) 1776 } 1777 } 1778 1779 func (vcd *TestVCD) Test_UpdateVappNameDescription(check *C) { 1780 1781 fmt.Printf("Running: %s\n", check.TestName()) 1782 1783 vappName := check.TestName() 1784 vappDescription := vappName + " description" 1785 newVappName := vappName + "_new" 1786 1787 newVappDescription := vappName + " desc" 1788 // Compose VApp 1789 vapp, err := makeEmptyVapp(vcd.vdc, vappName, vappDescription) 1790 check.Assert(err, IsNil) 1791 AddToCleanupList(vappName, "vapp", "", "Test_RenameVapp") 1792 1793 check.Assert(vapp.VApp.Name, Equals, vappName) 1794 check.Assert(vapp.VApp.Description, Equals, vappDescription) 1795 1796 // Need a slight delay for the vApp to get the links that are needed for renaming 1797 time.Sleep(time.Second) 1798 1799 // change description 1800 vcd.testUpdateVapp("update_desc", check, vapp, "", newVappDescription, nil) 1801 1802 // remove description 1803 vcd.testUpdateVapp("remove_desc", check, vapp, vappName, "", nil) 1804 1805 // restore original 1806 vcd.testUpdateVapp("update_both", check, vapp, vappName, vappDescription, nil) 1807 1808 // change name 1809 vcd.testUpdateVapp("rename", check, vapp, newVappName, vappDescription, nil) 1810 AddToCleanupList(newVappName, "vapp", "", "Test_RenameVapp") 1811 // restore original 1812 vcd.testUpdateVapp("update_both", check, vapp, vappName, vappDescription, nil) 1813 1814 // Add two VMs 1815 _, err = makeEmptyVm(vapp, "vm1") 1816 check.Assert(err, IsNil) 1817 _, err = makeEmptyVm(vapp, "vm2") 1818 check.Assert(err, IsNil) 1819 1820 vms := []string{"vm1", "vm2"} 1821 // change description after adding VMs 1822 vcd.testUpdateVapp("update_desc", check, vapp, "", newVappDescription, vms) 1823 vcd.testUpdateVapp("remove_desc", check, vapp, vappName, "", nil) 1824 // restore original 1825 vcd.testUpdateVapp("update_both", check, vapp, vappName, vappDescription, vms) 1826 1827 // change name after adding VMs 1828 vcd.testUpdateVapp("rename", check, vapp, newVappName, vappDescription, vms) 1829 // restore original 1830 vcd.testUpdateVapp("update_both", check, vapp, vappName, vappDescription, vms) 1831 1832 // Remove vApp 1833 err = deleteVapp(vcd, vappName) 1834 check.Assert(err, IsNil) 1835 } 1836 1837 func (vcd *TestVCD) Test_Vapp_LeaseUpdate(check *C) { 1838 fmt.Printf("Running: %s\n", check.TestName()) 1839 1840 if vcd.config.VCD.Org == "" { 1841 check.Skip("Organization not set in configuration") 1842 } 1843 org, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org) 1844 check.Assert(err, IsNil) 1845 orgVappLease := org.AdminOrg.OrgSettings.OrgVAppLeaseSettings 1846 1847 vappName := check.TestName() 1848 vappDescription := vappName + " description" 1849 1850 vapp, err := makeEmptyVapp(vcd.vdc, vappName, vappDescription) 1851 check.Assert(err, IsNil) 1852 AddToCleanupList(vappName, "vapp", "", "Test_Vapp_GetLease") 1853 1854 lease, err := vapp.GetLease() 1855 check.Assert(err, IsNil) 1856 check.Assert(lease, NotNil) 1857 1858 // Check that lease in vApp is the same as the default lease in the organization 1859 check.Assert(lease.StorageLeaseInSeconds, Equals, *orgVappLease.StorageLeaseSeconds) 1860 check.Assert(lease.DeploymentLeaseInSeconds, Equals, *orgVappLease.DeploymentLeaseSeconds) 1861 if testVerbose { 1862 fmt.Printf("lease deployment at Org level: %d\n", *orgVappLease.DeploymentLeaseSeconds) 1863 fmt.Printf("lease storage at Org level: %d\n", *orgVappLease.StorageLeaseSeconds) 1864 fmt.Printf("lease deployment in vApp before: %d\n", lease.DeploymentLeaseInSeconds) 1865 fmt.Printf("lease storage in vApp before: %d\n", lease.StorageLeaseInSeconds) 1866 } 1867 secondsInDay := 60 * 60 * 24 1868 1869 // Set lease to 90 days deployment, 7 days storage 1870 err = vapp.RenewLease(secondsInDay*90, secondsInDay*7) 1871 check.Assert(err, IsNil) 1872 1873 // Make sure the vApp internal values were updated 1874 check.Assert(vapp.VApp.LeaseSettingsSection.DeploymentLeaseInSeconds, Equals, secondsInDay*90) 1875 check.Assert(vapp.VApp.LeaseSettingsSection.StorageLeaseInSeconds, Equals, secondsInDay*7) 1876 1877 newLease, err := vapp.GetLease() 1878 check.Assert(err, IsNil) 1879 check.Assert(newLease, NotNil) 1880 check.Assert(newLease.DeploymentLeaseInSeconds, Equals, secondsInDay*90) 1881 check.Assert(newLease.StorageLeaseInSeconds, Equals, secondsInDay*7) 1882 1883 if testVerbose { 1884 fmt.Printf("lease deployment in vApp after: %d\n", newLease.DeploymentLeaseInSeconds) 1885 fmt.Printf("lease storage in vApp after: %d\n", newLease.StorageLeaseInSeconds) 1886 } 1887 1888 // Set lease to "never expires", which defaults to the Org maximum lease if the Org itself has lower limits 1889 err = vapp.RenewLease(0, 0) 1890 check.Assert(err, IsNil) 1891 1892 check.Assert(vapp.VApp.LeaseSettingsSection.DeploymentLeaseInSeconds, Equals, *orgVappLease.DeploymentLeaseSeconds) 1893 1894 check.Assert(vapp.VApp.LeaseSettingsSection.StorageLeaseInSeconds, Equals, *orgVappLease.StorageLeaseSeconds) 1895 1896 if *orgVappLease.DeploymentLeaseSeconds != 0 { 1897 // Check that setting a lease higher than allowed by the Org settings results in the defaults lease being set 1898 err = vapp.RenewLease(*orgVappLease.DeploymentLeaseSeconds+3600, 1899 *orgVappLease.StorageLeaseSeconds+3600) 1900 check.Assert(err, IsNil) 1901 1902 check.Assert(vapp.VApp.LeaseSettingsSection.DeploymentLeaseInSeconds, Equals, *orgVappLease.DeploymentLeaseSeconds) 1903 check.Assert(vapp.VApp.LeaseSettingsSection.StorageLeaseInSeconds, Equals, *orgVappLease.StorageLeaseSeconds) 1904 } 1905 1906 task, err := vapp.Delete() 1907 check.Assert(err, IsNil) 1908 err = task.WaitTaskCompletion() 1909 check.Assert(err, IsNil) 1910 }