diff options
author | vitalyisaev <vitalyisaev@ydb.tech> | 2023-12-12 21:55:07 +0300 |
---|---|---|
committer | vitalyisaev <vitalyisaev@ydb.tech> | 2023-12-12 22:25:10 +0300 |
commit | 4967f99474a4040ba150eb04995de06342252718 (patch) | |
tree | c9c118836513a8fab6e9fcfb25be5d404338bca7 /vendor/github.com/aws/smithy-go/middleware/middleware_test.go | |
parent | 2ce9cccb9b0bdd4cd7a3491dc5cbf8687cda51de (diff) | |
download | ydb-4967f99474a4040ba150eb04995de06342252718.tar.gz |
YQ Connector: prepare code base for S3 integration
1. Кодовая база Коннектора переписана с помощью Go дженериков так, чтобы добавление нового источника данных (в частности S3 + csv) максимально переиспользовало имеющийся код (чтобы сохранялась логика нарезания на блоки данных, учёт трафика и пр.)
2. API Connector расширено для работы с S3, но ещё пока не протестировано.
Diffstat (limited to 'vendor/github.com/aws/smithy-go/middleware/middleware_test.go')
-rw-r--r-- | vendor/github.com/aws/smithy-go/middleware/middleware_test.go | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/vendor/github.com/aws/smithy-go/middleware/middleware_test.go b/vendor/github.com/aws/smithy-go/middleware/middleware_test.go new file mode 100644 index 0000000000..0f550987f4 --- /dev/null +++ b/vendor/github.com/aws/smithy-go/middleware/middleware_test.go @@ -0,0 +1,80 @@ +package middleware + +import ( + "context" + "fmt" + "testing" +) + +var _ Handler = (HandlerFunc)(nil) +var _ Handler = (decoratedHandler{}) + +type mockMiddleware struct { + id int +} + +func (m mockMiddleware) ID() string { + return fmt.Sprintf("mock middleware %d", m.id) +} + +func (m mockMiddleware) HandleMiddleware(ctx context.Context, input interface{}, next Handler) ( + output interface{}, metadata Metadata, err error, +) { + output, metadata, err = next.Handle(ctx, input) + + mockKeySet(&metadata, m.id, fmt.Sprintf("mock-%d", m.id)) + + return output, metadata, err +} + +type mockKey struct{ Key int } + +func mockKeySet(md *Metadata, key int, val string) { + md.Set(mockKey{Key: key}, val) +} + +func mockKeyGet(md MetadataReader, key int) string { + v := md.Get(mockKey{Key: key}) + if v == nil { + return "" + } + + return v.(string) +} + +type mockHandler struct { +} + +func (m *mockHandler) Handle(ctx context.Context, input interface{}) ( + output interface{}, metadata Metadata, err error, +) { + return nil, metadata, nil +} + +func TestDecorateHandler(t *testing.T) { + mockHandler := &mockHandler{} + h := DecorateHandler( + mockHandler, + mockMiddleware{id: 0}, + mockMiddleware{id: 1}, + mockMiddleware{id: 2}, + ) + + _, metadata, err := h.Handle(context.Background(), struct{}{}) + if err != nil { + t.Fatalf("expect no error, got %v", err) + } + + expectMeta := map[int]interface{}{ + 0: "mock-0", + 1: "mock-1", + 2: "mock-2", + } + + for key, expect := range expectMeta { + v := mockKeyGet(metadata, key) + if e, a := expect, v; e != a { + t.Errorf("expect %v: %v metadata got %v", key, e, a) + } + } +} |