1 package http
2
3 import (
4 "context"
5 "net/http"
6 "testing"
7
8 "github.com/aws/smithy-go/middleware"
9 )
10
11 func TestWithHeaderComment_CaseInsensitive(t *testing.T) {
12 stack, err := newTestStack(
13 WithHeaderComment("foo", "bar"),
14 )
15 if err != nil {
16 t.Errorf("expected no error on new stack, got %v", err)
17 }
18
19 r := injectBuildRequest(stack)
20 r.Header.Set("Foo", "baz")
21
22 if err := handle(stack); err != nil {
23 t.Errorf("expected no error on handle, got %v", err)
24 }
25
26 expectHeader(t, r.Header, "Foo", "baz (bar)")
27 }
28
29 func TestWithHeaderComment_Noop(t *testing.T) {
30 stack, err := newTestStack(
31 WithHeaderComment("foo", "bar"),
32 )
33 if err != nil {
34 t.Errorf("expected no error on new stack, got %v", err)
35 }
36
37 r := injectBuildRequest(stack)
38
39 if err := handle(stack); err != nil {
40 t.Errorf("expected no error on handle, got %v", err)
41 }
42
43 expectHeader(t, r.Header, "Foo", "")
44 }
45
46 func TestWithHeaderComment_MultiCaseInsensitive(t *testing.T) {
47 stack, err := newTestStack(
48 WithHeaderComment("foo", "c1"),
49 WithHeaderComment("Foo", "c2"),
50 WithHeaderComment("baz", "c3"),
51 WithHeaderComment("Baz", "c4"),
52 )
53 if err != nil {
54 t.Errorf("expected no error on new stack, got %v", err)
55 }
56
57 r := injectBuildRequest(stack)
58 r.Header.Set("Foo", "1")
59 r.Header.Set("Baz", "2")
60
61 if err := handle(stack); err != nil {
62 t.Errorf("expected no error on handle, got %v", err)
63 }
64
65 expectHeader(t, r.Header, "Foo", "1 (c1) (c2)")
66 expectHeader(t, r.Header, "Baz", "2 (c3) (c4)")
67 }
68
69 func newTestStack(fns ...func(*middleware.Stack) error) (*middleware.Stack, error) {
70 s := middleware.NewStack("", NewStackRequest)
71 for _, fn := range fns {
72 if err := fn(s); err != nil {
73 return nil, err
74 }
75 }
76 return s, nil
77 }
78
79 func handle(stack *middleware.Stack) error {
80 _, _, err := middleware.DecorateHandler(
81 middleware.HandlerFunc(
82 func(ctx context.Context, input interface{}) (
83 interface{}, middleware.Metadata, error,
84 ) {
85 return nil, middleware.Metadata{}, nil
86 },
87 ),
88 stack,
89 ).Handle(context.Background(), nil)
90 return err
91 }
92
93 func injectBuildRequest(s *middleware.Stack) *Request {
94 r := NewStackRequest()
95 s.Build.Add(
96 middleware.BuildMiddlewareFunc(
97 "injectBuildRequest",
98 func(ctx context.Context, in middleware.BuildInput, next middleware.BuildHandler) (
99 middleware.BuildOutput, middleware.Metadata, error,
100 ) {
101 return next.HandleBuild(ctx, middleware.BuildInput{Request: r})
102 },
103 ),
104 middleware.Before,
105 )
106 return r.(*Request)
107 }
108
109 func expectHeader(t *testing.T, header http.Header, h, ev string) {
110 if av := header.Get(h); ev != av {
111 t.Errorf("expected header '%s: %s', got '%s'", h, ev, av)
112 }
113 }
114
View as plain text