github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/nsxt_application_profile_test.go (about) 1 //go:build network || nsxt || functional || openapi || ALL 2 3 package govcd 4 5 import ( 6 "fmt" 7 "net/url" 8 9 "github.com/vmware/go-vcloud-director/v2/types/v56" 10 . "gopkg.in/check.v1" 11 ) 12 13 func (vcd *TestVCD) Test_NsxtApplicationPortProfileProvider(check *C) { 14 skipNoNsxtConfiguration(vcd, check) 15 skipOpenApiEndpointTest(vcd, check, types.OpenApiPathVersion1_0_0+types.OpenApiEndpointAppPortProfiles) 16 vcd.skipIfNotSysAdmin(check) 17 18 appPortProfileConfig := getAppProfileProvider(vcd, check) 19 testAppPortProfile(appPortProfileConfig, types.ApplicationPortProfileScopeProvider, vcd, check) 20 } 21 22 func (vcd *TestVCD) Test_NsxtApplicationPortProfileTenant(check *C) { 23 vcd.skipIfNotSysAdmin(check) 24 skipNoNsxtConfiguration(vcd, check) 25 skipOpenApiEndpointTest(vcd, check, types.OpenApiPathVersion1_0_0+types.OpenApiEndpointAppPortProfiles) 26 27 appPortProfileConfig := getAppProfileTenant(vcd, check) 28 testAppPortProfile(appPortProfileConfig, types.ApplicationPortProfileScopeTenant, vcd, check) 29 } 30 31 func (vcd *TestVCD) Test_NsxtApplicationPortProfileReadSystem(check *C) { 32 skipNoNsxtConfiguration(vcd, check) 33 skipOpenApiEndpointTest(vcd, check, types.OpenApiPathVersion1_0_0+types.OpenApiEndpointAppPortProfiles) 34 35 testApplicationProfilesForScope(types.ApplicationPortProfileScopeSystem, check, vcd) 36 } 37 38 func (vcd *TestVCD) Test_NsxtApplicationPortProfileReadProvider(check *C) { 39 skipNoNsxtConfiguration(vcd, check) 40 skipOpenApiEndpointTest(vcd, check, types.OpenApiPathVersion1_0_0+types.OpenApiEndpointAppPortProfiles) 41 42 testApplicationProfilesForScope(types.ApplicationPortProfileScopeProvider, check, vcd) 43 } 44 45 func (vcd *TestVCD) Test_NsxtApplicationPortProfileReadTenant(check *C) { 46 skipNoNsxtConfiguration(vcd, check) 47 skipOpenApiEndpointTest(vcd, check, types.OpenApiPathVersion1_0_0+types.OpenApiEndpointAppPortProfiles) 48 49 testApplicationProfilesForScope(types.ApplicationPortProfileScopeTenant, check, vcd) 50 } 51 52 func getAppProfileProvider(vcd *TestVCD, check *C) *types.NsxtAppPortProfile { 53 nsxtManager, err := vcd.client.QueryNsxtManagerByName(vcd.config.VCD.Nsxt.Manager) 54 check.Assert(err, IsNil) 55 56 nsxtManagerUuid, err := GetUuidFromHref(nsxtManager[0].HREF, true) 57 check.Assert(err, IsNil) 58 59 nsxtManagerUrn, err := BuildUrnWithUuid("urn:vcloud:nsxtmanager:", nsxtManagerUuid) 60 check.Assert(err, IsNil) 61 62 // For PROVIDER scope application port profile must have ContextEntityId set as NSX-T Managers URN and no Org 63 appPortProfileConfig := &types.NsxtAppPortProfile{ 64 Name: check.TestName() + "PROVIDER", 65 Description: "Provider config", 66 ApplicationPorts: []types.NsxtAppPortProfilePort{ 67 types.NsxtAppPortProfilePort{ 68 Protocol: "TCP", 69 DestinationPorts: []string{"11000-12000"}, 70 }, 71 }, 72 ContextEntityId: nsxtManagerUrn, 73 Scope: types.ApplicationPortProfileScopeProvider, 74 } 75 return appPortProfileConfig 76 } 77 78 func getAppProfileTenant(vcd *TestVCD, check *C) *types.NsxtAppPortProfile { 79 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 80 check.Assert(err, IsNil) 81 82 // For PROVIDER scope application port profile must have ContextEntityId set as NSX-T Managers URN and no Org 83 appPortProfileConfig := &types.NsxtAppPortProfile{ 84 Name: check.TestName() + "TENANT", 85 Description: "Provider config", 86 ApplicationPorts: []types.NsxtAppPortProfilePort{ 87 types.NsxtAppPortProfilePort{ 88 Protocol: "ICMPv4", 89 DestinationPorts: []string{"any"}, 90 }, 91 }, 92 OrgRef: &types.OpenApiReference{ID: org.Org.ID, Name: org.Org.Name}, 93 94 ContextEntityId: vcd.nsxtVdc.Vdc.ID, // VDC ID 95 Scope: types.ApplicationPortProfileScopeTenant, 96 } 97 return appPortProfileConfig 98 } 99 100 func testAppPortProfile(appPortProfileConfig *types.NsxtAppPortProfile, scope string, vcd *TestVCD, check *C) { 101 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 102 check.Assert(err, IsNil) 103 appProfile, err := org.CreateNsxtAppPortProfile(appPortProfileConfig) 104 check.Assert(err, IsNil) 105 106 openApiEndpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAppPortProfiles + appProfile.NsxtAppPortProfile.ID 107 AddToCleanupListOpenApi(appProfile.NsxtAppPortProfile.Name, check.TestName(), openApiEndpoint) 108 109 appPortProfileConfig.ID = appProfile.NsxtAppPortProfile.ID // Inject ID into original creation 110 appPortProfileConfig.ContextEntityId = "" // Remove NSX-T Manager URN because read does not return it 111 check.Assert(appProfile.NsxtAppPortProfile, DeepEquals, appPortProfileConfig) 112 113 // Check update 114 appProfile.NsxtAppPortProfile.Description = appProfile.NsxtAppPortProfile.Description + "-Update" 115 updatedAppProfile, err := appProfile.Update(appProfile.NsxtAppPortProfile) 116 check.Assert(err, IsNil) 117 check.Assert(updatedAppProfile.NsxtAppPortProfile, DeepEquals, appProfile.NsxtAppPortProfile) 118 119 // Check lookup 120 foundAppProfileById, err := org.GetNsxtAppPortProfileById(appProfile.NsxtAppPortProfile.ID) 121 check.Assert(err, IsNil) 122 check.Assert(foundAppProfileById.NsxtAppPortProfile, DeepEquals, appProfile.NsxtAppPortProfile) 123 124 foundAppProfileByName, err := org.GetNsxtAppPortProfileByName(appProfile.NsxtAppPortProfile.Name, scope) 125 check.Assert(err, IsNil) 126 check.Assert(foundAppProfileByName.NsxtAppPortProfile, DeepEquals, foundAppProfileById.NsxtAppPortProfile) 127 128 // Check VDC and VDC Group lookup 129 adminOrg, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org) 130 check.Assert(err, IsNil) 131 check.Assert(adminOrg, NotNil) 132 vdc, vdcGroup := test_CreateVdcGroup(check, adminOrg, vcd) 133 134 // Lookup by VDC 135 foundAppProfileByNameInVdc, err := vdc.GetNsxtAppPortProfileByName(appProfile.NsxtAppPortProfile.Name, scope) 136 check.Assert(err, IsNil) 137 check.Assert(foundAppProfileByNameInVdc.NsxtAppPortProfile, DeepEquals, foundAppProfileById.NsxtAppPortProfile) 138 139 foundAppProfileByNameInVdcGroup, err := vdcGroup.GetNsxtAppPortProfileByName(appProfile.NsxtAppPortProfile.Name, scope) 140 check.Assert(err, IsNil) 141 check.Assert(foundAppProfileByNameInVdcGroup.NsxtAppPortProfile, DeepEquals, foundAppProfileById.NsxtAppPortProfile) 142 // Remove VDC group 143 err = vdcGroup.Delete() 144 check.Assert(err, IsNil) 145 err = vdc.DeleteWait(true, true) 146 check.Assert(err, IsNil) 147 148 err = appProfile.Delete() 149 check.Assert(err, IsNil) 150 151 // Expect a not found error 152 _, err = org.GetNsxtAppPortProfileById(appProfile.NsxtAppPortProfile.ID) 153 check.Assert(ContainsNotFound(err), Equals, true) 154 155 _, err = org.GetNsxtAppPortProfileByName(appProfile.NsxtAppPortProfile.Name, scope) 156 check.Assert(ContainsNotFound(err), Equals, true) 157 } 158 159 func testApplicationProfilesForScope(scope string, check *C, vcd *TestVCD) { 160 org, err := vcd.client.GetOrgByName(vcd.config.VCD.Org) 161 check.Assert(err, IsNil) 162 163 resultCount := getResultCountByScope(scope, check, vcd) 164 if testVerbose { 165 fmt.Printf("# API shows results for scope '%s': %d\n", scope, resultCount) 166 } 167 168 appProfileSlice, err := org.GetAllNsxtAppPortProfiles(nil, scope) 169 check.Assert(err, IsNil) 170 171 if testVerbose { 172 fmt.Printf("# Paginated item number for scope '%s': %d\n", scope, len(appProfileSlice)) 173 } 174 175 // Ensure the amount of results is exactly the same as returned by getResultCountByScope which makes sure that 176 // pagination is not broken. 177 check.Assert(len(appProfileSlice), Equals, resultCount) 178 } 179 180 func getResultCountByScope(scope string, check *C, vcd *TestVCD) int { 181 // Get element count by using a simple query and parse response directly to compare it against paginated list of items 182 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointAppPortProfiles 183 skipOpenApiEndpointTest(vcd, check, endpoint) 184 apiVersion, err := vcd.client.Client.checkOpenApiEndpointCompatibility(endpoint) 185 check.Assert(err, IsNil) 186 187 urlRef, err := vcd.client.Client.OpenApiBuildEndpoint(endpoint) 188 check.Assert(err, IsNil) 189 190 // Limit search of audits trails to the last 12 hours so that it doesn't take too long and set pageSize to be 1 result 191 // to force following pages 192 queryParams := url.Values{} 193 queryParams.Add("filter", "scope=="+scope) 194 195 result := struct { 196 Resulttotal int `json:"resultTotal"` 197 }{} 198 199 err = vcd.vdc.client.OpenApiGetItem(apiVersion, urlRef, queryParams, &result, nil) 200 check.Assert(err, IsNil) 201 return result.Resulttotal 202 }