github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/vdc_test.go (about) 1 //go:build vdc || 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 "reflect" 12 "strings" 13 14 . "gopkg.in/check.v1" 15 16 "github.com/vmware/go-vcloud-director/v2/types/v56" 17 ) 18 19 func (vcd *TestVCD) Test_FindVDCNetwork(check *C) { 20 if vcd.config.VCD.Network.Net1 == "" { 21 check.Skip("Skipping test because no network was given") 22 } 23 fmt.Printf("Running: %s\n", check.TestName()) 24 25 net, err := vcd.vdc.GetOrgVdcNetworkByName(vcd.config.VCD.Network.Net1, true) 26 27 check.Assert(err, IsNil) 28 check.Assert(net, NotNil) 29 check.Assert(net.OrgVDCNetwork.Name, Equals, vcd.config.VCD.Network.Net1) 30 check.Assert(net.OrgVDCNetwork.HREF, Not(Equals), "") 31 32 // find Invalid Network 33 net, err = vcd.vdc.GetOrgVdcNetworkByName("INVALID", false) 34 check.Assert(err, NotNil) 35 check.Assert(net, IsNil) 36 } 37 38 // Tests Network retrieval by name, by ID, and by a combination of name and ID 39 func (vcd *TestVCD) Test_GetOrgVDCNetwork(check *C) { 40 41 if vcd.config.VCD.Org == "" { 42 check.Skip("Test_GetOrgVDCNetwork: Org name not given") 43 return 44 } 45 if vcd.config.VCD.Vdc == "" { 46 check.Skip("Test_GetOrgVDCNetwork: VDC name not given") 47 return 48 } 49 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 50 check.Assert(err, IsNil) 51 check.Assert(org, NotNil) 52 53 vdc, err := org.GetVDCByName(vcd.config.VCD.Vdc, false) 54 check.Assert(err, IsNil) 55 check.Assert(vdc, NotNil) 56 57 getByName := func(name string, refresh bool) (genericEntity, error) { 58 return vdc.GetOrgVdcNetworkByName(name, refresh) 59 } 60 getById := func(id string, refresh bool) (genericEntity, error) { return vdc.GetOrgVdcNetworkById(id, refresh) } 61 getByNameOrId := func(id string, refresh bool) (genericEntity, error) { 62 return vdc.GetOrgVdcNetworkByNameOrId(id, refresh) 63 } 64 65 var def = getterTestDefinition{ 66 parentType: "Vdc", 67 parentName: vcd.config.VCD.Vdc, 68 entityType: "OrgVDCNetwork", 69 entityName: vcd.config.VCD.Network.Net1, 70 getByName: getByName, 71 getById: getById, 72 getByNameOrId: getByNameOrId, 73 } 74 vcd.testFinderGetGenericEntity(def, check) 75 } 76 77 func (vcd *TestVCD) Test_NewVdc(check *C) { 78 79 fmt.Printf("Running: %s\n", check.TestName()) 80 err := vcd.vdc.Refresh() 81 check.Assert(err, IsNil) 82 83 check.Assert(vcd.vdc.Vdc.Link[0].Rel, Equals, "up") 84 check.Assert(vcd.vdc.Vdc.Link[0].Type, Equals, "application/vnd.vmware.vcloud.org+xml") 85 86 // fmt.Printf("allocation mem %#v\n\n",vcd.vdc.Vdc.AllocationModel) 87 for _, resource := range vcd.vdc.Vdc.ResourceEntities[0].ResourceEntity { 88 89 // fmt.Printf("res %#v\n",resource) 90 check.Assert(resource.Name, Not(Equals), "") 91 check.Assert(resource.Type, Not(Equals), "") 92 check.Assert(resource.HREF, Not(Equals), "") 93 } 94 95 // TODO: find which values are acceptable for AllocationModel 96 // check.Assert(vcd.vdc.Vdc.AllocationModel, Equals, "AllocationPool") 97 98 /* 99 // TODO: Find the conditions that define valid ComputeCapacity 100 for _, v := range vcd.vdc.Vdc.ComputeCapacity { 101 check.Assert(v.CPU.Units, Equals, "MHz") 102 check.Assert(v.CPU.Allocated, Equals, int64(30000)) 103 check.Assert(v.CPU.Limit, Equals, int64(30000)) 104 check.Assert(v.CPU.Reserved, Equals, int64(15000)) 105 check.Assert(v.CPU.Used, Equals, int64(0)) 106 check.Assert(v.CPU.Overhead, Equals, int64(0)) 107 check.Assert(v.Memory.Units, Equals, "MB") 108 check.Assert(v.Memory.Allocated, Equals, int64(61440)) 109 check.Assert(v.Memory.Limit, Equals, int64(61440)) 110 check.Assert(v.Memory.Reserved, Equals, int64(61440)) 111 check.Assert(v.Memory.Used, Equals, int64(6144)) 112 check.Assert(v.Memory.Overhead, Equals, int64(95)) 113 } 114 */ 115 116 // Skipping this check, as we can't define the existence of a given vApp template beforehand 117 /* 118 check.Assert(vcd.vdc.Vdc.ResourceEntities[0].ResourceEntity[0].Name, Equals, QtVappTemplate) 119 check.Assert(vcd.vdc.Vdc.ResourceEntities[0].ResourceEntity[0].Type, Equals, "application/vnd.vmware.vcloud.vAppTemplate+xml") 120 check.Assert(vcd.vdc.Vdc.ResourceEntities[0].ResourceEntity[0].HREF, Equals, "http://localhost:4444/api/vAppTemplate/vappTemplate-22222222-2222-2222-2222-222222222222") 121 */ 122 123 for _, availableNetworks := range vcd.vdc.Vdc.AvailableNetworks { 124 for _, v2 := range availableNetworks.Network { 125 check.Assert(v2.Name, Not(Equals), "") 126 check.Assert(v2.Type, Equals, "application/vnd.vmware.vcloud.network+xml") 127 check.Assert(v2.HREF, Not(Equals), "") 128 } 129 } 130 131 /* 132 133 // Skipping this check, as we don't have precise terms of comparison for this entity 134 check.Assert(vcd.vdc.Vdc.NicQuota, Equals, 0) 135 check.Assert(vcd.vdc.Vdc.NetworkQuota, Equals, 20) 136 check.Assert(vcd.vdc.Vdc.UsedNetworkCount, Equals, 0) 137 check.Assert(vcd.vdc.Vdc.VMQuota, Equals, 0) 138 check.Assert(vcd.vdc.Vdc.IsEnabled, Equals, true) 139 */ 140 141 for _, v2 := range vcd.vdc.Vdc.VdcStorageProfiles.VdcStorageProfile { 142 check.Assert(v2.Type, Equals, "application/vnd.vmware.vcloud.vdcStorageProfile+xml") 143 check.Assert(v2.HREF, Not(Equals), "") 144 } 145 146 } 147 148 // Test_GetVDCHardwareVersion tests hardware version fetching functionality 149 func (vcd *TestVCD) Test_GetVDCHardwareVersion(check *C) { 150 err := vcd.vdc.Refresh() 151 check.Assert(err, IsNil) 152 153 // vmx-18 is the latest version supported by 10.3.0, the oldest version we support. 154 hwVersion, err := vcd.vdc.GetHardwareVersion("vmx-18") 155 check.Assert(err, IsNil) 156 check.Assert(hwVersion, NotNil) 157 158 check.Assert(hwVersion.Name, Equals, "vmx-18") 159 160 os, err := vcd.vdc.FindOsFromId(hwVersion, "sles10_64Guest") 161 check.Assert(err, IsNil) 162 check.Assert(os, NotNil) 163 164 check.Assert(os.InternalName, Equals, "sles10_64Guest") 165 check.Assert(os.Name, Equals, "SUSE Linux Enterprise 10 (64-bit)") 166 } 167 168 // Tests ComposeVApp with given parameters in the config file. 169 // Throws an error if networks, catalog, catalog item, and 170 // storage preference are omitted from the config file. 171 func (vcd *TestVCD) Test_ComposeVApp(check *C) { 172 if vcd.config.VCD.Network.Net1 == "" { 173 check.Skip("Skipping test because no network was given") 174 } 175 if vcd.skipVappTests { 176 check.Skip("Skipping test because vapp wasn't properly created") 177 } 178 fmt.Printf("Running: %s\n", check.TestName()) 179 180 // Populate OrgVDCNetwork 181 networks := []*types.OrgVDCNetwork{} 182 net, err := vcd.vdc.GetOrgVdcNetworkByName(vcd.config.VCD.Network.Net1, false) 183 check.Assert(err, IsNil) 184 networks = append(networks, net.OrgVDCNetwork) 185 check.Assert(err, IsNil) 186 // Populate Catalog 187 cat, err := vcd.org.GetCatalogByName(vcd.config.VCD.Catalog.Name, false) 188 check.Assert(err, IsNil) 189 check.Assert(cat, NotNil) 190 // Populate Catalog Item 191 catitem, err := cat.GetCatalogItemByName(vcd.config.VCD.Catalog.CatalogItem, false) 192 check.Assert(err, IsNil) 193 check.Assert(catitem, NotNil) 194 // Get VAppTemplate 195 vapptemplate, err := catitem.GetVAppTemplate() 196 check.Assert(err, IsNil) 197 // Get StorageProfileReference 198 storageprofileref, err := vcd.vdc.FindStorageProfileReference(vcd.config.VCD.StorageProfile.SP1) 199 check.Assert(err, IsNil) 200 // Compose VApp 201 task, err := vcd.vdc.ComposeVApp(networks, vapptemplate, storageprofileref, TestComposeVapp, TestComposeVappDesc, true) 202 check.Assert(err, IsNil) 203 check.Assert(task.Task.Tasks, NotNil) 204 check.Assert(len(task.Task.Tasks.Task) > 0, Equals, true) 205 check.Assert(task.Task.Tasks.Task[0].OperationName, Equals, "vdcComposeVapp") 206 // Get VApp 207 vapp, err := vcd.vdc.GetVAppByName(TestComposeVapp, true) 208 check.Assert(err, IsNil) 209 // After a successful creation, the entity is added to the cleanup list. 210 // If something fails after this point, the entity will be removed 211 AddToCleanupList(TestComposeVapp, "vapp", "", "Test_ComposeVApp") 212 // Once the operation is successful, we won't trigger a failure 213 // until after the vApp deletion 214 check.Check(vapp.VApp.Name, Equals, TestComposeVapp) 215 check.Check(vapp.VApp.Description, Equals, TestComposeVappDesc) 216 217 vapp_status, err := vapp.GetStatus() 218 check.Check(err, IsNil) 219 check.Check(vapp_status, Equals, "UNRESOLVED") 220 // Let the VApp creation complete 221 err = task.WaitTaskCompletion() 222 if err != nil { 223 panic(err) 224 } 225 err = vapp.BlockWhileStatus("UNRESOLVED", vapp.client.MaxRetryTimeout) 226 check.Check(err, IsNil) 227 vapp_status, err = vapp.GetStatus() 228 check.Check(err, IsNil) 229 check.Check(vapp_status, Equals, "POWERED_OFF") 230 // Deleting VApp 231 task, err = vapp.Delete() 232 check.Assert(err, IsNil) 233 err = task.WaitTaskCompletion() 234 if err != nil { 235 panic(err) 236 } 237 check.Assert(err, IsNil) 238 noSuchVapp, err := vcd.vdc.GetVAppByName(TestComposeVapp, true) 239 check.Assert(err, NotNil) 240 check.Assert(noSuchVapp, IsNil) 241 242 } 243 244 func (vcd *TestVCD) Test_FindVApp(check *C) { 245 246 if vcd.skipVappTests { 247 check.Skip("Skipping test because vapp was not successfully created at setup") 248 } 249 250 if vcd.vapp.VApp == nil { 251 check.Skip("No vApp provided") 252 } 253 firstVapp, err := vcd.vdc.GetVAppByName(vcd.vapp.VApp.Name, false) 254 255 check.Assert(err, IsNil) 256 257 secondVapp, err := vcd.vdc.GetVAppById(firstVapp.VApp.ID, false) 258 259 check.Assert(err, IsNil) 260 261 check.Assert(secondVapp.VApp.Name, Equals, firstVapp.VApp.Name) 262 check.Assert(secondVapp.VApp.HREF, Equals, firstVapp.VApp.HREF) 263 } 264 265 // Tests function QueryVM by searching vm created 266 // by test suite 267 func (vcd *TestVCD) Test_QueryVM(check *C) { 268 269 if vcd.skipVappTests { 270 check.Skip("Skipping test because vapp was not successfully created at setup") 271 } 272 273 if vcd.vapp.VApp == nil { 274 check.Skip("No Vapp provided") 275 } 276 277 // Find VM 278 vapp := vcd.findFirstVapp() 279 _, vmName := vcd.findFirstVm(vapp) 280 if vmName == "" { 281 check.Skip("skipping test because no VM is found") 282 } 283 vm, err := vcd.vdc.QueryVM(vcd.vapp.VApp.Name, vmName) 284 check.Assert(err, IsNil) 285 286 check.Assert(vm.VM.Name, Equals, vmName) 287 288 if vcd.client.Client.IsSysAdmin { 289 check.Assert(vm.VM.Moref, Not(Equals), "") 290 check.Assert(strings.HasPrefix(vm.VM.Moref, "vm-"), Equals, true) 291 } 292 } 293 294 func init() { 295 testingTags["vdc"] = "vdc_test.go" 296 } 297 298 // Tests Edge Gateway retrieval by name, by ID, and by a combination of name and ID 299 func (vcd *TestVCD) Test_GetEdgeGateway(check *C) { 300 301 if vcd.config.VCD.Org == "" { 302 check.Skip("Test_GetEdgeGateway: Org name not given") 303 return 304 } 305 if vcd.config.VCD.Vdc == "" { 306 check.Skip("Test_GetEdgeGateway: VDC name not given") 307 return 308 } 309 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 310 check.Assert(err, IsNil) 311 check.Assert(org, NotNil) 312 313 vdc, err := org.GetVDCByName(vcd.config.VCD.Vdc, false) 314 check.Assert(err, IsNil) 315 check.Assert(vdc, NotNil) 316 317 getByName := func(name string, refresh bool) (genericEntity, error) { 318 return vdc.GetEdgeGatewayByName(name, refresh) 319 } 320 getById := func(id string, refresh bool) (genericEntity, error) { return vdc.GetEdgeGatewayById(id, refresh) } 321 getByNameOrId := func(id string, refresh bool) (genericEntity, error) { 322 return vdc.GetEdgeGatewayByNameOrId(id, refresh) 323 } 324 325 var def = getterTestDefinition{ 326 parentType: "Vdc", 327 parentName: vcd.config.VCD.Vdc, 328 entityType: "EdgeGateway", 329 entityName: vcd.config.VCD.EdgeGateway, 330 getByName: getByName, 331 getById: getById, 332 getByNameOrId: getByNameOrId, 333 } 334 vcd.testFinderGetGenericEntity(def, check) 335 } 336 337 // Tests vApp retrieval by name, by ID, and by a combination of name and ID 338 func (vcd *TestVCD) Test_GetVApp(check *C) { 339 340 if vcd.skipVappTests { 341 check.Skip("Skipping test because vapp wasn't properly created") 342 } 343 if vcd.config.VCD.Org == "" { 344 check.Skip("Test_GetVapp: Org name not given") 345 return 346 } 347 if vcd.config.VCD.Vdc == "" { 348 check.Skip("Test_GetVapp: VDC name not given") 349 return 350 } 351 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 352 check.Assert(err, IsNil) 353 check.Assert(org, NotNil) 354 355 vdc, err := org.GetVDCByName(vcd.config.VCD.Vdc, false) 356 check.Assert(err, IsNil) 357 check.Assert(vdc, NotNil) 358 359 getByName := func(name string, refresh bool) (genericEntity, error) { 360 return vdc.GetVAppByName(name, refresh) 361 } 362 getById := func(id string, refresh bool) (genericEntity, error) { return vdc.GetVAppById(id, refresh) } 363 getByNameOrId := func(id string, refresh bool) (genericEntity, error) { 364 return vdc.GetVAppByNameOrId(id, refresh) 365 } 366 367 var def = getterTestDefinition{ 368 parentType: "Vdc", 369 parentName: vcd.config.VCD.Vdc, 370 entityType: "VApp", 371 entityName: TestSetUpSuite, 372 getByName: getByName, 373 getById: getById, 374 getByNameOrId: getByNameOrId, 375 } 376 vcd.testFinderGetGenericEntity(def, check) 377 } 378 379 // TestGetVappList tests all methods that retrieve a list of vApps 380 // vdc.GetVappList 381 // adminVdc.GetVappList 382 // client.QueryVappList 383 // client.SearchByFilter 384 func (vcd *TestVCD) TestGetVappList(check *C) { 385 386 if vcd.skipVappTests { 387 check.Skip("Skipping test because vapp wasn't properly created") 388 } 389 if vcd.config.VCD.Org == "" { 390 check.Skip("Test_GetVapp: Org name not given") 391 return 392 } 393 if vcd.config.VCD.Vdc == "" { 394 check.Skip("Test_GetVapp: VDC name not given") 395 return 396 } 397 vapp := vcd.findFirstVapp() 398 if vapp == (VApp{}) { 399 check.Skip("no vApp found") 400 return 401 } 402 403 org, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org) 404 check.Assert(err, IsNil) 405 check.Assert(org, NotNil) 406 407 vdc, err := org.GetVDCByName(vcd.config.VCD.Vdc, false) 408 check.Assert(err, IsNil) 409 check.Assert(vdc, NotNil) 410 adminVdc, err := org.GetAdminVDCByName(vcd.config.VCD.Vdc, false) 411 check.Assert(err, IsNil) 412 check.Assert(adminVdc, NotNil) 413 414 // Get the vApp list from VDC 415 vappList := vdc.GetVappList() 416 check.Assert(vappList, NotNil) 417 check.Assert(len(vappList), Not(Equals), 0) 418 419 // Get the vApp list from admin VDC 420 vappAdminList := adminVdc.GetVappList() 421 check.Assert(vappAdminList, NotNil) 422 check.Assert(len(vappAdminList), Not(Equals), 0) 423 check.Assert(len(vappAdminList), Equals, len(vappList)) 424 425 // Check that the known vApp is found in both lists 426 foundVappInList := false 427 foundVappInAdminList := false 428 foundVappInQueryList := false 429 for _, ref := range vappList { 430 if ref.ID == vapp.VApp.ID { 431 foundVappInList = true 432 } 433 } 434 for _, ref := range vappAdminList { 435 if ref.ID == vapp.VApp.ID { 436 foundVappInAdminList = true 437 } 438 } 439 check.Assert(foundVappInList, Equals, true) 440 check.Assert(foundVappInAdminList, Equals, true) 441 442 // Get the vApp list with a query (returns all vApps visible to user, non only the ones withing the current VDC) 443 queryVappList, err := vcd.client.Client.QueryVappList() 444 check.Assert(err, IsNil) 445 check.Assert(queryVappList, NotNil) 446 447 for _, qItem := range queryVappList { 448 if qItem.HREF == vapp.VApp.HREF { 449 foundVappInQueryList = true 450 } 451 } 452 check.Assert(foundVappInQueryList, Equals, true) 453 454 // Use the search engine to find the known vApp 455 criteria := NewFilterDef() 456 err = criteria.AddFilter(types.FilterNameRegex, TestSetUpSuite) 457 check.Assert(err, IsNil) 458 queryType := vcd.client.Client.GetQueryType(types.QtVapp) 459 queryItems, _, err := vcd.client.Client.SearchByFilter(queryType, criteria) 460 check.Assert(err, IsNil) 461 check.Assert(queryItems, NotNil) 462 check.Assert(len(queryItems), Not(Equals), 0) 463 check.Assert(queryItems[0].GetHref(), Equals, vapp.VApp.HREF) 464 465 // Use the search engine to also find the known VM 466 vm, vmName := vcd.findFirstVm(vapp) 467 check.Assert(vmName, Not(Equals), "") 468 check.Assert(vm.HREF, Not(Equals), "") 469 criteria = NewFilterDef() 470 err = criteria.AddFilter(types.FilterNameRegex, vmName) 471 check.Assert(err, IsNil) 472 err = criteria.AddFilter(types.FilterParent, vapp.VApp.Name) 473 check.Assert(err, IsNil) 474 queryType = vcd.client.Client.GetQueryType(types.QtVm) 475 queryItems, _, err = vcd.client.Client.SearchByFilter(queryType, criteria) 476 check.Assert(err, IsNil) 477 check.Assert(queryItems, NotNil) 478 check.Assert(len(queryItems), Not(Equals), 0) 479 check.Assert(vm.HREF, Equals, queryItems[0].GetHref()) 480 } 481 482 // TestGetVdcCapabilities attempts to get a list of VDC capabilities 483 func (vcd *TestVCD) TestGetVdcCapabilities(check *C) { 484 vdcCapabilities, err := vcd.vdc.GetCapabilities() 485 check.Assert(err, IsNil) 486 check.Assert(vdcCapabilities, NotNil) 487 check.Assert(len(vdcCapabilities) > 0, Equals, true) 488 } 489 490 func (vcd *TestVCD) TestVdcIsNsxt(check *C) { 491 skipNoNsxtConfiguration(vcd, check) 492 check.Assert(vcd.nsxtVdc.IsNsxt(), Equals, true) 493 if vcd.vdc != nil { 494 check.Assert(vcd.vdc.IsNsxt(), Equals, false) 495 } 496 } 497 498 func (vcd *TestVCD) TestVdcIsNsxv(check *C) { 499 check.Assert(vcd.vdc.IsNsxv(), Equals, true) 500 // retrieve the same VDC as AdminVdc, to test the corresponding function 501 adminOrg, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org) 502 check.Assert(err, IsNil) 503 adminVdc, err := adminOrg.GetVDCByName(vcd.vdc.Vdc.Name, false) 504 check.Assert(err, IsNil) 505 check.Assert(adminVdc.IsNsxv(), Equals, true) 506 // if NSX-T is configured, we also check a NSX-T VDC 507 if vcd.nsxtVdc != nil { 508 check.Assert(vcd.nsxtVdc.IsNsxv(), Equals, false) 509 nsxtAdminVdc, err := adminOrg.GetAdminVDCByName(vcd.config.VCD.Nsxt.Vdc, false) 510 check.Assert(err, IsNil) 511 check.Assert(nsxtAdminVdc.IsNsxv(), Equals, false) 512 } 513 } 514 515 func (vcd *TestVCD) TestCreateRawVapp(check *C) { 516 org, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org) 517 check.Assert(err, IsNil) 518 check.Assert(org, NotNil) 519 520 vdc, err := org.GetVDCByName(vcd.config.VCD.Vdc, false) 521 check.Assert(err, IsNil) 522 check.Assert(vdc, NotNil) 523 524 name := check.TestName() 525 description := "test compose raw app" 526 vapp, err := vdc.CreateRawVApp(name, description) 527 check.Assert(err, IsNil) 528 AddToCleanupList(name, "vapp", vdc.Vdc.Name, name) 529 530 check.Assert(vapp.VApp.Name, Equals, name) 531 check.Assert(vapp.VApp.Description, Equals, description) 532 task, err := vapp.Delete() 533 check.Assert(err, IsNil) 534 err = task.WaitTaskCompletion() 535 check.Assert(err, IsNil) 536 } 537 538 func (vcd *TestVCD) TestSetControlAccess(check *C) { 539 // Set VDC sharing to everyone 540 org, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org) 541 check.Assert(err, IsNil) 542 check.Assert(org, NotNil) 543 544 vdc, err := org.GetVDCByName(vcd.config.VCD.Vdc, false) 545 check.Assert(err, IsNil) 546 check.Assert(vdc, NotNil) 547 548 readControlAccessParams, err := vdc.SetControlAccess(true, "ReadOnly", nil, true) 549 check.Assert(err, IsNil) 550 check.Assert(readControlAccessParams, NotNil) 551 check.Assert(readControlAccessParams.IsSharedToEveryone, Equals, true) 552 check.Assert(*readControlAccessParams.EveryoneAccessLevel, Equals, "ReadOnly") 553 check.Assert(readControlAccessParams.AccessSettings, IsNil) // If not shared with users/groups, this will be nil 554 555 // Set VDC sharing to one user 556 orgUserRef := org.AdminOrg.Users.User[0] 557 user, err := org.GetUserByName(orgUserRef.Name, false) 558 check.Assert(err, IsNil) 559 check.Assert(user, NotNil) 560 561 accessSettings := []*types.AccessSetting{ 562 { 563 AccessLevel: "ReadOnly", 564 Subject: &types.LocalSubject{ 565 HREF: user.User.Href, 566 Name: user.User.Name, 567 Type: user.User.Type, 568 }, 569 }, 570 } 571 572 readControlAccessParams, err = vdc.SetControlAccess(false, "", accessSettings, true) 573 check.Assert(err, IsNil) 574 check.Assert(readControlAccessParams, NotNil) 575 check.Assert(len(readControlAccessParams.AccessSettings.AccessSetting) > 0, Equals, true) 576 check.Assert(assertVDCAccessSettings(accessSettings, readControlAccessParams.AccessSettings.AccessSetting), IsNil) 577 578 // Check that fail if both isSharedToEveryone and accessSettings is passed 579 readControlAccessParams, err = vdc.SetControlAccess(true, "ReadOnly", accessSettings, true) 580 check.Assert(err, NotNil) 581 check.Assert(readControlAccessParams, IsNil) 582 583 // Check DeleteControlAccess 584 readControlAccessParams, err = vdc.DeleteControlAccess(true) 585 check.Assert(err, IsNil) 586 check.Assert(readControlAccessParams.IsSharedToEveryone, Equals, false) 587 check.Assert(readControlAccessParams.AccessSettings, IsNil) 588 } 589 590 func assertVDCAccessSettings(wanted, received []*types.AccessSetting) error { 591 if len(wanted) != len(received) { 592 return fmt.Errorf("wanted and received access settings are not the same length") 593 } 594 for _, receivedAccessSetting := range received { 595 for i, wantedAccessSetting := range wanted { 596 if reflect.DeepEqual(*wantedAccessSetting.Subject, *receivedAccessSetting.Subject) && (wantedAccessSetting.AccessLevel == receivedAccessSetting.AccessLevel) { 597 break 598 } 599 if i == len(wanted)-1 { 600 return fmt.Errorf("access settings for user %s were not found or are not correct", wantedAccessSetting.Subject.Name) 601 } 602 } 603 } 604 return nil 605 } 606 607 // TestVAppTemplateRetrieval tests that VDC receiver objects can search vApp Templates successfully. 608 func (vcd *TestVCD) TestVAppTemplateRetrieval(check *C) { 609 fmt.Printf("Running: %s\n", check.TestName()) 610 611 if vcd.config.VCD.Catalog.NsxtCatalogItem == "" { 612 check.Skip(fmt.Sprintf("%s: Catalog Item not given. Test can't proceed", check.TestName())) 613 } 614 615 org, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org) 616 check.Assert(err, IsNil) 617 check.Assert(org, NotNil) 618 619 vdc, err := org.GetVDCByName(vcd.config.VCD.Nsxt.Vdc, false) 620 check.Assert(err, IsNil) 621 check.Assert(vdc, NotNil) 622 623 // Test cases 624 vAppTemplate, err := vdc.GetVAppTemplateByName(vcd.config.VCD.Catalog.NsxtCatalogItem) 625 check.Assert(err, IsNil) 626 check.Assert(vAppTemplate.VAppTemplate.Name, Equals, vcd.config.VCD.Catalog.NsxtCatalogItem) 627 if vcd.config.VCD.Catalog.CatalogItemDescription != "" { 628 check.Assert(strings.Contains(vAppTemplate.VAppTemplate.Description, vcd.config.VCD.Catalog.CatalogItemDescription), Equals, true) 629 } 630 631 vAppTemplate, err = vcd.client.GetVAppTemplateById(vAppTemplate.VAppTemplate.ID) 632 check.Assert(err, IsNil) 633 check.Assert(vAppTemplate.VAppTemplate.Name, Equals, vcd.config.VCD.Catalog.NsxtCatalogItem) 634 if vcd.config.VCD.Catalog.CatalogItemDescription != "" { 635 check.Assert(strings.Contains(vAppTemplate.VAppTemplate.Description, vcd.config.VCD.Catalog.CatalogItemDescription), Equals, true) 636 } 637 638 vAppTemplate, err = vdc.GetVAppTemplateByNameOrId(vAppTemplate.VAppTemplate.ID, false) 639 check.Assert(err, IsNil) 640 check.Assert(vAppTemplate.VAppTemplate.Name, Equals, vcd.config.VCD.Catalog.NsxtCatalogItem) 641 if vcd.config.VCD.Catalog.CatalogItemDescription != "" { 642 check.Assert(strings.Contains(vAppTemplate.VAppTemplate.Description, vcd.config.VCD.Catalog.CatalogItemDescription), Equals, true) 643 } 644 645 vAppTemplate, err = vdc.GetVAppTemplateByNameOrId(vcd.config.VCD.Catalog.NsxtCatalogItem, false) 646 check.Assert(err, IsNil) 647 check.Assert(vAppTemplate.VAppTemplate.Name, Equals, vcd.config.VCD.Catalog.NsxtCatalogItem) 648 if vcd.config.VCD.Catalog.CatalogItemDescription != "" { 649 check.Assert(strings.Contains(vAppTemplate.VAppTemplate.Description, vcd.config.VCD.Catalog.CatalogItemDescription), Equals, true) 650 } 651 652 vAppTemplateRecord, err := vcd.client.QuerySynchronizedVAppTemplateById(vAppTemplate.VAppTemplate.ID) 653 check.Assert(err, IsNil) 654 check.Assert(vAppTemplateRecord.Name, Equals, vAppTemplate.VAppTemplate.Name) 655 check.Assert(vAppTemplateRecord.HREF, Equals, vAppTemplate.VAppTemplate.HREF) 656 657 vmTemplateRecord, err := vcd.client.QuerySynchronizedVmInVAppTemplateByHref(vAppTemplate.VAppTemplate.HREF, "**") 658 check.Assert(err, IsNil) 659 check.Assert(vmTemplateRecord, NotNil) 660 661 // Test non-existent vApp Template 662 _, err = vdc.GetVAppTemplateByName("INVALID") 663 check.Assert(err, NotNil) 664 665 _, err = vcd.client.QuerySynchronizedVmInVAppTemplateByHref(vAppTemplate.VAppTemplate.HREF, "INVALID") 666 check.Assert(err, Equals, ErrorEntityNotFound) 667 } 668 669 // TestMediaRetrieval tests that VDC receiver objects can search Media items successfully. 670 func (vcd *TestVCD) TestMediaRetrieval(check *C) { 671 fmt.Printf("Running: %s\n", check.TestName()) 672 673 if vcd.config.Media.NsxtMedia == "" { 674 check.Skip(fmt.Sprintf("%s: NSX-T Media item not given. Test can't proceed", check.TestName())) 675 } 676 677 org, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org) 678 check.Assert(err, IsNil) 679 check.Assert(org, NotNil) 680 681 catalog, err := org.GetCatalogByName(vcd.config.VCD.Catalog.NsxtBackedCatalogName, false) 682 check.Assert(err, IsNil) 683 check.Assert(catalog, NotNil) 684 685 vdc, err := org.GetVDCByName(vcd.config.VCD.Nsxt.Vdc, false) 686 check.Assert(err, IsNil) 687 check.Assert(vdc, NotNil) 688 689 mediaFromCatalog, err := catalog.GetMediaByName(vcd.config.Media.NsxtMedia, false) 690 check.Assert(err, IsNil) 691 check.Assert(mediaFromCatalog, NotNil) 692 693 // Test cases 694 mediaFromVdc, err := vcd.client.QueryMediaById(mediaFromCatalog.Media.ID) 695 check.Assert(err, IsNil) 696 check.Assert(mediaFromCatalog.Media.HREF, Equals, mediaFromVdc.MediaRecord.HREF) 697 check.Assert(mediaFromCatalog.Media.Name, Equals, mediaFromVdc.MediaRecord.Name) 698 699 // Test non-existent Media item 700 mediaFromVdc, err = vcd.client.QueryMediaById("INVALID") 701 check.Assert(err, NotNil) 702 check.Assert(mediaFromVdc, IsNil) 703 }