...

Source file src/github.com/aws/smithy-go/transport/http/client_test.go

Documentation: github.com/aws/smithy-go/transport/http

     1  package http
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"fmt"
     7  	"net/http"
     8  	"testing"
     9  
    10  	smithy "github.com/aws/smithy-go"
    11  )
    12  
    13  func TestClientHandler_Handle(t *testing.T) {
    14  	cases := map[string]struct {
    15  		Context   context.Context
    16  		Client    ClientDo
    17  		ExpectErr func(error) error
    18  	}{
    19  		"no error": {
    20  			Context: context.Background(),
    21  			Client: ClientDoFunc(func(*http.Request) (*http.Response, error) {
    22  				return &http.Response{}, nil
    23  			}),
    24  		},
    25  		"send error": {
    26  			Context: context.Background(),
    27  			Client: ClientDoFunc(func(*http.Request) (*http.Response, error) {
    28  				return nil, fmt.Errorf("some error")
    29  			}),
    30  			ExpectErr: func(err error) error {
    31  				var sendError *RequestSendError
    32  				if !errors.As(err, &sendError) {
    33  					return fmt.Errorf("expect error to be %T, %v", sendError, err)
    34  				}
    35  
    36  				var cancelError *smithy.CanceledError
    37  				if errors.As(err, &cancelError) {
    38  					return fmt.Errorf("expect error to not be %T, %v", cancelError, err)
    39  				}
    40  
    41  				return nil
    42  			},
    43  		},
    44  		"canceled error": {
    45  			Context: func() context.Context {
    46  				ctx, fn := context.WithCancel(context.Background())
    47  				fn()
    48  				return ctx
    49  			}(),
    50  			Client: ClientDoFunc(func(*http.Request) (*http.Response, error) {
    51  				return nil, fmt.Errorf("some error")
    52  			}),
    53  			ExpectErr: func(err error) error {
    54  				var sendError *RequestSendError
    55  				if errors.As(err, &sendError) {
    56  					return fmt.Errorf("expect error to not be %T, %v", sendError, err)
    57  				}
    58  
    59  				var cancelError *smithy.CanceledError
    60  				if !errors.As(err, &cancelError) {
    61  					return fmt.Errorf("expect error to be %T, %v", cancelError, err)
    62  				}
    63  
    64  				return nil
    65  			},
    66  		},
    67  	}
    68  
    69  	for name, c := range cases {
    70  		t.Run(name, func(t *testing.T) {
    71  			handler := NewClientHandler(c.Client)
    72  			resp, _, err := handler.Handle(c.Context, NewStackRequest())
    73  
    74  			if c.ExpectErr != nil {
    75  				if err == nil {
    76  					t.Fatalf("expect error, got none")
    77  				}
    78  				if err = c.ExpectErr(err); err != nil {
    79  					t.Fatalf("expect error match failed, %v", err)
    80  				}
    81  				return
    82  			}
    83  			if err != nil {
    84  				t.Fatalf("expect no error, got %v", err)
    85  			}
    86  
    87  			if _, ok := resp.(*Response); !ok {
    88  				t.Fatalf("expect Response type, got %T", resp)
    89  			}
    90  		})
    91  	}
    92  
    93  }
    94  

View as plain text