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  }