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  }