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