github.com/aavshr/aws-sdk-go@v1.41.3/private/protocol/ec2query/unmarshal_error_test.go (about) 1 //go:build go1.8 2 // +build go1.8 3 4 package ec2query 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 `<Response> 30 <Errors> 31 <Error> 32 <Code>codeAbc</Code> 33 <Message>msg123</Message> 34 </Error> 35 </Errors> 36 <RequestID>reqID123</RequestID> 37 </Response>`)), 38 }, 39 }, 40 Code: "codeAbc", Msg: "msg123", 41 Status: 400, ReqID: "reqID123", 42 }, 43 "unknown tag": { 44 Request: &request.Request{ 45 HTTPResponse: &http.Response{ 46 StatusCode: 400, 47 Header: http.Header{}, 48 Body: ioutil.NopCloser(strings.NewReader( 49 `<Hello> 50 <World>.</World> 51 </Hello>`)), 52 }, 53 }, 54 Code: request.ErrCodeSerialization, 55 Msg: "failed to unmarshal error message", 56 Status: 400, 57 }, 58 } 59 60 for name, c := range cases { 61 t.Run(name, func(t *testing.T) { 62 r := c.Request 63 UnmarshalError(r) 64 if r.Error == nil { 65 t.Fatalf("expect error, got none") 66 } 67 68 aerr := r.Error.(awserr.RequestFailure) 69 if e, a := c.Code, aerr.Code(); e != a { 70 t.Errorf("expect %v code, got %v", e, a) 71 } 72 if e, a := c.Msg, aerr.Message(); e != a { 73 t.Errorf("expect %q message, got %q", e, a) 74 } 75 if e, a := c.ReqID, aerr.RequestID(); e != a { 76 t.Errorf("expect %v request ID, got %v", e, a) 77 } 78 if e, a := c.Status, aerr.StatusCode(); e != a { 79 t.Errorf("expect %v status code, got %v", e, a) 80 } 81 }) 82 } 83 }