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  }