github.com/aavshr/aws-sdk-go@v1.41.3/private/protocol/query/unmarshal_error_test.go (about) 1 //go:build go1.8 2 // +build go1.8 3 4 package query 5 6 import ( 7 "io/ioutil" 8 "net/http" 9 "strings" 10 "testing" 11 12 "github.com/aavshr/aws-sdk-go/aws/awserr" 13 "github.com/aavshr/aws-sdk-go/aws/request" 14 ) 15 16 func TestUnmarshalError(t *testing.T) { 17 cases := map[string]struct { 18 Request *request.Request 19 Code, Msg string 20 ReqID string 21 Status int 22 }{ 23 "ErrorResponse": { 24 Request: &request.Request{ 25 HTTPResponse: &http.Response{ 26 StatusCode: 400, 27 Header: http.Header{}, 28 Body: ioutil.NopCloser(strings.NewReader( 29 `<ErrorResponse> 30 <Error> 31 <Code>codeAbc</Code><Message>msg123</Message> 32 </Error> 33 <RequestId>reqID123</RequestId> 34 </ErrorResponse>`)), 35 }, 36 }, 37 Code: "codeAbc", Msg: "msg123", 38 Status: 400, ReqID: "reqID123", 39 }, 40 "ServiceUnavailableException": { 41 Request: &request.Request{ 42 HTTPResponse: &http.Response{ 43 StatusCode: 502, 44 Header: http.Header{}, 45 Body: ioutil.NopCloser(strings.NewReader( 46 `<ServiceUnavailableException> 47 <Something>else</Something> 48 </ServiceUnavailableException>`)), 49 }, 50 }, 51 Code: "ServiceUnavailableException", 52 Msg: "service is unavailable", 53 Status: 502, 54 }, 55 "unknown tag": { 56 Request: &request.Request{ 57 HTTPResponse: &http.Response{ 58 StatusCode: 400, 59 Header: http.Header{}, 60 Body: ioutil.NopCloser(strings.NewReader( 61 `<Hello> 62 <World>.</World> 63 </Hello>`)), 64 }, 65 }, 66 Code: request.ErrCodeSerialization, 67 Msg: "failed to unmarshal error message", 68 Status: 400, 69 }, 70 } 71 72 for name, c := range cases { 73 t.Run(name, func(t *testing.T) { 74 r := c.Request 75 UnmarshalError(r) 76 if r.Error == nil { 77 t.Fatalf("expect error, got none") 78 } 79 80 aerr := r.Error.(awserr.RequestFailure) 81 if e, a := c.Code, aerr.Code(); e != a { 82 t.Errorf("expect %v code, got %v", e, a) 83 } 84 if e, a := c.Msg, aerr.Message(); e != a { 85 t.Errorf("expect %q message, got %q", e, a) 86 } 87 if e, a := c.ReqID, aerr.RequestID(); e != a { 88 t.Errorf("expect %v request ID, got %v", e, a) 89 } 90 if e, a := c.Status, aerr.StatusCode(); e != a { 91 t.Errorf("expect %v status code, got %v", e, a) 92 } 93 }) 94 } 95 }