aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/aws/aws-sdk-go-v2/internal/awstesting/util.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/aws-sdk-go-v2/internal/awstesting/util.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/aws-sdk-go-v2/internal/awstesting/util.go')
-rw-r--r--vendor/github.com/aws/aws-sdk-go-v2/internal/awstesting/util.go154
1 files changed, 154 insertions, 0 deletions
diff --git a/vendor/github.com/aws/aws-sdk-go-v2/internal/awstesting/util.go b/vendor/github.com/aws/aws-sdk-go-v2/internal/awstesting/util.go
new file mode 100644
index 0000000000..9a0d991096
--- /dev/null
+++ b/vendor/github.com/aws/aws-sdk-go-v2/internal/awstesting/util.go
@@ -0,0 +1,154 @@
+package awstesting
+
+import (
+ "context"
+ "io"
+ "os"
+ "runtime"
+ "strings"
+ "time"
+
+ "github.com/aws/aws-sdk-go-v2/aws"
+)
+
+// ZeroReader is a io.Reader which will always write zeros to the byte slice provided.
+type ZeroReader struct{}
+
+// Read fills the provided byte slice with zeros returning the number of bytes written.
+func (r *ZeroReader) Read(b []byte) (int, error) {
+ for i := 0; i < len(b); i++ {
+ b[i] = 0
+ }
+ return len(b), nil
+}
+
+// ReadCloser is a io.ReadCloser for unit testing.
+// Designed to test for leaks and whether a handle has
+// been closed
+type ReadCloser struct {
+ Size int
+ Closed bool
+ set bool
+ FillData func(bool, []byte, int, int)
+}
+
+// Read will call FillData and fill it with whatever data needed.
+// Decrements the size until zero, then return io.EOF.
+func (r *ReadCloser) Read(b []byte) (int, error) {
+ if r.Closed {
+ return 0, io.EOF
+ }
+
+ delta := len(b)
+ if delta > r.Size {
+ delta = r.Size
+ }
+ r.Size -= delta
+
+ for i := 0; i < delta; i++ {
+ b[i] = 'a'
+ }
+
+ if r.FillData != nil {
+ r.FillData(r.set, b, r.Size, delta)
+ }
+ r.set = true
+
+ if r.Size > 0 {
+ return delta, nil
+ }
+ return delta, io.EOF
+}
+
+// Close sets Closed to true and returns no error
+func (r *ReadCloser) Close() error {
+ r.Closed = true
+ return nil
+}
+
+// A FakeContext provides a simple stub implementation of a Context
+type FakeContext struct {
+ Error error
+ DoneCh chan struct{}
+}
+
+// Deadline always will return not set
+func (c *FakeContext) Deadline() (deadline time.Time, ok bool) {
+ return time.Time{}, false
+}
+
+// Done returns a read channel for listening to the Done event
+func (c *FakeContext) Done() <-chan struct{} {
+ return c.DoneCh
+}
+
+// Err returns the error, is nil if not set.
+func (c *FakeContext) Err() error {
+ return c.Error
+}
+
+// Value ignores the Value and always returns nil
+func (c *FakeContext) Value(key interface{}) interface{} {
+ return nil
+}
+
+// StashEnv stashes the current environment variables except variables listed in envToKeepx
+// Returns an function to pop out old environment
+func StashEnv(envToKeep ...string) []string {
+ if runtime.GOOS == "windows" {
+ envToKeep = append(envToKeep, "ComSpec")
+ envToKeep = append(envToKeep, "SYSTEM32")
+ envToKeep = append(envToKeep, "SYSTEMROOT")
+ }
+ envToKeep = append(envToKeep, "PATH", "HOME", "USERPROFILE")
+ extraEnv := getEnvs(envToKeep)
+ originalEnv := os.Environ()
+ os.Clearenv() // clear env
+ for key, val := range extraEnv {
+ os.Setenv(key, val)
+ }
+ return originalEnv
+}
+
+// PopEnv takes the list of the environment values and injects them into the
+// process's environment variable data. Clears any existing environment values
+// that may already exist.
+func PopEnv(env []string) {
+ os.Clearenv()
+
+ for _, e := range env {
+ p := strings.SplitN(e, "=", 2)
+ k, v := p[0], ""
+ if len(p) > 1 {
+ v = p[1]
+ }
+ os.Setenv(k, v)
+ }
+}
+
+// MockCredentialsProvider is a type that can be used to mock out credentials
+// providers
+type MockCredentialsProvider struct {
+ RetrieveFn func(ctx context.Context) (aws.Credentials, error)
+ InvalidateFn func()
+}
+
+// Retrieve calls the RetrieveFn
+func (p MockCredentialsProvider) Retrieve(ctx context.Context) (aws.Credentials, error) {
+ return p.RetrieveFn(ctx)
+}
+
+// Invalidate calls the InvalidateFn
+func (p MockCredentialsProvider) Invalidate() {
+ p.InvalidateFn()
+}
+
+func getEnvs(envs []string) map[string]string {
+ extraEnvs := make(map[string]string)
+ for _, env := range envs {
+ if val, ok := os.LookupEnv(env); ok && len(val) > 0 {
+ extraEnvs[env] = val
+ }
+ }
+ return extraEnvs
+}