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  }