Skip to content

Commit

Permalink
fix lint error, add test and helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
skotambkar committed Jan 13, 2021
1 parent 434a46f commit 3b6fbc7
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 5 deletions.
10 changes: 9 additions & 1 deletion aws/middleware/middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,11 @@ func AddRecordResponseTiming(stack *middleware.Stack) error {
return stack.Deserialize.Add(&RecordResponseTiming{}, middleware.After)
}

// rawResponseKey is the accessor key used to store and access the
// raw response within the response metadata.
type rawResponseKey struct{}

// addRawResponse middleware adds raw response on to the metadata
type addRawResponse struct{}

// ID the identifier for the ClientRequestID
Expand All @@ -153,8 +156,13 @@ func (m addRawResponse) HandleDeserialize(ctx context.Context, in middleware.Des
return out, metadata, err
}

// AddResponseMetadata adds middleware to the middleware stack that
// AddRawResponseToMetadata adds middleware to the middleware stack that
// store raw response on to the metadata.
func AddRawResponseToMetadata(stack *middleware.Stack) error {
return stack.Deserialize.Add(&addRawResponse{}, middleware.After)
}

// GetRawResponse returns raw response set on metadata
func GetRawResponse(metadata middleware.Metadata) interface{} {
return metadata.Get(rawResponseKey{})
}
6 changes: 6 additions & 0 deletions aws/retry/metadata.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package retry

import (
awsmiddle "github.com/aws/aws-sdk-go-v2/aws/middleware"
"github.com/aws/smithy-go/middleware"
)

Expand Down Expand Up @@ -44,3 +45,8 @@ type AttemptResult struct {
func addAttemptResults(metadata *middleware.Metadata, v AttemptResults) {
metadata.Set(attemptResultsKey{}, v)
}

// GetRawResponse returns raw response recorded for the attempt result
func (a AttemptResult) GetRawResponse() interface{} {
return awsmiddle.GetRawResponse(a.ResponseMetadata)
}
52 changes: 48 additions & 4 deletions aws/retry/middleware_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ func TestAttemptMiddleware(t *testing.T) {
Err error
ExpectResults AttemptResults
}{
"no error single attempt": {
"no error, no response in a single attempt": {
Next: func(retries *[]retryMetadata) middleware.FinalizeHandler {
return middleware.FinalizeHandlerFunc(func(ctx context.Context, in middleware.FinalizeInput) (out middleware.FinalizeOutput, metadata middleware.Metadata, err error) {
m, ok := getRetryMetadata(ctx)
Expand All @@ -159,6 +159,34 @@ func TestAttemptMiddleware(t *testing.T) {
{},
}},
},
"no error in a single attempt": {
Next: func(retries *[]retryMetadata) middleware.FinalizeHandler {
return middleware.FinalizeHandlerFunc(func(ctx context.Context, in middleware.FinalizeInput) (out middleware.FinalizeOutput, metadata middleware.Metadata, err error) {
m, ok := getRetryMetadata(ctx)
if ok {
*retries = append(*retries, m)
}
setMockRawResponse(&metadata, "mockResponse")
return out, metadata, err
})
},
Expect: []retryMetadata{
{
AttemptNum: 1,
AttemptTime: time.Date(2020, 8, 19, 10, 20, 30, 0, time.UTC),
MaxAttempts: 3,
},
},
ExpectResults: AttemptResults{Results: []AttemptResult{
{
ResponseMetadata: func() middleware.Metadata {
m := middleware.Metadata{}
setMockRawResponse(&m, "mockResponse")
return m
}(),
},
}},
},
"retries errors": {
Next: func(retries *[]retryMetadata) middleware.FinalizeHandler {
num := 0
Expand Down Expand Up @@ -326,6 +354,8 @@ func TestAttemptMiddleware(t *testing.T) {

if err != nil {
metadata.Set("testKey", "testValue")
} else {
setMockRawResponse(&metadata, "mockResponse")
}
return out, metadata, err
})
Expand All @@ -348,12 +378,18 @@ func TestAttemptMiddleware(t *testing.T) {
Retryable: true,
Retried: true,
ResponseMetadata: func() middleware.Metadata {
m := &(middleware.Metadata{})
m := middleware.Metadata{}
m.Set("testKey", "testValue")
return *m
return m
}(),
},
{
ResponseMetadata: func() middleware.Metadata {
m := middleware.Metadata{}
setMockRawResponse(&m, "mockResponse")
return m
}(),
},
{},
}},
},
}
Expand Down Expand Up @@ -401,3 +437,11 @@ func TestAttemptMiddleware(t *testing.T) {
})
}
}

// mockRawResponseKey is used to test the behavior when response metadata is
// nested within the attempt request.
type mockRawResponseKey struct{}

func setMockRawResponse(m *middleware.Metadata, v interface{}) {
m.Set(mockRawResponseKey{}, v)
}

0 comments on commit 3b6fbc7

Please sign in to comment.