github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/identity/v3/identity.go (about) 1 package v3 2 3 import ( 4 "testing" 5 6 "github.com/gophercloud/gophercloud" 7 "github.com/gophercloud/gophercloud/internal/acceptance/tools" 8 "github.com/gophercloud/gophercloud/openstack/identity/v3/domains" 9 "github.com/gophercloud/gophercloud/openstack/identity/v3/extensions/trusts" 10 "github.com/gophercloud/gophercloud/openstack/identity/v3/groups" 11 "github.com/gophercloud/gophercloud/openstack/identity/v3/projects" 12 "github.com/gophercloud/gophercloud/openstack/identity/v3/regions" 13 "github.com/gophercloud/gophercloud/openstack/identity/v3/roles" 14 "github.com/gophercloud/gophercloud/openstack/identity/v3/services" 15 "github.com/gophercloud/gophercloud/openstack/identity/v3/users" 16 th "github.com/gophercloud/gophercloud/testhelper" 17 ) 18 19 // CreateProject will create a project with a random name. 20 // It takes an optional createOpts parameter since creating a project 21 // has so many options. An error will be returned if the project was 22 // unable to be created. 23 func CreateProject(t *testing.T, client *gophercloud.ServiceClient, c *projects.CreateOpts) (*projects.Project, error) { 24 name := tools.RandomString("ACPTTEST", 8) 25 description := tools.RandomString("ACPTTEST-DESC", 8) 26 t.Logf("Attempting to create project: %s", name) 27 28 var createOpts projects.CreateOpts 29 if c != nil { 30 createOpts = *c 31 } else { 32 createOpts = projects.CreateOpts{} 33 } 34 35 createOpts.Name = name 36 createOpts.Description = description 37 38 project, err := projects.Create(client, createOpts).Extract() 39 if err != nil { 40 return project, err 41 } 42 43 t.Logf("Successfully created project %s with ID %s", name, project.ID) 44 45 th.AssertEquals(t, project.Name, name) 46 th.AssertEquals(t, project.Description, description) 47 48 return project, nil 49 } 50 51 // CreateUser will create a user with a random name. 52 // It takes an optional createOpts parameter since creating a user 53 // has so many options. An error will be returned if the user was 54 // unable to be created. 55 func CreateUser(t *testing.T, client *gophercloud.ServiceClient, c *users.CreateOpts) (*users.User, error) { 56 name := tools.RandomString("ACPTTEST", 8) 57 t.Logf("Attempting to create user: %s", name) 58 59 var createOpts users.CreateOpts 60 if c != nil { 61 createOpts = *c 62 } else { 63 createOpts = users.CreateOpts{} 64 } 65 66 createOpts.Name = name 67 68 user, err := users.Create(client, createOpts).Extract() 69 if err != nil { 70 return user, err 71 } 72 73 t.Logf("Successfully created user %s with ID %s", name, user.ID) 74 75 th.AssertEquals(t, user.Name, name) 76 77 return user, nil 78 } 79 80 // CreateGroup will create a group with a random name. 81 // It takes an optional createOpts parameter since creating a group 82 // has so many options. An error will be returned if the group was 83 // unable to be created. 84 func CreateGroup(t *testing.T, client *gophercloud.ServiceClient, c *groups.CreateOpts) (*groups.Group, error) { 85 name := tools.RandomString("ACPTTEST", 8) 86 t.Logf("Attempting to create group: %s", name) 87 88 var createOpts groups.CreateOpts 89 if c != nil { 90 createOpts = *c 91 } else { 92 createOpts = groups.CreateOpts{} 93 } 94 95 createOpts.Name = name 96 97 group, err := groups.Create(client, createOpts).Extract() 98 if err != nil { 99 return group, err 100 } 101 102 t.Logf("Successfully created group %s with ID %s", name, group.ID) 103 104 th.AssertEquals(t, group.Name, name) 105 106 return group, nil 107 } 108 109 // CreateDomain will create a domain with a random name. 110 // It takes an optional createOpts parameter since creating a domain 111 // has many options. An error will be returned if the domain was 112 // unable to be created. 113 func CreateDomain(t *testing.T, client *gophercloud.ServiceClient, c *domains.CreateOpts) (*domains.Domain, error) { 114 name := tools.RandomString("ACPTTEST", 8) 115 t.Logf("Attempting to create domain: %s", name) 116 117 var createOpts domains.CreateOpts 118 if c != nil { 119 createOpts = *c 120 } else { 121 createOpts = domains.CreateOpts{} 122 } 123 124 createOpts.Name = name 125 126 domain, err := domains.Create(client, createOpts).Extract() 127 if err != nil { 128 return domain, err 129 } 130 131 t.Logf("Successfully created domain %s with ID %s", name, domain.ID) 132 133 th.AssertEquals(t, domain.Name, name) 134 135 return domain, nil 136 } 137 138 // CreateRole will create a role with a random name. 139 // It takes an optional createOpts parameter since creating a role 140 // has so many options. An error will be returned if the role was 141 // unable to be created. 142 func CreateRole(t *testing.T, client *gophercloud.ServiceClient, c *roles.CreateOpts) (*roles.Role, error) { 143 var name string 144 if c.Name == "" { 145 name = tools.RandomString("ACPTTEST", 8) 146 } else { 147 name = c.Name 148 } 149 150 t.Logf("Attempting to create role: %s", name) 151 152 var createOpts roles.CreateOpts 153 if c != nil { 154 createOpts = *c 155 } else { 156 createOpts = roles.CreateOpts{} 157 } 158 createOpts.Name = name 159 160 role, err := roles.Create(client, createOpts).Extract() 161 if err != nil { 162 return role, err 163 } 164 165 t.Logf("Successfully created role %s with ID %s", name, role.ID) 166 167 th.AssertEquals(t, role.Name, name) 168 169 return role, nil 170 } 171 172 // CreateRegion will create a region with a random name. 173 // It takes an optional createOpts parameter since creating a region 174 // has so many options. An error will be returned if the region was 175 // unable to be created. 176 func CreateRegion(t *testing.T, client *gophercloud.ServiceClient, c *regions.CreateOpts) (*regions.Region, error) { 177 id := tools.RandomString("ACPTTEST", 8) 178 t.Logf("Attempting to create region: %s", id) 179 180 var createOpts regions.CreateOpts 181 if c != nil { 182 createOpts = *c 183 } else { 184 createOpts = regions.CreateOpts{} 185 } 186 187 createOpts.ID = id 188 189 region, err := regions.Create(client, createOpts).Extract() 190 if err != nil { 191 return region, err 192 } 193 194 t.Logf("Successfully created region %s", id) 195 196 th.AssertEquals(t, region.ID, id) 197 198 return region, nil 199 } 200 201 // CreateService will create a service with a random name. 202 // It takes an optional createOpts parameter since creating a service 203 // has so many options. An error will be returned if the service was 204 // unable to be created. 205 func CreateService(t *testing.T, client *gophercloud.ServiceClient, c *services.CreateOpts) (*services.Service, error) { 206 name := tools.RandomString("ACPTTEST", 8) 207 t.Logf("Attempting to create service: %s", name) 208 209 var createOpts services.CreateOpts 210 if c != nil { 211 createOpts = *c 212 } else { 213 createOpts = services.CreateOpts{} 214 } 215 216 createOpts.Extra["name"] = name 217 218 service, err := services.Create(client, createOpts).Extract() 219 if err != nil { 220 return service, err 221 } 222 223 t.Logf("Successfully created service %s", service.ID) 224 225 th.AssertEquals(t, service.Extra["name"], name) 226 227 return service, nil 228 } 229 230 // DeleteProject will delete a project by ID. A fatal error will occur if 231 // the project ID failed to be deleted. This works best when using it as 232 // a deferred function. 233 func DeleteProject(t *testing.T, client *gophercloud.ServiceClient, projectID string) { 234 err := projects.Delete(client, projectID).ExtractErr() 235 if err != nil { 236 t.Fatalf("Unable to delete project %s: %v", projectID, err) 237 } 238 239 t.Logf("Deleted project: %s", projectID) 240 } 241 242 // DeleteUser will delete a user by ID. A fatal error will occur if 243 // the user failed to be deleted. This works best when using it as 244 // a deferred function. 245 func DeleteUser(t *testing.T, client *gophercloud.ServiceClient, userID string) { 246 err := users.Delete(client, userID).ExtractErr() 247 if err != nil { 248 t.Fatalf("Unable to delete user with ID %s: %v", userID, err) 249 } 250 251 t.Logf("Deleted user with ID: %s", userID) 252 } 253 254 // DeleteGroup will delete a group by ID. A fatal error will occur if 255 // the group failed to be deleted. This works best when using it as 256 // a deferred function. 257 func DeleteGroup(t *testing.T, client *gophercloud.ServiceClient, groupID string) { 258 err := groups.Delete(client, groupID).ExtractErr() 259 if err != nil { 260 t.Fatalf("Unable to delete group %s: %v", groupID, err) 261 } 262 263 t.Logf("Deleted group: %s", groupID) 264 } 265 266 // DeleteDomain will delete a domain by ID. A fatal error will occur if 267 // the project ID failed to be deleted. This works best when using it as 268 // a deferred function. 269 func DeleteDomain(t *testing.T, client *gophercloud.ServiceClient, domainID string) { 270 err := domains.Delete(client, domainID).ExtractErr() 271 if err != nil { 272 t.Fatalf("Unable to delete domain %s: %v", domainID, err) 273 } 274 275 t.Logf("Deleted domain: %s", domainID) 276 } 277 278 // DeleteRole will delete a role by ID. A fatal error will occur if 279 // the role failed to be deleted. This works best when using it as 280 // a deferred function. 281 func DeleteRole(t *testing.T, client *gophercloud.ServiceClient, roleID string) { 282 err := roles.Delete(client, roleID).ExtractErr() 283 if err != nil { 284 t.Fatalf("Unable to delete role %s: %v", roleID, err) 285 } 286 287 t.Logf("Deleted role: %s", roleID) 288 } 289 290 // DeleteRegion will delete a reg by ID. A fatal error will occur if 291 // the region failed to be deleted. This works best when using it as 292 // a deferred function. 293 func DeleteRegion(t *testing.T, client *gophercloud.ServiceClient, regionID string) { 294 err := regions.Delete(client, regionID).ExtractErr() 295 if err != nil { 296 t.Fatalf("Unable to delete region %s: %v", regionID, err) 297 } 298 299 t.Logf("Deleted region: %s", regionID) 300 } 301 302 // DeleteService will delete a reg by ID. A fatal error will occur if 303 // the service failed to be deleted. This works best when using it as 304 // a deferred function. 305 func DeleteService(t *testing.T, client *gophercloud.ServiceClient, serviceID string) { 306 err := services.Delete(client, serviceID).ExtractErr() 307 if err != nil { 308 t.Fatalf("Unable to delete service %s: %v", serviceID, err) 309 } 310 311 t.Logf("Deleted service: %s", serviceID) 312 } 313 314 // UnassignRole will delete a role assigned to a user/group on a project/domain 315 // A fatal error will occur if it fails to delete the assignment. 316 // This works best when using it as a deferred function. 317 func UnassignRole(t *testing.T, client *gophercloud.ServiceClient, roleID string, opts *roles.UnassignOpts) { 318 err := roles.Unassign(client, roleID, *opts).ExtractErr() 319 if err != nil { 320 t.Fatalf("Unable to unassign a role %v on context %+v: %v", roleID, *opts, err) 321 } 322 t.Logf("Unassigned the role %v on context %+v", roleID, *opts) 323 } 324 325 // FindRole finds all roles that the current authenticated client has access 326 // to and returns the first one found. An error will be returned if the lookup 327 // was unsuccessful. 328 func FindRole(t *testing.T, client *gophercloud.ServiceClient) (*roles.Role, error) { 329 t.Log("Attempting to find a role") 330 var role *roles.Role 331 332 allPages, err := roles.List(client, nil).AllPages() 333 if err != nil { 334 return nil, err 335 } 336 337 allRoles, err := roles.ExtractRoles(allPages) 338 if err != nil { 339 return nil, err 340 } 341 342 for _, r := range allRoles { 343 role = &r 344 break 345 } 346 347 t.Logf("Successfully found a role %s with ID %s", role.Name, role.ID) 348 349 return role, nil 350 } 351 352 // CreateTrust will create a trust with the provided options. 353 // An error will be returned if the trust was unable to be created. 354 func CreateTrust(t *testing.T, client *gophercloud.ServiceClient, createOpts trusts.CreateOpts) (*trusts.Trust, error) { 355 trust, err := trusts.Create(client, createOpts).Extract() 356 if err != nil { 357 return nil, err 358 } 359 360 t.Logf("Successfully created trust %s", trust.ID) 361 362 return trust, nil 363 } 364 365 // DeleteTrust will delete a trust by ID. A fatal error will occur if 366 // the trust failed to be deleted. This works best when using it as 367 // a deferred function. 368 func DeleteTrust(t *testing.T, client *gophercloud.ServiceClient, trustID string) { 369 err := trusts.Delete(client, trustID).ExtractErr() 370 if err != nil { 371 t.Fatalf("Unable to delete trust %s: %v", trustID, err) 372 } 373 374 t.Logf("Deleted trust: %s", trustID) 375 } 376 377 // FindTrust finds all trusts that the current authenticated client has access 378 // to and returns the first one found. An error will be returned if the lookup 379 // was unsuccessful. 380 func FindTrust(t *testing.T, client *gophercloud.ServiceClient) (*trusts.Trust, error) { 381 t.Log("Attempting to find a trust") 382 var trust *trusts.Trust 383 384 allPages, err := trusts.List(client, nil).AllPages() 385 if err != nil { 386 return nil, err 387 } 388 389 allTrusts, err := trusts.ExtractTrusts(allPages) 390 if err != nil { 391 return nil, err 392 } 393 394 for _, t := range allTrusts { 395 trust = &t 396 break 397 } 398 399 t.Logf("Successfully found a trust %s ", trust.ID) 400 401 return trust, nil 402 }