github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/roles_test.go (about) 1 //go:build functional || openapi || role || ALL 2 3 /* 4 * Copyright 2020 VMware, Inc. All rights reserved. Licensed under the Apache v2 License. 5 */ 6 7 package govcd 8 9 import ( 10 "net/url" 11 12 . "gopkg.in/check.v1" 13 14 "github.com/vmware/go-vcloud-director/v2/types/v56" 15 ) 16 17 func (vcd *TestVCD) Test_Roles(check *C) { 18 19 vcd.checkSkipWhenApiToken(check) 20 adminOrg, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org) 21 check.Assert(err, IsNil) 22 check.Assert(adminOrg, NotNil) 23 24 // Step 1 - Get all roles 25 allExistingRoles, err := adminOrg.GetAllRoles(nil) 26 check.Assert(err, IsNil) 27 check.Assert(allExistingRoles, NotNil) 28 29 // Step 2 - Get all roles using query filters 30 for _, oneRole := range allExistingRoles { 31 32 // Step 2.1 - retrieve specific role by using FIQL filter 33 queryParams := url.Values{} 34 queryParams.Add("filter", "id=="+oneRole.Role.ID) 35 36 expectOneRoleResultById, err := adminOrg.GetAllRoles(queryParams) 37 check.Assert(err, IsNil) 38 check.Assert(len(expectOneRoleResultById) == 1, Equals, true) 39 40 // Step 2.2 - retrieve specific role by using endpoint 41 exactItem, err := adminOrg.GetRoleById(oneRole.Role.ID) 42 check.Assert(err, IsNil) 43 44 check.Assert(err, IsNil) 45 check.Assert(exactItem, NotNil) 46 47 // Step 2.3 - compare struct retrieved by using filter and the one retrieved by exact endpoint ID 48 check.Assert(oneRole, DeepEquals, expectOneRoleResultById[0]) 49 50 } 51 52 // Step 3 - Create a new role and ensure it is created as specified by doing deep comparison 53 54 newR := &types.Role{ 55 Name: check.TestName(), 56 Description: "Role created by test", 57 // This BundleKey is being set by VCD even if it is not sent 58 BundleKey: types.VcloudUndefinedKey, 59 ReadOnly: false, 60 } 61 62 createdRole, err := adminOrg.CreateRole(newR) 63 check.Assert(err, IsNil) 64 AddToCleanupListOpenApi(createdRole.Role.Name, check.TestName(), types.OpenApiPathVersion1_0_0+types.OpenApiEndpointRoles+createdRole.Role.ID) 65 66 // Ensure supplied and created structs differ only by ID 67 newR.ID = createdRole.Role.ID 68 check.Assert(createdRole.Role, DeepEquals, newR) 69 70 // Check that the new role is found in the Organization structure 71 roleRef, err := adminOrg.GetRoleReference(createdRole.Role.Name) 72 check.Assert(err, IsNil) 73 check.Assert(roleRef, NotNil) 74 75 // Step 4 - updated created role 76 createdRole.Role.Description = "Updated description" 77 updatedRole, err := createdRole.Update() 78 check.Assert(err, IsNil) 79 check.Assert(updatedRole.Role, DeepEquals, createdRole.Role) 80 81 // Step 5 - add rights to role 82 83 // These rights include 5 implied rights, which will be added by role.AddRights 84 rightNames := []string{"Catalog: Add vApp from My Cloud", "Catalog: Edit Properties"} 85 86 rightSet, err := getRightsSet(adminOrg.client, rightNames) 87 check.Assert(err, IsNil) 88 89 err = updatedRole.AddRights(rightSet) 90 check.Assert(err, IsNil) 91 92 rights, err := updatedRole.GetRights(nil) 93 check.Assert(err, IsNil) 94 check.Assert(len(rights), Equals, len(rightSet)) 95 96 // Step 6 - remove 1 right from role 97 98 err = updatedRole.RemoveRights([]types.OpenApiReference{rightSet[0]}) 99 check.Assert(err, IsNil) 100 rights, err = updatedRole.GetRights(nil) 101 check.Assert(err, IsNil) 102 check.Assert(len(rights), Equals, len(rightSet)-1) 103 104 // Step 7 - remove all rights from role 105 err = updatedRole.RemoveAllRights() 106 check.Assert(err, IsNil) 107 108 rights, err = updatedRole.GetRights(nil) 109 check.Assert(err, IsNil) 110 check.Assert(len(rights), Equals, 0) 111 112 // Step 8 - delete created role 113 err = updatedRole.Delete() 114 check.Assert(err, IsNil) 115 116 // Step 9 - try to read deleted role and expect error to contain 'ErrorEntityNotFound' 117 // Read is tricky - it throws an error ACCESS_TO_RESOURCE_IS_FORBIDDEN when the resource with ID does not 118 // exist therefore one cannot know what kind of error occurred. 119 deletedRole, err := adminOrg.GetRoleById(createdRole.Role.ID) 120 check.Assert(ContainsNotFound(err), Equals, true) 121 check.Assert(deletedRole, IsNil) 122 }