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  }