aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/aws/smithy-go/encoding/httpbinding/encode_test.go
diff options
context:
space:
mode:
authorvitalyisaev <vitalyisaev@ydb.tech>2023-12-12 21:55:07 +0300
committervitalyisaev <vitalyisaev@ydb.tech>2023-12-12 22:25:10 +0300
commit4967f99474a4040ba150eb04995de06342252718 (patch)
treec9c118836513a8fab6e9fcfb25be5d404338bca7 /vendor/github.com/aws/smithy-go/encoding/httpbinding/encode_test.go
parent2ce9cccb9b0bdd4cd7a3491dc5cbf8687cda51de (diff)
downloadydb-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/encoding/httpbinding/encode_test.go')
-rw-r--r--vendor/github.com/aws/smithy-go/encoding/httpbinding/encode_test.go146
1 files changed, 146 insertions, 0 deletions
diff --git a/vendor/github.com/aws/smithy-go/encoding/httpbinding/encode_test.go b/vendor/github.com/aws/smithy-go/encoding/httpbinding/encode_test.go
new file mode 100644
index 0000000000..6d972ae508
--- /dev/null
+++ b/vendor/github.com/aws/smithy-go/encoding/httpbinding/encode_test.go
@@ -0,0 +1,146 @@
+package httpbinding
+
+import (
+ "net/http"
+ "net/url"
+ "reflect"
+ "testing"
+)
+
+func TestEncoder(t *testing.T) {
+ actual := &http.Request{
+ Header: http.Header{
+ "custom-user-header": {"someValue"},
+ },
+ URL: &url.URL{
+ Path: "/some/{pathKeyOne}/{pathKeyTwo}",
+ RawQuery: "someExistingKeys=foobar",
+ },
+ }
+
+ expected := &http.Request{
+ Header: map[string][]string{
+ "custom-user-header": {"someValue"},
+ "x-amzn-header-foo": {"someValue"},
+ "x-amzn-meta-foo": {"someValue"},
+ },
+ URL: &url.URL{
+ Path: "/some/someValue/path",
+ RawPath: "/some/someValue/path",
+ RawQuery: "someExistingKeys=foobar&someKey=someValue&someKey=otherValue",
+ },
+ }
+
+ encoder, err := NewEncoder(actual.URL.Path, actual.URL.RawQuery, actual.Header)
+ if err != nil {
+ t.Fatalf("expected no error, got %v", err)
+ }
+
+ // Headers
+ encoder.AddHeader("x-amzn-header-foo").String("someValue")
+ encoder.Headers("x-amzn-meta-").AddHeader("foo").String("someValue")
+
+ // Query
+ encoder.SetQuery("someKey").String("someValue")
+ encoder.AddQuery("someKey").String("otherValue")
+
+ // URI
+ if err := encoder.SetURI("pathKeyOne").String("someValue"); err != nil {
+ t.Errorf("expected no err, but got %v", err)
+ }
+
+ // URI
+ if err := encoder.SetURI("pathKeyTwo").String("path"); err != nil {
+ t.Errorf("expected no err, but got %v", err)
+ }
+
+ if actual, err = encoder.Encode(actual); err != nil {
+ t.Errorf("expected no err, but got %v", err)
+ }
+
+ if !reflect.DeepEqual(expected, actual) {
+ t.Errorf("expected %v, but got %v", expected, actual)
+ }
+}
+
+func TestEncoderHasHeader(t *testing.T) {
+ encoder, err := NewEncoder("/", "", http.Header{})
+ if err != nil {
+ t.Fatalf("expected no error, got %v", err)
+ }
+
+ if h := "i-dont-exist"; encoder.HasHeader(h) {
+ t.Errorf("expect %v not to be set", h)
+ }
+
+ encoder.AddHeader("I-do-exist").String("some value")
+
+ if h := "I-do-exist"; !encoder.HasHeader(h) {
+ t.Errorf("expect %v to be set", h)
+ }
+
+}
+
+func TestEncoderHasQuery(t *testing.T) {
+ encoder, err := NewEncoder("/", "", http.Header{})
+ if err != nil {
+ t.Fatalf("expected no error, got %v", err)
+ }
+
+ if q := "i-dont-exist"; encoder.HasQuery(q) {
+ t.Errorf("expect %v not to be set", q)
+ }
+
+ encoder.AddQuery("I-do-exist").String("some value")
+
+ if q := "I-do-exist"; !encoder.HasQuery(q) {
+ t.Errorf("expect %v to be set", q)
+ }
+
+}
+
+func TestEncodeContentLength(t *testing.T) {
+ cases := map[string]struct {
+ headerValue string
+ expected int64
+ wantErr bool
+ }{
+ "valid number": {
+ headerValue: "1024",
+ expected: 1024,
+ },
+ "invalid number": {
+ headerValue: "1024.5",
+ wantErr: true,
+ },
+ "not a number": {
+ headerValue: "NaN",
+ wantErr: true,
+ },
+ }
+
+ for name, tt := range cases {
+ t.Run(name, func(t *testing.T) {
+ encoder, err := NewEncoder("/", "", http.Header{})
+ if err != nil {
+ t.Fatalf("expect no error, got %v", err)
+ }
+
+ encoder.SetHeader("Content-Length").String(tt.headerValue)
+
+ req := &http.Request{URL: &url.URL{}}
+ req, err = encoder.Encode(req)
+ if (err != nil) != tt.wantErr {
+ t.Fatalf("unexpected error value wantErr=%v", tt.wantErr)
+ } else if tt.wantErr {
+ return
+ }
+ if e, a := tt.expected, req.ContentLength; e != a {
+ t.Errorf("expect %v, got %v", e, a)
+ }
+ if v := req.Header.Get("Content-Length"); len(v) > 0 {
+ t.Errorf("expect header not to be set")
+ }
+ })
+ }
+}