github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/acceptance/openstack/identity/v3/agency_test.go (about) 1 package v3 2 3 import ( 4 "fmt" 5 "testing" 6 "time" 7 8 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients" 9 "github.com/opentelekomcloud/gophertelekomcloud/openstack" 10 "github.com/opentelekomcloud/gophertelekomcloud/openstack/identity/v3/credentials" 11 th "github.com/opentelekomcloud/gophertelekomcloud/testhelper" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestTemporaryCredential(t *testing.T) { 17 cloud, err := openstack.NewEnv("OS_").Cloud() 18 if err != nil { 19 t.Fatal(err) 20 } 21 if cloud.AuthType != "agency" || cloud.AuthInfo.AgencyName == "" || cloud.AuthInfo.DelegatedProject == "" { 22 t.Skip("Agency authorization is not set up") 23 } 24 25 client, err := clients.NewIdentityV3Client() 26 if err != nil { 27 t.Fatalf("Unable to obtain an identity client: %v", err) 28 } 29 30 cred, err := credentials.CreateTemporary(client, credentials.CreateTemporaryOpts{ 31 Methods: []string{"token"}, 32 Token: client.Token(), 33 Duration: 1800, 34 }).Extract() 35 require.NoError(t, err, "error creating temporary AK/SK") 36 37 currentTime := time.Now() 38 returnedTime, err := time.Parse(time.RFC3339Nano, cred.ExpiresAt) 39 th.AssertNoErr(t, err) 40 41 expiration := returnedTime.Sub(currentTime).Minutes() 42 assert.Condition(t, func() bool { 43 if expiration <= 30.0 { 44 fmt.Println(expiration) 45 return false 46 } 47 return true 48 }, "returned time should be 30 min or more") 49 50 assert.NotEmpty(t, cred.AccessKey) 51 assert.NotEmpty(t, cred.SecretKey) 52 assert.NotEmpty(t, cred.SecurityToken) 53 assert.NotEmpty(t, cred.ExpiresAt) 54 } 55 56 func TestTemporaryCredentialAgency(t *testing.T) { 57 cloud, err := openstack.NewEnv("OS_").Cloud() 58 if err != nil { 59 t.Fatal(err) 60 } 61 if cloud.AuthType != "agency" || cloud.AuthInfo.AgencyName == "" || cloud.AuthInfo.DelegatedProject == "" { 62 t.Skip("Agency authorization is not set up") 63 } 64 65 client, err := clients.NewIdentityV3Client() 66 if err != nil { 67 t.Fatalf("Unable to obtain an identity client: %v", err) 68 } 69 70 cred, err := credentials.CreateTemporary(client, credentials.CreateTemporaryOpts{ 71 Methods: []string{"assume_role"}, 72 Token: client.Token(), 73 Duration: 1800, 74 AgencyName: cloud.AuthInfo.AgencyName, 75 DomainID: client.DomainID, 76 }).Extract() 77 require.NoError(t, err, "error creating temporary AK/SK") 78 79 currentTime := time.Now() 80 returnedTime, err := time.Parse(time.RFC3339Nano, cred.ExpiresAt) 81 th.AssertNoErr(t, err) 82 83 expiration := returnedTime.Sub(currentTime).Minutes() 84 assert.Condition(t, func() bool { 85 if expiration <= 30.0 { 86 fmt.Println(expiration) 87 return false 88 } 89 return true 90 }, "returned time should be 30 min or more") 91 92 assert.NotEmpty(t, cred.AccessKey) 93 assert.NotEmpty(t, cred.SecretKey) 94 assert.NotEmpty(t, cred.SecurityToken) 95 assert.NotEmpty(t, cred.ExpiresAt) 96 }