Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'workhorse/internal/objectstore/s3_object_test.go')
-rw-r--r--workhorse/internal/objectstore/s3_object_test.go174
1 files changed, 0 insertions, 174 deletions
diff --git a/workhorse/internal/objectstore/s3_object_test.go b/workhorse/internal/objectstore/s3_object_test.go
deleted file mode 100644
index c7426e3843b..00000000000
--- a/workhorse/internal/objectstore/s3_object_test.go
+++ /dev/null
@@ -1,174 +0,0 @@
-package objectstore_test
-
-import (
- "context"
- "fmt"
- "io"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- "sync"
- "testing"
- "time"
-
- "github.com/aws/aws-sdk-go/aws/awserr"
- "github.com/aws/aws-sdk-go/aws/session"
- "github.com/aws/aws-sdk-go/service/s3"
- "github.com/stretchr/testify/require"
-
- "gitlab.com/gitlab-org/gitlab/workhorse/internal/config"
- "gitlab.com/gitlab-org/gitlab/workhorse/internal/objectstore"
- "gitlab.com/gitlab-org/gitlab/workhorse/internal/objectstore/test"
- "gitlab.com/gitlab-org/gitlab/workhorse/internal/testhelper"
-)
-
-type failedReader struct {
- io.Reader
-}
-
-func (r *failedReader) Read(p []byte) (int, error) {
- origErr := fmt.Errorf("entity is too large")
- return 0, awserr.New("Read", "read failed", origErr)
-}
-
-func TestS3ObjectUpload(t *testing.T) {
- testCases := []struct {
- encryption string
- }{
- {encryption: ""},
- {encryption: s3.ServerSideEncryptionAes256},
- {encryption: s3.ServerSideEncryptionAwsKms},
- }
-
- for _, tc := range testCases {
- t.Run(fmt.Sprintf("encryption=%v", tc.encryption), func(t *testing.T) {
- creds, config, sess, ts := test.SetupS3(t, tc.encryption)
- defer ts.Close()
-
- deadline := time.Now().Add(testTimeout)
- tmpDir, err := ioutil.TempDir("", "workhorse-test-")
- require.NoError(t, err)
- defer os.Remove(tmpDir)
-
- objectName := filepath.Join(tmpDir, "s3-test-data")
- ctx, cancel := context.WithCancel(context.Background())
-
- object, err := objectstore.NewS3Object(objectName, creds, config)
- require.NoError(t, err)
-
- // copy data
- n, err := object.Consume(ctx, strings.NewReader(test.ObjectContent), deadline)
- require.NoError(t, err)
- require.Equal(t, test.ObjectSize, n, "Uploaded file mismatch")
-
- test.S3ObjectExists(t, sess, config, objectName, test.ObjectContent)
- test.CheckS3Metadata(t, sess, config, objectName)
-
- cancel()
-
- testhelper.Retry(t, 5*time.Second, func() error {
- if test.S3ObjectDoesNotExist(t, sess, config, objectName) {
- return nil
- }
-
- return fmt.Errorf("file is still present")
- })
- })
- }
-}
-
-func TestConcurrentS3ObjectUpload(t *testing.T) {
- creds, uploadsConfig, uploadsSession, uploadServer := test.SetupS3WithBucket(t, "uploads", "")
- defer uploadServer.Close()
-
- // This will return a separate S3 endpoint
- _, artifactsConfig, artifactsSession, artifactsServer := test.SetupS3WithBucket(t, "artifacts", "")
- defer artifactsServer.Close()
-
- deadline := time.Now().Add(testTimeout)
- tmpDir, err := ioutil.TempDir("", "workhorse-test-")
- require.NoError(t, err)
- defer os.Remove(tmpDir)
-
- var wg sync.WaitGroup
-
- for i := 0; i < 4; i++ {
- wg.Add(1)
-
- go func(index int) {
- var sess *session.Session
- var config config.S3Config
-
- if index%2 == 0 {
- sess = uploadsSession
- config = uploadsConfig
- } else {
- sess = artifactsSession
- config = artifactsConfig
- }
-
- name := fmt.Sprintf("s3-test-data-%d", index)
- objectName := filepath.Join(tmpDir, name)
- ctx, cancel := context.WithCancel(context.Background())
- defer cancel()
-
- object, err := objectstore.NewS3Object(objectName, creds, config)
- require.NoError(t, err)
-
- // copy data
- n, err := object.Consume(ctx, strings.NewReader(test.ObjectContent), deadline)
- require.NoError(t, err)
- require.Equal(t, test.ObjectSize, n, "Uploaded file mismatch")
-
- test.S3ObjectExists(t, sess, config, objectName, test.ObjectContent)
- wg.Done()
- }(i)
- }
-
- wg.Wait()
-}
-
-func TestS3ObjectUploadCancel(t *testing.T) {
- creds, config, _, ts := test.SetupS3(t, "")
- defer ts.Close()
-
- ctx, cancel := context.WithCancel(context.Background())
-
- deadline := time.Now().Add(testTimeout)
- tmpDir, err := ioutil.TempDir("", "workhorse-test-")
- require.NoError(t, err)
- defer os.Remove(tmpDir)
-
- objectName := filepath.Join(tmpDir, "s3-test-data")
-
- object, err := objectstore.NewS3Object(objectName, creds, config)
-
- require.NoError(t, err)
-
- // Cancel the transfer before the data has been copied to ensure
- // we handle this gracefully.
- cancel()
-
- _, err = object.Consume(ctx, strings.NewReader(test.ObjectContent), deadline)
- require.Error(t, err)
- require.Equal(t, "context canceled", err.Error())
-}
-
-func TestS3ObjectUploadLimitReached(t *testing.T) {
- creds, config, _, ts := test.SetupS3(t, "")
- defer ts.Close()
-
- deadline := time.Now().Add(testTimeout)
- tmpDir, err := ioutil.TempDir("", "workhorse-test-")
- require.NoError(t, err)
- defer os.Remove(tmpDir)
-
- objectName := filepath.Join(tmpDir, "s3-test-data")
- object, err := objectstore.NewS3Object(objectName, creds, config)
- require.NoError(t, err)
-
- _, err = object.Consume(context.Background(), &failedReader{}, deadline)
- require.Error(t, err)
- require.Equal(t, "entity is too large", err.Error())
-}