1// +build acceptance
2
3package v3
4
5import (
6	"testing"
7
8	"github.com/gophercloud/gophercloud/acceptance/clients"
9	"github.com/gophercloud/gophercloud/acceptance/tools"
10	"github.com/gophercloud/gophercloud/openstack"
11	"github.com/gophercloud/gophercloud/openstack/identity/v3/credentials"
12	"github.com/gophercloud/gophercloud/openstack/identity/v3/tokens"
13	th "github.com/gophercloud/gophercloud/testhelper"
14)
15
16func TestCredentialsCRUD(t *testing.T) {
17	clients.RequireAdmin(t)
18
19	client, err := clients.NewIdentityV3Client()
20	th.AssertNoErr(t, err)
21
22	ao, err := openstack.AuthOptionsFromEnv()
23	th.AssertNoErr(t, err)
24
25	authOptions := tokens.AuthOptions{
26		Username:   ao.Username,
27		Password:   ao.Password,
28		DomainName: ao.DomainName,
29		DomainID:   ao.DomainID,
30		// We need a scope to get the token roles list
31		Scope: tokens.Scope{
32			ProjectID:   ao.TenantID,
33			ProjectName: ao.TenantName,
34			DomainID:    ao.DomainID,
35			DomainName:  ao.DomainName,
36		},
37	}
38	token, err := tokens.Create(client, &authOptions).Extract()
39	th.AssertNoErr(t, err)
40	tools.PrintResource(t, token)
41
42	user, err := tokens.Get(client, token.ID).ExtractUser()
43	th.AssertNoErr(t, err)
44	tools.PrintResource(t, user)
45
46	project, err := tokens.Get(client, token.ID).ExtractProject()
47	th.AssertNoErr(t, err)
48	tools.PrintResource(t, project)
49
50	createOpts := credentials.CreateOpts{
51		ProjectID: project.ID,
52		Type:      "ec2",
53		UserID:    user.ID,
54		Blob:      "{\"access\":\"181920\",\"secret\":\"secretKey\"}",
55	}
56
57	// Create a credential
58	credential, err := credentials.Create(client, createOpts).Extract()
59	th.AssertNoErr(t, err)
60
61	// Delete a credential
62	defer credentials.Delete(client, credential.ID)
63	tools.PrintResource(t, credential)
64
65	th.AssertEquals(t, credential.Blob, createOpts.Blob)
66	th.AssertEquals(t, credential.Type, createOpts.Type)
67	th.AssertEquals(t, credential.UserID, createOpts.UserID)
68	th.AssertEquals(t, credential.ProjectID, createOpts.ProjectID)
69
70	// Get a credential
71	getCredential, err := credentials.Get(client, credential.ID).Extract()
72	th.AssertNoErr(t, err)
73	tools.PrintResource(t, getCredential)
74
75	th.AssertEquals(t, getCredential.Blob, createOpts.Blob)
76	th.AssertEquals(t, getCredential.Type, createOpts.Type)
77	th.AssertEquals(t, getCredential.UserID, createOpts.UserID)
78	th.AssertEquals(t, getCredential.ProjectID, createOpts.ProjectID)
79
80	updateOpts := credentials.UpdateOpts{
81		ProjectID: project.ID,
82		Type:      "ec2",
83		UserID:    user.ID,
84		Blob:      "{\"access\":\"181920\",\"secret\":\"mySecret\"}",
85	}
86
87	// Update a credential
88	updateCredential, err := credentials.Update(client, credential.ID, updateOpts).Extract()
89	th.AssertNoErr(t, err)
90	tools.PrintResource(t, updateCredential)
91
92	th.AssertEquals(t, updateCredential.Blob, updateOpts.Blob)
93
94}
95