diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index f992dc0..03863ec 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - go: ['1.12', '1.13', '1.14', '1.15', '1.16', '1.17', '1.18', '1.19', '1.20', '1.21', '1.22'] + go: ['1.13', '1.14', '1.15', '1.16', '1.17', '1.18', '1.19', '1.20', '1.21', '1.22'] fail-fast: false steps: diff --git a/credentials/internal/http/http.go b/credentials/internal/http/http.go index 03a77e3..6d18598 100644 --- a/credentials/internal/http/http.go +++ b/credentials/internal/http/http.go @@ -97,7 +97,7 @@ func Do(req *Request) (res *Response, err error) { httpClient.Timeout = req.ReadTimeout + req.ConnectTimeout } - transport := &http.Transport{} + transport := http.DefaultTransport.(*http.Transport).Clone() if req.Proxy != "" { var proxy *url.URL proxy, err = url.Parse(req.Proxy) diff --git a/credentials/providers/cli_profile_test.go b/credentials/providers/cli_profile_test.go index 41bdf8f..9f14f84 100644 --- a/credentials/providers/cli_profile_test.go +++ b/credentials/providers/cli_profile_test.go @@ -249,4 +249,11 @@ func TestCLIProfileCredentialsProvider_GetCredentials(t *testing.T) { assert.Equal(t, "aksecret", cc.AccessKeySecret) assert.Equal(t, "ststoken", cc.SecurityToken) assert.Equal(t, "cli_profile/ram_role_arn/ram_role_arn/static_ak", cc.ProviderName) + + provider.innerProvider = new(testProvider) + cc, err = provider.GetCredentials() + assert.Nil(t, err) + assert.Equal(t, "test", cc.AccessKeyId) + assert.Equal(t, "test", cc.AccessKeySecret) + assert.Equal(t, "cli_profile/test", cc.ProviderName) } diff --git a/credentials/providers/default.go b/credentials/providers/default.go index d0a7cb3..4f130ff 100644 --- a/credentials/providers/default.go +++ b/credentials/providers/default.go @@ -61,6 +61,7 @@ func (provider *DefaultCredentialsProvider) GetCredentials() (cc *Credentials, e if provider.lastUsedProvider != nil { inner, err1 := provider.lastUsedProvider.GetCredentials() if err1 != nil { + err = err1 return } diff --git a/credentials/providers/default_test.go b/credentials/providers/default_test.go index ce651fd..0fe2102 100644 --- a/credentials/providers/default_test.go +++ b/credentials/providers/default_test.go @@ -1,6 +1,7 @@ package providers import ( + "errors" "os" "path" "testing" @@ -155,4 +156,43 @@ func TestDefaultCredentialsProvider_GetCredentials(t *testing.T) { cc, err = provider.GetCredentials() assert.Nil(t, err) assert.Equal(t, &Credentials{AccessKeyId: "akid", AccessKeySecret: "aksecret", SecurityToken: "ststoken", ProviderName: "default/cli_profile/ram_role_arn/ram_role_arn/static_ak"}, cc) + + provider.lastUsedProvider = new(testProvider) + cc, err = provider.GetCredentials() + assert.Nil(t, err) + assert.Equal(t, "test", cc.AccessKeyId) + assert.Equal(t, "test", cc.AccessKeySecret) + assert.Equal(t, "default/test", cc.ProviderName) + + provider.lastUsedProvider = new(testErrorProvider) + _, err = provider.GetCredentials() + assert.Equal(t, "error", err.Error()) +} + +type testProvider struct { +} + +func (provider *testProvider) GetCredentials() (cc *Credentials, err error) { + cc = &Credentials{ + AccessKeyId: "test", + AccessKeySecret: "test", + ProviderName: "", + } + return +} + +func (provider *testProvider) GetProviderName() string { + return "test" +} + +type testErrorProvider struct { +} + +func (provider *testErrorProvider) GetCredentials() (cc *Credentials, err error) { + err = errors.New("error") + return +} + +func (provider *testErrorProvider) GetProviderName() string { + return "test" } diff --git a/credentials/providers/profile_test.go b/credentials/providers/profile_test.go index 535b288..77099c1 100644 --- a/credentials/providers/profile_test.go +++ b/credentials/providers/profile_test.go @@ -268,4 +268,15 @@ func TestProfileCredentialsProviderGetCredentials(t *testing.T) { assert.Equal(t, "aksecret", cc.AccessKeySecret) assert.Equal(t, "ststoken", cc.SecurityToken) assert.Equal(t, "profile/ram_role_arn/static_ak", cc.ProviderName) + + provider.innerProvider = new(testProvider) + cc, err = provider.GetCredentials() + assert.Nil(t, err) + assert.Equal(t, "test", cc.AccessKeyId) + assert.Equal(t, "test", cc.AccessKeySecret) + assert.Equal(t, "profile/test", cc.ProviderName) + + provider.innerProvider = new(testErrorProvider) + _, err = provider.GetCredentials() + assert.Equal(t, "error", err.Error()) }