// Code generated by smithy-go-codegen DO NOT EDIT. package ec2query import ( "bytes" "context" "errors" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/internal/protocoltest/ec2query/types" smithydocument "github.com/aws/smithy-go/document" "github.com/aws/smithy-go/middleware" "github.com/aws/smithy-go/ptr" smithyrand "github.com/aws/smithy-go/rand" smithytesting "github.com/aws/smithy-go/testing" smithyhttp "github.com/aws/smithy-go/transport/http" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "io/ioutil" "math" "net/http" "testing" ) func TestClient_GreetingWithErrors_awsEc2queryDeserialize(t *testing.T) { cases := map[string]struct { StatusCode int Header http.Header BodyMediaType string Body []byte ExpectResult *GreetingWithErrorsOutput }{ // Ensures that operations with errors successfully know how to deserialize the // successful response "Ec2GreetingWithErrors": { StatusCode: 200, Header: http.Header{ "Content-Type": []string{"text/xml;charset=UTF-8"}, }, BodyMediaType: "application/xml", Body: []byte(` Hello requestid `), ExpectResult: &GreetingWithErrorsOutput{ Greeting: ptr.String("Hello"), }, }, } for name, c := range cases { t.Run(name, func(t *testing.T) { serverURL := "http://localhost:8888/" client := New(Options{ HTTPClient: smithyhttp.ClientDoFunc(func(r *http.Request) (*http.Response, error) { headers := http.Header{} for k, vs := range c.Header { for _, v := range vs { headers.Add(k, v) } } if len(c.BodyMediaType) != 0 && len(headers.Values("Content-Type")) == 0 { headers.Set("Content-Type", c.BodyMediaType) } response := &http.Response{ StatusCode: c.StatusCode, Header: headers, Request: r, } if len(c.Body) != 0 { response.ContentLength = int64(len(c.Body)) response.Body = ioutil.NopCloser(bytes.NewReader(c.Body)) } else { response.Body = http.NoBody } return response, nil }), APIOptions: []func(*middleware.Stack) error{ func(s *middleware.Stack) error { s.Finalize.Clear() s.Initialize.Remove(`OperationInputValidation`) return nil }, }, EndpointResolver: EndpointResolverFunc(func(region string, options EndpointResolverOptions) (e aws.Endpoint, err error) { e.URL = serverURL e.SigningRegion = "us-west-2" return e, err }), IdempotencyTokenProvider: smithyrand.NewUUIDIdempotencyToken(&smithytesting.ByteLoop{}), Region: "us-west-2", }) var params GreetingWithErrorsInput result, err := client.GreetingWithErrors(context.Background(), ¶ms) if err != nil { t.Fatalf("expect nil err, got %v", err) } if result == nil { t.Fatalf("expect not nil result") } opts := cmp.Options{ cmpopts.IgnoreUnexported( middleware.Metadata{}, ), cmp.FilterValues(func(x, y float64) bool { return math.IsNaN(x) && math.IsNaN(y) }, cmp.Comparer(func(_, _ interface{}) bool { return true })), cmp.FilterValues(func(x, y float32) bool { return math.IsNaN(float64(x)) && math.IsNaN(float64(y)) }, cmp.Comparer(func(_, _ interface{}) bool { return true })), cmpopts.IgnoreTypes(smithydocument.NoSerde{}), } if err := smithytesting.CompareValues(c.ExpectResult, result, opts...); err != nil { t.Errorf("expect c.ExpectResult value match:\n%v", err) } }) } } func TestClient_GreetingWithErrors_InvalidGreeting_awsEc2queryDeserialize(t *testing.T) { cases := map[string]struct { StatusCode int Header http.Header BodyMediaType string Body []byte ExpectError *types.InvalidGreeting }{ // Parses simple XML errors "Ec2InvalidGreetingError": { StatusCode: 400, Header: http.Header{ "Content-Type": []string{"text/xml;charset=UTF-8"}, }, BodyMediaType: "application/xml", Body: []byte(` InvalidGreeting Hi foo-id `), ExpectError: &types.InvalidGreeting{ Message: ptr.String("Hi"), }, }, } for name, c := range cases { t.Run(name, func(t *testing.T) { serverURL := "http://localhost:8888/" client := New(Options{ HTTPClient: smithyhttp.ClientDoFunc(func(r *http.Request) (*http.Response, error) { headers := http.Header{} for k, vs := range c.Header { for _, v := range vs { headers.Add(k, v) } } if len(c.BodyMediaType) != 0 && len(headers.Values("Content-Type")) == 0 { headers.Set("Content-Type", c.BodyMediaType) } response := &http.Response{ StatusCode: c.StatusCode, Header: headers, Request: r, } if len(c.Body) != 0 { response.ContentLength = int64(len(c.Body)) response.Body = ioutil.NopCloser(bytes.NewReader(c.Body)) } else { response.Body = http.NoBody } return response, nil }), APIOptions: []func(*middleware.Stack) error{ func(s *middleware.Stack) error { s.Finalize.Clear() s.Initialize.Remove(`OperationInputValidation`) return nil }, }, EndpointResolver: EndpointResolverFunc(func(region string, options EndpointResolverOptions) (e aws.Endpoint, err error) { e.URL = serverURL e.SigningRegion = "us-west-2" return e, err }), IdempotencyTokenProvider: smithyrand.NewUUIDIdempotencyToken(&smithytesting.ByteLoop{}), Region: "us-west-2", }) var params GreetingWithErrorsInput result, err := client.GreetingWithErrors(context.Background(), ¶ms) if err == nil { t.Fatalf("expect not nil err") } if result != nil { t.Fatalf("expect nil result, got %v", result) } var opErr interface { Service() string Operation() string } if !errors.As(err, &opErr) { t.Fatalf("expect *types.InvalidGreeting operation error, got %T", err) } if e, a := ServiceID, opErr.Service(); e != a { t.Errorf("expect %v operation service name, got %v", e, a) } if e, a := "GreetingWithErrors", opErr.Operation(); e != a { t.Errorf("expect %v operation service name, got %v", e, a) } var actualErr *types.InvalidGreeting if !errors.As(err, &actualErr) { t.Fatalf("expect *types.InvalidGreeting result error, got %T", err) } opts := cmp.Options{ cmpopts.IgnoreUnexported( middleware.Metadata{}, ), cmp.FilterValues(func(x, y float64) bool { return math.IsNaN(x) && math.IsNaN(y) }, cmp.Comparer(func(_, _ interface{}) bool { return true })), cmp.FilterValues(func(x, y float32) bool { return math.IsNaN(float64(x)) && math.IsNaN(float64(y)) }, cmp.Comparer(func(_, _ interface{}) bool { return true })), cmpopts.IgnoreTypes(smithydocument.NoSerde{}), } if err := smithytesting.CompareValues(c.ExpectError, actualErr, opts...); err != nil { t.Errorf("expect c.ExpectError value match:\n%v", err) } }) } } func TestClient_GreetingWithErrors_ComplexError_awsEc2queryDeserialize(t *testing.T) { cases := map[string]struct { StatusCode int Header http.Header BodyMediaType string Body []byte ExpectError *types.ComplexError }{ "Ec2ComplexError": { StatusCode: 400, Header: http.Header{ "Content-Type": []string{"text/xml;charset=UTF-8"}, }, BodyMediaType: "application/xml", Body: []byte(` ComplexError Hi Top level bar foo-id `), ExpectError: &types.ComplexError{ TopLevel: ptr.String("Top level"), Nested: &types.ComplexNestedErrorData{ Foo: ptr.String("bar"), }, }, }, } for name, c := range cases { t.Run(name, func(t *testing.T) { serverURL := "http://localhost:8888/" client := New(Options{ HTTPClient: smithyhttp.ClientDoFunc(func(r *http.Request) (*http.Response, error) { headers := http.Header{} for k, vs := range c.Header { for _, v := range vs { headers.Add(k, v) } } if len(c.BodyMediaType) != 0 && len(headers.Values("Content-Type")) == 0 { headers.Set("Content-Type", c.BodyMediaType) } response := &http.Response{ StatusCode: c.StatusCode, Header: headers, Request: r, } if len(c.Body) != 0 { response.ContentLength = int64(len(c.Body)) response.Body = ioutil.NopCloser(bytes.NewReader(c.Body)) } else { response.Body = http.NoBody } return response, nil }), APIOptions: []func(*middleware.Stack) error{ func(s *middleware.Stack) error { s.Finalize.Clear() s.Initialize.Remove(`OperationInputValidation`) return nil }, }, EndpointResolver: EndpointResolverFunc(func(region string, options EndpointResolverOptions) (e aws.Endpoint, err error) { e.URL = serverURL e.SigningRegion = "us-west-2" return e, err }), IdempotencyTokenProvider: smithyrand.NewUUIDIdempotencyToken(&smithytesting.ByteLoop{}), Region: "us-west-2", }) var params GreetingWithErrorsInput result, err := client.GreetingWithErrors(context.Background(), ¶ms) if err == nil { t.Fatalf("expect not nil err") } if result != nil { t.Fatalf("expect nil result, got %v", result) } var opErr interface { Service() string Operation() string } if !errors.As(err, &opErr) { t.Fatalf("expect *types.ComplexError operation error, got %T", err) } if e, a := ServiceID, opErr.Service(); e != a { t.Errorf("expect %v operation service name, got %v", e, a) } if e, a := "GreetingWithErrors", opErr.Operation(); e != a { t.Errorf("expect %v operation service name, got %v", e, a) } var actualErr *types.ComplexError if !errors.As(err, &actualErr) { t.Fatalf("expect *types.ComplexError result error, got %T", err) } opts := cmp.Options{ cmpopts.IgnoreUnexported( middleware.Metadata{}, ), cmp.FilterValues(func(x, y float64) bool { return math.IsNaN(x) && math.IsNaN(y) }, cmp.Comparer(func(_, _ interface{}) bool { return true })), cmp.FilterValues(func(x, y float32) bool { return math.IsNaN(float64(x)) && math.IsNaN(float64(y)) }, cmp.Comparer(func(_, _ interface{}) bool { return true })), cmpopts.IgnoreTypes(smithydocument.NoSerde{}), } if err := smithytesting.CompareValues(c.ExpectError, actualErr, opts...); err != nil { t.Errorf("expect c.ExpectError value match:\n%v", err) } }) } }