From 180c2b637055c3f8d29db38619d54f5bbb28cb8d Mon Sep 17 00:00:00 2001 From: Jason Del Ponte Date: Tue, 31 Dec 2019 11:14:40 -0800 Subject: [PATCH 1/2] aws/session: Fix client init not exposing endpoint resolve error Fixes the SDK API clients not surfacing endpoint resolution errors, when the EndpointResolver is unable to resolve an endpoint for the client and region. --- aws/session/session.go | 14 ++++++++++---- aws/session/session_test.go | 9 ++++++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/aws/session/session.go b/aws/session/session.go index 915e62cde12..0ff49960510 100644 --- a/aws/session/session.go +++ b/aws/session/session.go @@ -642,10 +642,16 @@ func (s *Session) ClientConfig(service string, cfgs ...*aws.Config) client.Confi region := aws.StringValue(s.Config.Region) resolved, err := s.resolveEndpoint(service, region, s.Config) - if err != nil && s.Config.Logger != nil { - s.Config.Logger.Log(fmt.Sprintf( - "ERROR: unable to resolve endpoint for service %q, region %q, err: %v", - service, region, err)) + if err != nil { + s.Handlers.Validate.PushBack(func(r *request.Request) { + if len(r.ClientInfo.Endpoint) != 0 { + // Error occurred while resolving endpoint, but the request + // being invoked has had an endpoint specified after the client + // was created. + return + } + r.Error = err + }) } return client.Config{ diff --git a/aws/session/session_test.go b/aws/session/session_test.go index 30017396c8d..e03e985b0b3 100644 --- a/aws/session/session_test.go +++ b/aws/session/session_test.go @@ -68,7 +68,10 @@ func TestNew_WithSessionLoadError(t *testing.T) { os.Setenv("AWS_PROFILE", "assume_role_invalid_source_profile") logger := bytes.Buffer{} - s := New(&aws.Config{Logger: &mockLogger{&logger}}) + s := New(&aws.Config{ + Region: aws.String("us-west-2"), + Logger: &mockLogger{&logger}, + }) if s == nil { t.Errorf("expect not nil") @@ -178,8 +181,8 @@ func TestNewSession_ResolveEndpointError(t *testing.T) { t.Errorf("expect %v validation error, got %v", e, a) } - if e, a := "unable to resolve", logger.Buffer.String(); !strings.Contains(a, e) { - t.Errorf("expect %v logged, got %v", e, a) + if v := logger.Buffer.String(); len(v) != 0 { + t.Errorf("expect nothing logged, got %s", v) } } From 5af75d33c3065666e944e6c27e60b98f628f4cff Mon Sep 17 00:00:00 2001 From: Jason Del Ponte Date: Tue, 31 Dec 2019 11:21:02 -0800 Subject: [PATCH 2/2] Update CHANGELOG_PENDING.md --- CHANGELOG_PENDING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 098359a1527..d0da95f3e27 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -7,3 +7,5 @@ ### SDK Enhancements ### SDK Bugs +* `aws/session`: Fix client init not exposing endpoint resolve error ([#3059](https://github.com/aws/aws-sdk-go/pull/3059)) + * Fixes the SDK API clients not surfacing endpoint resolution errors, when the EndpointResolver is unable to resolve an endpoint for the client and region.