github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/group_test.go (about) 1 //go:build user || functional || 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 "fmt" 11 12 "github.com/vmware/go-vcloud-director/v2/types/v56" 13 . "gopkg.in/check.v1" 14 ) 15 16 // test_GroupCRUD tests out CRUD capabilities for Org Groups. 17 // Note: Because it requires LDAP to be functional - this test is run from main test "Test_LDAP" 18 // which sets up LDAP configuration. 19 func (vcd *TestVCD) test_GroupCRUD(check *C) { 20 fmt.Printf("Running: %s\n", "test_GroupCRUD") 21 adminOrg, err := vcd.client.GetAdminOrgByName(vcd.org.Org.Name) 22 check.Assert(err, IsNil) 23 check.Assert(adminOrg, NotNil) 24 25 type groupTestData struct { 26 name string 27 secondName string 28 roleName string 29 secondRole string 30 providerType string 31 } 32 groupData := []groupTestData{ 33 { 34 name: "ship_crew", 35 secondName: "admin_staff", 36 roleName: OrgUserRoleOrganizationAdministrator, 37 secondRole: OrgUserRoleVappAuthor, 38 providerType: OrgUserProviderIntegrated, 39 }, 40 { 41 name: "admin_staff", 42 secondName: "ship_crew", 43 roleName: OrgUserRoleVappAuthor, 44 secondRole: OrgUserRoleVappUser, 45 providerType: OrgUserProviderIntegrated, 46 }, 47 // SAML must be configured in vCD Org to make providerType=OrgUserProviderSAML tests work 48 // { 49 // name: "test_group_vapp_user", 50 // roleName: OrgUserRoleVappUser, 51 // secondRole: OrgUserRoleConsoleAccessOnly, 52 // providerType: OrgUserProviderSAML, 53 // }, 54 // { 55 // name: "test_group_console_access", 56 // roleName: OrgUserRoleConsoleAccessOnly, 57 // secondRole: OrgUserRoleCatalogAuthor, 58 // providerType: OrgUserProviderSAML, 59 // }, 60 // { 61 // name: "test_group_catalog_author", 62 // roleName: OrgUserRoleCatalogAuthor, 63 // secondRole: OrgUserRoleOrganizationAdministrator, 64 // providerType: OrgUserProviderSAML, 65 // }, 66 // { 67 // name: "test_group_defered_to_identity_provider", 68 // roleName: OrgUserRoleDeferToIdentityProvider, 69 // secondRole: OrgUserRoleOrganizationAdministrator, 70 // providerType: OrgUserProviderSAML, 71 // }, 72 } 73 74 for _, gd := range groupData { 75 76 role, err := adminOrg.GetRoleReference(gd.roleName) 77 check.Assert(err, IsNil) 78 79 groupDefinition := types.Group{ 80 Name: gd.name, 81 Role: role, 82 ProviderType: gd.providerType, 83 } 84 85 newGroup := NewGroup(adminOrg.client, adminOrg) 86 newGroup.Group = &groupDefinition 87 if testVerbose { 88 fmt.Printf("# creating '%s' group '%s' with role '%s'\n", gd.providerType, gd.name, gd.roleName) 89 } 90 createdGroup, err := adminOrg.CreateGroup(newGroup.Group) 91 check.Assert(err, IsNil) 92 AddToCleanupList(gd.name, "group", newGroup.AdminOrg.AdminOrg.Name, "test_GroupCRUD") 93 94 foundGroup, err := adminOrg.GetGroupByName(gd.name, true) 95 check.Assert(err, IsNil) 96 97 check.Assert(foundGroup.Group.Href, Equals, createdGroup.Group.Href) 98 check.Assert(foundGroup.Group.Name, Equals, createdGroup.Group.Name) 99 100 // Setup for update 101 secondRole, err := adminOrg.GetRoleReference(gd.secondRole) 102 check.Assert(err, IsNil) 103 createdGroup.Group.Role = secondRole 104 105 if testVerbose { 106 fmt.Printf("# updating '%s' group '%s' to role '%s'\n", gd.providerType, gd.name, gd.secondRole) 107 } 108 err = createdGroup.Update() 109 check.Assert(err, IsNil) 110 111 foundGroup2, err := adminOrg.GetGroupByName(gd.name, true) 112 check.Assert(err, IsNil) 113 check.Assert(foundGroup2.Group.Href, Equals, createdGroup.Group.Href) 114 check.Assert(foundGroup2.Group.Name, Equals, createdGroup.Group.Name) 115 116 if testVerbose { 117 fmt.Printf("# removing '%s' group '%s'\n", gd.providerType, gd.name) 118 } 119 err = createdGroup.Delete() 120 check.Assert(err, IsNil) 121 } 122 } 123 124 // test_GroupFinderGetGenericEntity uses testFinderGetGenericEntity to validate that ByName, ById 125 // ByNameOrId method work properly. 126 // Note: Because it requires LDAP to be functional - this test is run from main test "Test_LDAP" 127 // which sets up LDAP configuration. 128 func (vcd *TestVCD) test_GroupFinderGetGenericEntity(check *C) { 129 fmt.Printf("Running: %s\n", "test_GroupFinderGetGenericEntity") 130 131 const groupName = "ship_crew" 132 adminOrg, err := vcd.client.GetAdminOrgByName(vcd.org.Org.Name) 133 check.Assert(err, IsNil) 134 check.Assert(adminOrg, NotNil) 135 136 role, err := adminOrg.GetRoleReference(OrgUserRoleOrganizationAdministrator) 137 check.Assert(err, IsNil) 138 139 group := NewGroup(adminOrg.client, adminOrg) 140 group.Group = &types.Group{ 141 Name: groupName, 142 Role: role, 143 ProviderType: OrgUserProviderIntegrated, 144 } 145 146 _, err = adminOrg.CreateGroup(group.Group) 147 check.Assert(err, IsNil) 148 AddToCleanupList(groupName, "group", group.AdminOrg.AdminOrg.Name, check.TestName()) 149 150 getByName := func(name string, refresh bool) (genericEntity, error) { 151 return adminOrg.GetGroupByName(name, refresh) 152 } 153 getById := func(id string, refresh bool) (genericEntity, error) { return adminOrg.GetGroupById(id, refresh) } 154 getByNameOrId := func(id string, refresh bool) (genericEntity, error) { 155 return adminOrg.GetGroupByNameOrId(id, refresh) 156 } 157 158 // Refresh adminOrg so that user data is present 159 err = adminOrg.Refresh() 160 check.Assert(err, IsNil) 161 162 var def = getterTestDefinition{ 163 parentType: "AdminOrg", 164 parentName: vcd.config.VCD.Org, 165 entityType: "OrgGroup", 166 entityName: groupName, 167 getByName: getByName, 168 getById: getById, 169 getByNameOrId: getByNameOrId, 170 } 171 vcd.testFinderGetGenericEntity(def, check) 172 173 // Remove group because LDAP cleanup will fail. 174 grp, err := adminOrg.GetGroupByName(group.Group.Name, true) 175 check.Assert(err, IsNil) 176 err = grp.Delete() 177 check.Assert(err, IsNil) 178 } 179 180 // test_GroupUserListIsPopulated checks that when retrieving the existing groups from the testing LDAP, 181 // the user list reference is populated. 182 // Note: Because it requires LDAP to be functional - this test is run from main test "Test_LDAP" 183 // which sets up LDAP configuration. 184 func (vcd *TestVCD) test_GroupUserListIsPopulated(check *C) { 185 fmt.Printf("Running: %s\n", "test_GroupUserListIsPopulated") 186 adminOrg, err := vcd.client.GetAdminOrgByName(vcd.org.Org.Name) 187 check.Assert(err, IsNil) 188 check.Assert(adminOrg, NotNil) 189 190 roleRef, err := adminOrg.GetRoleReference(OrgUserRoleOrganizationAdministrator) 191 check.Assert(err, IsNil) 192 193 group := NewGroup(adminOrg.client, adminOrg) 194 const groupName = "ship_crew" 195 group.Group = &types.Group{ 196 Name: groupName, 197 Role: roleRef, 198 ProviderType: OrgUserProviderIntegrated, 199 } 200 201 _, err = adminOrg.CreateGroup(group.Group) 202 check.Assert(err, IsNil) 203 AddToCleanupList(groupName, "group", group.AdminOrg.AdminOrg.Name, check.TestName()) 204 205 user := NewUser(adminOrg.client, adminOrg) 206 const userName = "fry" 207 user.User = &types.User{ 208 Name: userName, 209 Password: userName, 210 Role: roleRef, 211 IsExternal: true, 212 IsEnabled: true, 213 ProviderType: OrgUserProviderIntegrated, 214 } 215 _, err = adminOrg.CreateUser(user.User) 216 check.Assert(err, IsNil) 217 AddToCleanupList(userName, "user", group.AdminOrg.AdminOrg.Name, check.TestName()) 218 219 grp, err := adminOrg.GetGroupByName(group.Group.Name, true) 220 check.Assert(err, IsNil) 221 check.Assert(grp.Group.UsersList, NotNil) 222 check.Assert(grp.Group.UsersList.UserReference[0], NotNil) 223 224 // We check here that usersList doesn't make VCD fail, they should be sent as nil 225 err = grp.Update() 226 check.Assert(err, IsNil) 227 228 user, err = adminOrg.GetUserByHref(grp.Group.UsersList.UserReference[0].HREF) 229 check.Assert(err, IsNil) 230 check.Assert(user.User.Name, Equals, userName) 231 check.Assert(len(user.User.GroupReferences.GroupReference), Equals, 1) 232 233 // We check here that the user used for update is the same as we had originally, except the user list 234 grp.Group.UsersList = nil 235 check.Assert(copyWithoutUserList(grp.Group), DeepEquals, grp.Group) 236 237 // We check here that groupReferences doesn't make VCD fail, they should be sent as nil 238 err = user.Update() 239 check.Assert(err, IsNil) 240 241 // Cleanup 242 err = user.Delete(false) 243 check.Assert(err, IsNil) 244 err = grp.Delete() 245 check.Assert(err, IsNil) 246 }