github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/tenant_context_test.go (about)

     1  //go:build functional || openapi || ALL
     2  
     3  package govcd
     4  
     5  import (
     6  	"fmt"
     7  
     8  	"github.com/vmware/go-vcloud-director/v2/types/v56"
     9  	. "gopkg.in/check.v1"
    10  )
    11  
    12  // Test_TenantContext checks that different members of a hierarchy
    13  // with an Admin Org at its top are all reporting the same tenant context
    14  // using different methods to retrieve each member
    15  // When running with -vcd-verbose, you should see a long list of entities
    16  // with the corresponding tenant context. If no errors occur, the tenant context
    17  // values in all rows should be the same.
    18  func (vcd *TestVCD) Test_TenantContext(check *C) {
    19  	// Check the tenant context of the AdminOrg (top of the hierarchy)
    20  	adminOrg, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org)
    21  	check.Assert(err, IsNil)
    22  	check.Assert(adminOrg, NotNil)
    23  	check.Assert(adminOrg.TenantContext, NotNil)
    24  	check.Assert(adminOrg.TenantContext.OrgId, Equals, extractUuid(adminOrg.AdminOrg.ID))
    25  	check.Assert(adminOrg.TenantContext.OrgName, Equals, adminOrg.AdminOrg.Name)
    26  	adminOrgTenantContext := adminOrg.TenantContext
    27  	checkTenantContext(check, "adminOrg by name", adminOrgTenantContext, adminOrgTenantContext)
    28  
    29  	adminOrgById, err := vcd.client.GetAdminOrgById(adminOrg.AdminOrg.ID)
    30  	check.Assert(err, IsNil)
    31  	check.Assert(adminOrgById, NotNil)
    32  	check.Assert(adminOrgById.TenantContext, NotNil)
    33  	check.Assert(adminOrgById.TenantContext.OrgId, Equals, extractUuid(adminOrgById.AdminOrg.ID))
    34  	check.Assert(adminOrgById.TenantContext.OrgName, Equals, adminOrgById.AdminOrg.Name)
    35  	adminOrgByIdTenantContext := adminOrgById.TenantContext
    36  	checkTenantContext(check, "adminOrg by ID", adminOrgByIdTenantContext, adminOrgTenantContext)
    37  
    38  	adminOrgByNameOrId, err := vcd.client.GetAdminOrgByNameOrId(adminOrg.AdminOrg.ID)
    39  	check.Assert(err, IsNil)
    40  	check.Assert(adminOrgByNameOrId, NotNil)
    41  	check.Assert(adminOrgByNameOrId.TenantContext, NotNil)
    42  	check.Assert(adminOrgByNameOrId.TenantContext.OrgId, Equals, extractUuid(adminOrgByNameOrId.AdminOrg.ID))
    43  	check.Assert(adminOrgByNameOrId.TenantContext.OrgName, Equals, adminOrgByNameOrId.AdminOrg.Name)
    44  	adminOrgByNameOrIdTenantContext := adminOrgByNameOrId.TenantContext
    45  	checkTenantContext(check, "adminOrg by ID", adminOrgByNameOrIdTenantContext, adminOrgTenantContext)
    46  
    47  	// Check the tenant context of the Org (top of the hierarchy)
    48  	org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org)
    49  	check.Assert(err, IsNil)
    50  	check.Assert(org, NotNil)
    51  	check.Assert(org.TenantContext, NotNil)
    52  	check.Assert(org.TenantContext.OrgId, Equals, extractUuid(org.Org.ID))
    53  	check.Assert(org.TenantContext.OrgName, Equals, org.Org.Name)
    54  	orgTenantContext := org.TenantContext
    55  	checkTenantContext(check, "org by name", orgTenantContext, adminOrgTenantContext)
    56  
    57  	orgById, err := vcd.client.GetOrgById(org.Org.ID)
    58  	check.Assert(err, IsNil)
    59  	check.Assert(orgById, NotNil)
    60  	check.Assert(orgById.TenantContext, NotNil)
    61  	check.Assert(orgById.TenantContext.OrgId, Equals, extractUuid(orgById.Org.ID))
    62  	check.Assert(orgById.TenantContext.OrgName, Equals, orgById.Org.Name)
    63  	orgTenantContext = orgById.TenantContext
    64  	checkTenantContext(check, "org by ID", orgTenantContext, adminOrgTenantContext)
    65  
    66  	orgByNameOrId, err := vcd.client.GetOrgByNameOrId(org.Org.ID)
    67  	check.Assert(err, IsNil)
    68  	check.Assert(orgByNameOrId, NotNil)
    69  	check.Assert(orgByNameOrId.TenantContext, NotNil)
    70  	check.Assert(orgByNameOrId.TenantContext.OrgId, Equals, extractUuid(orgByNameOrId.Org.ID))
    71  	check.Assert(orgByNameOrId.TenantContext.OrgName, Equals, orgByNameOrId.Org.Name)
    72  	orgTenantContext = orgByNameOrId.TenantContext
    73  	checkTenantContext(check, "org by name or ID", orgTenantContext, adminOrgTenantContext)
    74  
    75  	// Check that an admin VDC depending from our org has the same tenant context
    76  	adminVdc, err := adminOrg.GetAdminVDCByName(vcd.config.VCD.Vdc, false)
    77  	check.Assert(err, IsNil)
    78  	check.Assert(adminVdc, NotNil)
    79  	adminVdcTenantContext, err := adminVdc.getTenantContext()
    80  	check.Assert(err, IsNil)
    81  	checkTenantContext(check, "adminVdc by name", adminVdcTenantContext, adminOrgTenantContext)
    82  
    83  	adminVdcById, err := adminOrg.GetAdminVDCById(adminVdc.AdminVdc.ID, false)
    84  	check.Assert(err, IsNil)
    85  	check.Assert(adminVdcById, NotNil)
    86  	adminVdcTenantContext, err = adminVdcById.getTenantContext()
    87  	check.Assert(err, IsNil)
    88  	checkTenantContext(check, "adminVdc by ID", adminVdcTenantContext, adminOrgTenantContext)
    89  
    90  	adminVdcByNameOrId, err := adminOrg.GetAdminVDCByNameOrId(adminVdc.AdminVdc.ID, false)
    91  	check.Assert(err, IsNil)
    92  	check.Assert(adminVdcByNameOrId, NotNil)
    93  	adminVdcTenantContext, err = adminVdcByNameOrId.getTenantContext()
    94  	check.Assert(err, IsNil)
    95  	checkTenantContext(check, "adminVdc by name or ID", adminVdcTenantContext, adminOrgTenantContext)
    96  
    97  	// Check that a VDC depending from our org has the same tenant context
    98  	vdc, err := adminOrg.GetVDCByName(vcd.config.VCD.Vdc, false)
    99  	check.Assert(err, IsNil)
   100  	check.Assert(vdc, NotNil)
   101  	vdcTenantContext, err := vdc.getTenantContext()
   102  	check.Assert(err, IsNil)
   103  	checkTenantContext(check, "VDC by name", vdcTenantContext, adminOrgTenantContext)
   104  
   105  	vdcById, err := adminOrg.GetVDCById(vdc.Vdc.ID, false)
   106  	check.Assert(err, IsNil)
   107  	check.Assert(vdcById, NotNil)
   108  	vdcTenantContext, err = vdcById.getTenantContext()
   109  	check.Assert(err, IsNil)
   110  	checkTenantContext(check, "VDC by ID", vdcTenantContext, adminOrgTenantContext)
   111  
   112  	vdcByNameOrId, err := adminOrg.GetVDCByNameOrId(vdc.Vdc.ID, false)
   113  	check.Assert(err, IsNil)
   114  	check.Assert(vdcByNameOrId, NotNil)
   115  	vdcTenantContext, err = vdcByNameOrId.getTenantContext()
   116  	check.Assert(err, IsNil)
   117  	checkTenantContext(check, "VDC by name or ID", vdcTenantContext, adminOrgTenantContext)
   118  
   119  	// Check that an admin catalog depending from our org has the same tenant context
   120  	adminCatalog, err := adminOrg.GetAdminCatalogByName(vcd.config.VCD.Catalog.Name, false)
   121  	check.Assert(err, IsNil)
   122  	check.Assert(adminCatalog, NotNil)
   123  	adminCatalogTenantContext, err := adminCatalog.getTenantContext()
   124  	check.Assert(err, IsNil)
   125  	checkTenantContext(check, "adminCatalog by name", adminCatalogTenantContext, adminOrgTenantContext)
   126  
   127  	adminCatalogById, err := adminOrg.GetAdminCatalogById(adminCatalog.AdminCatalog.ID, false)
   128  	check.Assert(err, IsNil)
   129  	check.Assert(adminCatalogById, NotNil)
   130  	adminCatalogTenantContext, err = adminCatalogById.getTenantContext()
   131  	check.Assert(err, IsNil)
   132  	checkTenantContext(check, "adminCatalog by ID", adminCatalogTenantContext, adminOrgTenantContext)
   133  
   134  	adminCatalogByNameOrId, err := adminOrg.GetAdminCatalogByNameOrId(adminCatalog.AdminCatalog.ID, false)
   135  	check.Assert(err, IsNil)
   136  	check.Assert(adminCatalogByNameOrId, NotNil)
   137  	adminCatalogTenantContext, err = adminCatalogByNameOrId.getTenantContext()
   138  	check.Assert(err, IsNil)
   139  	checkTenantContext(check, "adminCatalog by Name or ID", adminCatalogTenantContext, adminOrgTenantContext)
   140  
   141  	// Check that a catalog depending from our org has the same tenant context
   142  	catalog, err := adminOrg.GetCatalogByName(vcd.config.VCD.Catalog.Name, false)
   143  	check.Assert(err, IsNil)
   144  	check.Assert(catalog, NotNil)
   145  	catalogTenantContext, err := catalog.getTenantContext()
   146  	check.Assert(err, IsNil)
   147  	checkTenantContext(check, "catalog by Name", catalogTenantContext, adminOrgTenantContext)
   148  
   149  	catalogById, err := adminOrg.GetCatalogById(catalog.Catalog.ID, false)
   150  	check.Assert(err, IsNil)
   151  	check.Assert(catalogById, NotNil)
   152  	catalogTenantContext, err = catalogById.getTenantContext()
   153  	check.Assert(err, IsNil)
   154  	checkTenantContext(check, "catalog by ID", catalogTenantContext, adminOrgTenantContext)
   155  
   156  	catalogByNameOrId, err := adminOrg.GetCatalogByNameOrId(catalog.Catalog.ID, false)
   157  	check.Assert(err, IsNil)
   158  	check.Assert(catalogByNameOrId, NotNil)
   159  	catalogTenantContext, err = catalogByNameOrId.getTenantContext()
   160  	check.Assert(err, IsNil)
   161  	checkTenantContext(check, "catalog by ID", catalogTenantContext, adminOrgTenantContext)
   162  
   163  	vappList := vdc.GetVappList()
   164  
   165  	if len(vappList) > 0 {
   166  		// Check that a vApp depending from our org has the same tenant context
   167  		vapp, err := vdc.GetVAppByName(vappList[0].Name, false)
   168  		check.Assert(err, IsNil)
   169  		check.Assert(vapp, NotNil)
   170  		vappTenantContext, err := vapp.getTenantContext()
   171  		check.Assert(err, IsNil)
   172  		checkTenantContext(check, "vapp by name", vappTenantContext, adminOrgTenantContext)
   173  
   174  		vappById, err := vdc.GetVAppById(vapp.VApp.ID, false)
   175  		check.Assert(err, IsNil)
   176  		check.Assert(vappById, NotNil)
   177  		vappTenantContext, err = vappById.getTenantContext()
   178  		check.Assert(err, IsNil)
   179  		checkTenantContext(check, "vapp by ID", vappTenantContext, adminOrgTenantContext)
   180  
   181  		vappByNameOrId, err := vdc.GetVAppByNameOrId(vapp.VApp.ID, false)
   182  		check.Assert(err, IsNil)
   183  		check.Assert(vappByNameOrId, NotNil)
   184  		vappTenantContext, err = vappByNameOrId.getTenantContext()
   185  		check.Assert(err, IsNil)
   186  		checkTenantContext(check, "vapp by name or ID", vappTenantContext, adminOrgTenantContext)
   187  
   188  		vmList, err := vdc.QueryVmList(types.VmQueryFilterOnlyDeployed)
   189  		check.Assert(err, IsNil)
   190  		if len(vmList) > 0 {
   191  			// Check that a VM depending from our org has the same tenant context
   192  			vm, err := vcd.client.Client.GetVMByHref(vmList[0].HREF)
   193  			check.Assert(err, IsNil)
   194  			check.Assert(vm, NotNil)
   195  
   196  			vmTenantContext, err := vm.getTenantContext()
   197  			check.Assert(err, IsNil)
   198  			checkTenantContext(check, "VM by Href", vmTenantContext, adminOrgTenantContext)
   199  		}
   200  	}
   201  
   202  	// Check that a VM depending from our org has the same tenant context
   203  	role, err := adminOrg.GetRoleByName("vApp Author")
   204  	check.Assert(err, IsNil)
   205  	check.Assert(role, NotNil)
   206  	checkTenantContext(check, "role by name", role.TenantContext, adminOrgTenantContext)
   207  
   208  	roleById, err := adminOrg.GetRoleById(role.Role.ID)
   209  	check.Assert(err, IsNil)
   210  	check.Assert(role, NotNil)
   211  	checkTenantContext(check, "role by Id", roleById.TenantContext, adminOrgTenantContext)
   212  }
   213  
   214  func checkTenantContext(check *C, label string, tenantContext, parentTenantContext *TenantContext) {
   215  	check.Assert(tenantContext, DeepEquals, parentTenantContext)
   216  	check.Assert(tenantContext.OrgId, Equals, parentTenantContext.OrgId)
   217  	check.Assert(tenantContext.OrgName, Equals, parentTenantContext.OrgName)
   218  	if testVerbose {
   219  		fmt.Printf("%-30s %-20s -> %s\n", label, tenantContext.OrgId, parentTenantContext.OrgName)
   220  	}
   221  }