github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/internal/acceptance/openstack/identity/v3/trusts_test.go (about)

     1  //go:build acceptance || identity || trusts
     2  
     3  package v3
     4  
     5  import (
     6  	"context"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/clients"
    11  	"github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/tools"
    12  	"github.com/vnpaycloud-console/gophercloud/v2/openstack"
    13  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/identity/v3/roles"
    14  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/identity/v3/tokens"
    15  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/identity/v3/trusts"
    16  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/identity/v3/users"
    17  	th "github.com/vnpaycloud-console/gophercloud/v2/testhelper"
    18  )
    19  
    20  func TestTrustCRUD(t *testing.T) {
    21  	clients.RequireAdmin(t)
    22  
    23  	client, err := clients.NewIdentityV3Client()
    24  	th.AssertNoErr(t, err)
    25  
    26  	// Generate a token and obtain the Admin user's ID from it.
    27  	ao, err := openstack.AuthOptionsFromEnv()
    28  	th.AssertNoErr(t, err)
    29  
    30  	authOptions := tokens.AuthOptions{
    31  		Username:   ao.Username,
    32  		UserID:     ao.UserID,
    33  		Password:   ao.Password,
    34  		DomainName: ao.DomainName,
    35  		DomainID:   ao.DomainID,
    36  		Scope: tokens.Scope{
    37  			ProjectID:   ao.TenantID,
    38  			ProjectName: ao.TenantName,
    39  			DomainID:    ao.DomainID,
    40  			DomainName:  ao.DomainName,
    41  		},
    42  	}
    43  
    44  	token, err := tokens.Create(context.TODO(), client, &authOptions).Extract()
    45  	th.AssertNoErr(t, err)
    46  	adminUser, err := tokens.Get(context.TODO(), client, token.ID).ExtractUser()
    47  	th.AssertNoErr(t, err)
    48  
    49  	// Get the admin and member role IDs.
    50  	adminRoleID := ""
    51  	memberRoleID := ""
    52  	allPages, err := roles.List(client, nil).AllPages(context.TODO())
    53  	th.AssertNoErr(t, err)
    54  	allRoles, err := roles.ExtractRoles(allPages)
    55  	th.AssertNoErr(t, err)
    56  
    57  	for _, v := range allRoles {
    58  		if v.Name == "admin" {
    59  			adminRoleID = v.ID
    60  		}
    61  
    62  		if v.Name == "member" {
    63  			memberRoleID = v.ID
    64  		}
    65  	}
    66  
    67  	// Create a project to apply the trust.
    68  	trusteeProject, err := CreateProject(t, client, nil)
    69  	th.AssertNoErr(t, err)
    70  	defer DeleteProject(t, client, trusteeProject.ID)
    71  
    72  	tools.PrintResource(t, trusteeProject)
    73  
    74  	// Add the admin user to the trustee project.
    75  	assignOpts := roles.AssignOpts{
    76  		UserID:    adminUser.ID,
    77  		ProjectID: trusteeProject.ID,
    78  	}
    79  
    80  	err = roles.Assign(context.TODO(), client, adminRoleID, assignOpts).ExtractErr()
    81  	th.AssertNoErr(t, err)
    82  
    83  	// Create a user as the trustee.
    84  	trusteeUserCreateOpts := users.CreateOpts{
    85  		Password: "secret",
    86  		DomainID: "default",
    87  	}
    88  	trusteeUser, err := CreateUser(t, client, &trusteeUserCreateOpts)
    89  	th.AssertNoErr(t, err)
    90  	defer DeleteUser(t, client, trusteeUser.ID)
    91  
    92  	expiresAt := time.Now().Add(time.Minute).Truncate(time.Second).UTC()
    93  	// Create a trust.
    94  	trust, err := CreateTrust(t, client, trusts.CreateOpts{
    95  		TrusteeUserID: trusteeUser.ID,
    96  		TrustorUserID: adminUser.ID,
    97  		ProjectID:     trusteeProject.ID,
    98  		ExpiresAt:     &expiresAt,
    99  		Roles: []trusts.Role{
   100  			{
   101  				ID: memberRoleID,
   102  			},
   103  		},
   104  	})
   105  	th.AssertNoErr(t, err)
   106  	defer DeleteTrust(t, client, trust.ID)
   107  
   108  	trust, err = FindTrust(t, client)
   109  	th.AssertNoErr(t, err)
   110  
   111  	// Get trust
   112  	p, err := trusts.Get(context.TODO(), client, trust.ID).Extract()
   113  	th.AssertNoErr(t, err)
   114  	th.AssertEquals(t, p.ExpiresAt, expiresAt)
   115  	th.AssertEquals(t, p.DeletedAt.IsZero(), true)
   116  
   117  	tools.PrintResource(t, p)
   118  
   119  	// List trust roles
   120  	rolesPages, err := trusts.ListRoles(client, p.ID).AllPages(context.TODO())
   121  	th.AssertNoErr(t, err)
   122  	allTrustRoles, err := trusts.ExtractRoles(rolesPages)
   123  	th.AssertNoErr(t, err)
   124  	th.AssertEquals(t, len(allTrustRoles), 1)
   125  	th.AssertEquals(t, allTrustRoles[0].ID, memberRoleID)
   126  
   127  	// Get trust role
   128  	role, err := trusts.GetRole(context.TODO(), client, p.ID, memberRoleID).Extract()
   129  	th.AssertNoErr(t, err)
   130  	th.AssertEquals(t, role.ID, memberRoleID)
   131  
   132  	// Check trust role
   133  	err = trusts.CheckRole(context.TODO(), client, p.ID, memberRoleID).ExtractErr()
   134  	th.AssertNoErr(t, err)
   135  }