...

Source file src/github.com/aliyun/credentials-go/credentials/provider_chain_test.go

Documentation: github.com/aliyun/credentials-go/credentials

     1  package credentials
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  
     7  	"github.com/alibabacloud-go/tea/tea"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestProviderChain(t *testing.T) {
    12  	env := newEnvProvider()
    13  	pp := newProfileProvider()
    14  	instanceP := newInstanceCredentialsProvider()
    15  
    16  	pc := newProviderChain([]Provider{env, pp, instanceP})
    17  
    18  	originAccessKeyIdNew := os.Getenv(EnvVarAccessKeyIdNew)
    19  	originAccessKeyId := os.Getenv(EnvVarAccessKeyId)
    20  	originAccessKeySecret := os.Getenv(EnvVarAccessKeySecret)
    21  	os.Setenv(EnvVarAccessKeyId, "")
    22  	os.Setenv(EnvVarAccessKeyIdNew, "")
    23  	os.Setenv(EnvVarAccessKeySecret, "")
    24  	defer func() {
    25  		os.Setenv(EnvVarAccessKeyIdNew, originAccessKeyIdNew)
    26  		os.Setenv(EnvVarAccessKeyId, originAccessKeyId)
    27  		os.Setenv(EnvVarAccessKeySecret, originAccessKeySecret)
    28  	}()
    29  	c, err := pc.resolve()
    30  	assert.Nil(t, c)
    31  	assert.EqualError(t, err, "ALIBABA_CLOUD_ACCESS_KEY_ID or ALIBABA_CLOUD_ACCESS_KEY_Id cannot be empty")
    32  
    33  	os.Setenv(EnvVarAccessKeyId, "AccessKeyId")
    34  	os.Setenv(EnvVarAccessKeySecret, "AccessKeySecret")
    35  	c, err = pc.resolve()
    36  	assert.NotNil(t, c)
    37  	assert.Nil(t, err)
    38  
    39  	os.Unsetenv(EnvVarAccessKeyId)
    40  	os.Unsetenv(EnvVarAccessKeySecret)
    41  	os.Unsetenv(ENVCredentialFile)
    42  	os.Unsetenv(ENVEcsMetadata)
    43  
    44  	c, err = pc.resolve()
    45  	assert.Nil(t, c)
    46  	assert.EqualError(t, err, "No credential found")
    47  }
    48  
    49  func TestDefaultChainNoCred(t *testing.T) {
    50  	accessKeyIdNew := os.Getenv(EnvVarAccessKeyIdNew)
    51  	accessKeyId := os.Getenv(EnvVarAccessKeyId)
    52  	accessKeySecret := os.Getenv(EnvVarAccessKeySecret)
    53  	ecsMetadata := os.Getenv(ENVEcsMetadata)
    54  	roleArn := os.Getenv(ENVRoleArn)
    55  	oidcProviderArn := os.Getenv(ENVOIDCProviderArn)
    56  	oidcTokenFilePath := os.Getenv(ENVOIDCTokenFile)
    57  	roleSessionName := os.Getenv(ENVRoleSessionName)
    58  	os.Unsetenv(EnvVarAccessKeyId)
    59  	os.Unsetenv(EnvVarAccessKeySecret)
    60  	os.Unsetenv(ENVCredentialFile)
    61  	os.Unsetenv(ENVEcsMetadata)
    62  	os.Unsetenv(ENVRoleArn)
    63  	os.Unsetenv(ENVOIDCProviderArn)
    64  	os.Unsetenv(ENVOIDCTokenFile)
    65  	os.Unsetenv(ENVRoleSessionName)
    66  	defer func() {
    67  		os.Setenv(EnvVarAccessKeyIdNew, accessKeyIdNew)
    68  		os.Setenv(EnvVarAccessKeyId, accessKeyId)
    69  		os.Setenv(EnvVarAccessKeySecret, accessKeySecret)
    70  		os.Setenv(ENVEcsMetadata, ecsMetadata)
    71  		os.Setenv(ENVRoleArn, roleArn)
    72  		os.Setenv(ENVOIDCProviderArn, oidcProviderArn)
    73  		os.Setenv(ENVOIDCTokenFile, oidcTokenFilePath)
    74  		os.Setenv(ENVRoleSessionName, roleSessionName)
    75  	}()
    76  
    77  	chain, err := defaultChain.resolve()
    78  	assert.Nil(t, chain)
    79  	assert.Equal(t, "No credential found", err.Error())
    80  }
    81  
    82  func TestDefaultChainHasCred(t *testing.T) {
    83  	accessKeyIdNew := os.Getenv(EnvVarAccessKeyIdNew)
    84  	accessKeyId := os.Getenv(EnvVarAccessKeyId)
    85  	accessKeySecret := os.Getenv(EnvVarAccessKeySecret)
    86  	os.Unsetenv(EnvVarAccessKeyId)
    87  	os.Unsetenv(EnvVarAccessKeySecret)
    88  	os.Unsetenv(ENVCredentialFile)
    89  
    90  	path, _ := os.Getwd()
    91  	oidcTokenFilePathVar := path + "/oidc_token"
    92  	roleArn := os.Getenv(ENVRoleArn)
    93  	oidcProviderArn := os.Getenv(ENVOIDCProviderArn)
    94  	oidcTokenFilePath := os.Getenv(ENVOIDCTokenFile)
    95  	roleSessionName := os.Getenv(ENVRoleSessionName)
    96  	os.Setenv(ENVRoleArn, "acs:ram::roleArn:role/roleArn")
    97  	os.Setenv(ENVOIDCProviderArn, "acs:ram::roleArn")
    98  	os.Setenv(ENVOIDCTokenFile, oidcTokenFilePathVar)
    99  	os.Setenv(ENVRoleSessionName, "roleSessionName")
   100  	defer func() {
   101  		os.Setenv(EnvVarAccessKeyIdNew, accessKeyIdNew)
   102  		os.Setenv(EnvVarAccessKeyId, accessKeyId)
   103  		os.Setenv(EnvVarAccessKeySecret, accessKeySecret)
   104  		os.Setenv(ENVRoleArn, roleArn)
   105  		os.Setenv(ENVOIDCProviderArn, oidcProviderArn)
   106  		os.Setenv(ENVOIDCTokenFile, oidcTokenFilePath)
   107  		os.Setenv(ENVRoleSessionName, roleSessionName)
   108  	}()
   109  
   110  	config, err := defaultChain.resolve()
   111  	assert.NotNil(t, config)
   112  	assert.Nil(t, err)
   113  	assert.Equal(t, "acs:ram::roleArn:role/roleArn", tea.StringValue(config.RoleArn))
   114  	assert.Equal(t, "acs:ram::roleArn", tea.StringValue(config.OIDCProviderArn))
   115  	assert.Equal(t, oidcTokenFilePathVar, tea.StringValue(config.OIDCTokenFilePath))
   116  	assert.Equal(t, "roleSessionName", tea.StringValue(config.RoleSessionName))
   117  	assert.Equal(t, "oidc_role_arn", tea.StringValue(config.Type))
   118  
   119  	cred, err := NewCredential(nil)
   120  	assert.Nil(t, err)
   121  	assert.NotNil(t, cred)
   122  	assert.Contains(t, "oidc_role_arn", tea.StringValue(cred.GetType()))
   123  }
   124  

View as plain text