...

Source file src/github.com/aws/smithy-go/middleware/middleware_test.go

Documentation: github.com/aws/smithy-go/middleware

     1  package middleware
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"testing"
     7  )
     8  
     9  var _ Handler = (HandlerFunc)(nil)
    10  var _ Handler = (decoratedHandler{})
    11  
    12  type mockMiddleware struct {
    13  	id int
    14  }
    15  
    16  func (m mockMiddleware) ID() string {
    17  	return fmt.Sprintf("mock middleware %d", m.id)
    18  }
    19  
    20  func (m mockMiddleware) HandleMiddleware(ctx context.Context, input interface{}, next Handler) (
    21  	output interface{}, metadata Metadata, err error,
    22  ) {
    23  	output, metadata, err = next.Handle(ctx, input)
    24  
    25  	mockKeySet(&metadata, m.id, fmt.Sprintf("mock-%d", m.id))
    26  
    27  	return output, metadata, err
    28  }
    29  
    30  type mockKey struct{ Key int }
    31  
    32  func mockKeySet(md *Metadata, key int, val string) {
    33  	md.Set(mockKey{Key: key}, val)
    34  }
    35  
    36  func mockKeyGet(md MetadataReader, key int) string {
    37  	v := md.Get(mockKey{Key: key})
    38  	if v == nil {
    39  		return ""
    40  	}
    41  
    42  	return v.(string)
    43  }
    44  
    45  type mockHandler struct {
    46  }
    47  
    48  func (m *mockHandler) Handle(ctx context.Context, input interface{}) (
    49  	output interface{}, metadata Metadata, err error,
    50  ) {
    51  	return nil, metadata, nil
    52  }
    53  
    54  func TestDecorateHandler(t *testing.T) {
    55  	mockHandler := &mockHandler{}
    56  	h := DecorateHandler(
    57  		mockHandler,
    58  		mockMiddleware{id: 0},
    59  		mockMiddleware{id: 1},
    60  		mockMiddleware{id: 2},
    61  	)
    62  
    63  	_, metadata, err := h.Handle(context.Background(), struct{}{})
    64  	if err != nil {
    65  		t.Fatalf("expect no error, got %v", err)
    66  	}
    67  
    68  	expectMeta := map[int]interface{}{
    69  		0: "mock-0",
    70  		1: "mock-1",
    71  		2: "mock-2",
    72  	}
    73  
    74  	for key, expect := range expectMeta {
    75  		v := mockKeyGet(metadata, key)
    76  		if e, a := expect, v; e != a {
    77  			t.Errorf("expect %v: %v metadata got %v", key, e, a)
    78  		}
    79  	}
    80  }
    81  

View as plain text