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