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