github.com/aavshr/aws-sdk-go@v1.41.3/service/route53/unmarshal_error_test.go (about) 1 //go:build go1.8 2 // +build go1.8 3 4 package route53 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 TestUnmarshalInvalidChangeBatch(t *testing.T) { 17 const errorMessage = ` 18 Tried to create resource record set duplicate.example.com. type A, 19 but it already exists 20 ` 21 22 type batchError struct { 23 Code, Message string 24 } 25 26 cases := map[string]struct { 27 Request *request.Request 28 Code, Message, RequestID string 29 StatusCode int 30 BatchErrors []batchError 31 }{ 32 "standard error": { 33 Request: &request.Request{ 34 HTTPResponse: &http.Response{ 35 StatusCode: 400, 36 Header: http.Header{}, 37 Body: ioutil.NopCloser(strings.NewReader( 38 `<?xml version="1.0" encoding="UTF-8"?> 39 <ErrorResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/"> 40 <Error> 41 <Code>InvalidDomainName</Code> 42 <Message>The domain name is invalid</Message> 43 </Error> 44 <RequestId>12345</RequestId> 45 </ErrorResponse>`)), 46 }, 47 }, 48 Code: "InvalidDomainName", Message: "The domain name is invalid", 49 StatusCode: 400, RequestID: "12345", 50 }, 51 "batched error": { 52 Request: &request.Request{ 53 HTTPResponse: &http.Response{ 54 StatusCode: 400, 55 Header: http.Header{}, 56 Body: ioutil.NopCloser(strings.NewReader( 57 `<?xml version="1.0" encoding="UTF-8"?> 58 <InvalidChangeBatch xmlns="https://route53.amazonaws.com/doc/2013-04-01/"> 59 <Messages> 60 <Message>` + errorMessage + `</Message> 61 </Messages> 62 <RequestId>12345</RequestId> 63 </InvalidChangeBatch>`)), 64 }, 65 }, 66 Code: "InvalidChangeBatch", Message: "ChangeBatch errors occurred", 67 StatusCode: 400, RequestID: "12345", 68 BatchErrors: []batchError{ 69 {Code: "InvalidChangeBatch", Message: errorMessage}, 70 }, 71 }, 72 } 73 74 for name, c := range cases { 75 t.Run(name, func(t *testing.T) { 76 unmarshalChangeResourceRecordSetsError(c.Request) 77 err := c.Request.Error 78 if err == nil { 79 t.Error("expected error, but received none") 80 } 81 82 reqErr := err.(awserr.RequestFailure) 83 if e, a := c.StatusCode, reqErr.StatusCode(); e != a { 84 t.Errorf("expected %d status, got %d", e, a) 85 } 86 if e, a := c.Code, reqErr.Code(); e != a { 87 t.Errorf("expected %v code, got %v", e, a) 88 } 89 if e, a := c.Message, reqErr.Message(); e != a { 90 t.Errorf("expected %q message, got %q", e, a) 91 } 92 if e, a := c.RequestID, reqErr.RequestID(); e != a { 93 t.Errorf("expected %v request ID, got %v", e, a) 94 } 95 96 batchErr := err.(awserr.BatchedErrors) 97 batchedErrs := batchErr.OrigErrs() 98 99 if e, a := len(c.BatchErrors), len(batchedErrs); e != a { 100 t.Fatalf("expect %v batch errors, got %v", e, a) 101 } 102 103 for i, ee := range c.BatchErrors { 104 bErr := batchedErrs[i].(awserr.Error) 105 if e, a := ee.Code, bErr.Code(); e != a { 106 t.Errorf("expect %v code, got %v", e, a) 107 } 108 if e, a := ee.Message, bErr.Message(); e != a { 109 t.Errorf("expect %v message, got %v", e, a) 110 } 111 } 112 }) 113 } 114 }