...

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

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

     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