|  | // +build acceptance identity | 
|  |  | 
|  | package v2 | 
|  |  | 
|  | import ( | 
|  | "strconv" | 
|  | "testing" | 
|  |  | 
|  | "github.com/gophercloud/gophercloud" | 
|  | "github.com/gophercloud/gophercloud/acceptance/tools" | 
|  | "github.com/gophercloud/gophercloud/openstack/identity/v2/tenants" | 
|  | "github.com/gophercloud/gophercloud/openstack/identity/v2/users" | 
|  | "github.com/gophercloud/gophercloud/pagination" | 
|  | th "github.com/gophercloud/gophercloud/testhelper" | 
|  | ) | 
|  |  | 
|  | func TestUsers(t *testing.T) { | 
|  | client := authenticatedClient(t) | 
|  |  | 
|  | tenantID := findTenant(t, client) | 
|  |  | 
|  | userID := createUser(t, client, tenantID) | 
|  |  | 
|  | listUsers(t, client) | 
|  |  | 
|  | getUser(t, client, userID) | 
|  |  | 
|  | updateUser(t, client, userID) | 
|  |  | 
|  | listUserRoles(t, client, tenantID, userID) | 
|  |  | 
|  | deleteUser(t, client, userID) | 
|  | } | 
|  |  | 
|  | func findTenant(t *testing.T, client *gophercloud.ServiceClient) string { | 
|  | var tenantID string | 
|  | err := tenants.List(client, nil).EachPage(func(page pagination.Page) (bool, error) { | 
|  | tenantList, err := tenants.ExtractTenants(page) | 
|  | th.AssertNoErr(t, err) | 
|  |  | 
|  | for _, t := range tenantList { | 
|  | tenantID = t.ID | 
|  | break | 
|  | } | 
|  |  | 
|  | return true, nil | 
|  | }) | 
|  | th.AssertNoErr(t, err) | 
|  |  | 
|  | return tenantID | 
|  | } | 
|  |  | 
|  | func createUser(t *testing.T, client *gophercloud.ServiceClient, tenantID string) string { | 
|  | t.Log("Creating user") | 
|  |  | 
|  | opts := users.CreateOpts{ | 
|  | Name:     tools.RandomString("user_", 5), | 
|  | Enabled:  users.Disabled, | 
|  | TenantID: tenantID, | 
|  | Email:    "new_user@foo.com", | 
|  | } | 
|  |  | 
|  | user, err := users.Create(client, opts).Extract() | 
|  | th.AssertNoErr(t, err) | 
|  | t.Logf("Created user %s on tenant %s", user.ID, tenantID) | 
|  |  | 
|  | return user.ID | 
|  | } | 
|  |  | 
|  | func listUsers(t *testing.T, client *gophercloud.ServiceClient) { | 
|  | err := users.List(client).EachPage(func(page pagination.Page) (bool, error) { | 
|  | userList, err := users.ExtractUsers(page) | 
|  | th.AssertNoErr(t, err) | 
|  |  | 
|  | for _, user := range userList { | 
|  | t.Logf("Listing user: ID [%s] Name [%s] Email [%s] Enabled? [%s]", | 
|  | user.ID, user.Name, user.Email, strconv.FormatBool(user.Enabled)) | 
|  | } | 
|  |  | 
|  | return true, nil | 
|  | }) | 
|  |  | 
|  | th.AssertNoErr(t, err) | 
|  | } | 
|  |  | 
|  | func getUser(t *testing.T, client *gophercloud.ServiceClient, userID string) { | 
|  | _, err := users.Get(client, userID).Extract() | 
|  | th.AssertNoErr(t, err) | 
|  | t.Logf("Getting user %s", userID) | 
|  | } | 
|  |  | 
|  | func updateUser(t *testing.T, client *gophercloud.ServiceClient, userID string) { | 
|  | opts := users.UpdateOpts{Name: tools.RandomString("new_name", 5), Email: "new@foo.com"} | 
|  | user, err := users.Update(client, userID, opts).Extract() | 
|  | th.AssertNoErr(t, err) | 
|  | t.Logf("Updated user %s: Name [%s] Email [%s]", userID, user.Name, user.Email) | 
|  | } | 
|  |  | 
|  | func listUserRoles(t *testing.T, client *gophercloud.ServiceClient, tenantID, userID string) { | 
|  | count := 0 | 
|  | err := users.ListRoles(client, tenantID, userID).EachPage(func(page pagination.Page) (bool, error) { | 
|  | count++ | 
|  |  | 
|  | roleList, err := users.ExtractRoles(page) | 
|  | th.AssertNoErr(t, err) | 
|  |  | 
|  | t.Logf("Listing roles for user %s", userID) | 
|  |  | 
|  | for _, r := range roleList { | 
|  | t.Logf("- %s (%s)", r.Name, r.ID) | 
|  | } | 
|  |  | 
|  | return true, nil | 
|  | }) | 
|  |  | 
|  | if count == 0 { | 
|  | t.Logf("No roles for user %s", userID) | 
|  | } | 
|  |  | 
|  | th.AssertNoErr(t, err) | 
|  | } | 
|  |  | 
|  | func deleteUser(t *testing.T, client *gophercloud.ServiceClient, userID string) { | 
|  | res := users.Delete(client, userID) | 
|  | th.AssertNoErr(t, res.Err) | 
|  | t.Logf("Deleted user %s", userID) | 
|  | } |