File: trusts_test.go

package info (click to toggle)
golang-github-gophercloud-gophercloud 1.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 11,416 kB
  • sloc: sh: 99; makefile: 21
file content (128 lines) | stat: -rw-r--r-- 3,500 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//go:build acceptance || identity || trusts
// +build acceptance identity trusts

package v3

import (
	"testing"
	"time"

	"github.com/gophercloud/gophercloud/acceptance/clients"
	"github.com/gophercloud/gophercloud/acceptance/tools"
	"github.com/gophercloud/gophercloud/openstack"
	"github.com/gophercloud/gophercloud/openstack/identity/v3/extensions/trusts"
	"github.com/gophercloud/gophercloud/openstack/identity/v3/roles"
	"github.com/gophercloud/gophercloud/openstack/identity/v3/tokens"
	"github.com/gophercloud/gophercloud/openstack/identity/v3/users"
	th "github.com/gophercloud/gophercloud/testhelper"
)

func TestTrustCRUD(t *testing.T) {
	clients.RequireAdmin(t)

	client, err := clients.NewIdentityV3Client()
	th.AssertNoErr(t, err)

	// Generate a token and obtain the Admin user's ID from it.
	ao, err := openstack.AuthOptionsFromEnv()
	th.AssertNoErr(t, err)

	authOptions := tokens.AuthOptions{
		Username:   ao.Username,
		Password:   ao.Password,
		DomainName: ao.DomainName,
		DomainID:   ao.DomainID,
	}

	token, err := tokens.Create(client, &authOptions).Extract()
	th.AssertNoErr(t, err)
	adminUser, err := tokens.Get(client, token.ID).ExtractUser()
	th.AssertNoErr(t, err)

	// Get the admin and member role IDs.
	adminRoleID := ""
	memberRoleID := ""
	allPages, err := roles.List(client, nil).AllPages()
	th.AssertNoErr(t, err)
	allRoles, err := roles.ExtractRoles(allPages)
	th.AssertNoErr(t, err)

	for _, v := range allRoles {
		if v.Name == "admin" {
			adminRoleID = v.ID
		}

		if v.Name == "member" {
			memberRoleID = v.ID
		}
	}

	// Create a project to apply the trust.
	trusteeProject, err := CreateProject(t, client, nil)
	th.AssertNoErr(t, err)
	defer DeleteProject(t, client, trusteeProject.ID)

	tools.PrintResource(t, trusteeProject)

	// Add the admin user to the trustee project.
	assignOpts := roles.AssignOpts{
		UserID:    adminUser.ID,
		ProjectID: trusteeProject.ID,
	}

	err = roles.Assign(client, adminRoleID, assignOpts).ExtractErr()
	th.AssertNoErr(t, err)

	// Create a user as the trustee.
	trusteeUserCreateOpts := users.CreateOpts{
		Password: "secret",
		DomainID: "default",
	}
	trusteeUser, err := CreateUser(t, client, &trusteeUserCreateOpts)
	th.AssertNoErr(t, err)
	defer DeleteUser(t, client, trusteeUser.ID)

	expiresAt := time.Now().Add(time.Minute).Truncate(time.Second).UTC()
	// Create a trust.
	trust, err := CreateTrust(t, client, trusts.CreateOpts{
		TrusteeUserID: trusteeUser.ID,
		TrustorUserID: adminUser.ID,
		ProjectID:     trusteeProject.ID,
		ExpiresAt:     &expiresAt,
		Roles: []trusts.Role{
			{
				ID: memberRoleID,
			},
		},
	})
	th.AssertNoErr(t, err)
	defer DeleteTrust(t, client, trust.ID)

	trust, err = FindTrust(t, client)
	th.AssertNoErr(t, err)

	// Get trust
	p, err := trusts.Get(client, trust.ID).Extract()
	th.AssertNoErr(t, err)
	th.AssertEquals(t, p.ExpiresAt, expiresAt)
	th.AssertEquals(t, p.DeletedAt.IsZero(), true)

	tools.PrintResource(t, p)

	// List trust roles
	rolesPages, err := trusts.ListRoles(client, p.ID).AllPages()
	th.AssertNoErr(t, err)
	allTrustRoles, err := trusts.ExtractRoles(rolesPages)
	th.AssertNoErr(t, err)
	th.AssertEquals(t, len(allTrustRoles), 1)
	th.AssertEquals(t, allTrustRoles[0].ID, memberRoleID)

	// Get trust role
	role, err := trusts.GetRole(client, p.ID, memberRoleID).Extract()
	th.AssertNoErr(t, err)
	th.AssertEquals(t, role.ID, memberRoleID)

	// Check trust role
	err = trusts.CheckRole(client, p.ID, memberRoleID).ExtractErr()
	th.AssertNoErr(t, err)
}