gitlab.com/beacon-software/gadget@v0.0.0-20181217202115-54565ea1ed5e/storage/s3_int_test.go (about) 1 // +build integration 2 3 package storage 4 5 import ( 6 "fmt" 7 "testing" 8 "time" 9 10 "github.com/aws/aws-sdk-go/aws" 11 "github.com/aws/aws-sdk-go/aws/session" 12 "github.com/aws/aws-sdk-go/service/s3" 13 "github.com/stretchr/testify/assert" 14 15 "gitlab.com/beacon-software/gadget/generator" 16 ) 17 18 const testBucket = "kasita-integration.test" 19 20 func TestRead(t *testing.T) { 21 assert := assert.New(t) 22 s3ReaderWriter := NewS3(testBucket, "s3-reader-writer-closer/read.txt") 23 24 expected := []byte("This is a test file.\n") 25 actual, err := s3ReaderWriter.ReadObject() 26 assert.NoError(err) 27 assert.Equal(expected, actual) 28 } 29 30 func TestReadError(t *testing.T) { 31 assert := assert.New(t) 32 s3ReaderWriter := NewS3(testBucket, "s3-reader-writer-closer/read-does-not-exist.txt") 33 34 actual, err := s3ReaderWriter.ReadObject() 35 assert.Error(err) 36 assert.Nil(actual) 37 } 38 39 func TestWrite(t *testing.T) { 40 assert := assert.New(t) 41 key := fmt.Sprintf("s3-reader-writer-closer/%s/test.txt", generator.String(10)) 42 s3ReaderWriter := NewS3(testBucket, key) 43 44 expected := []byte(fmt.Sprintf("This is a test file.\n%s\n", generator.String(40))) 45 err := s3ReaderWriter.WriteObject(expected) 46 assert.NoError(err) 47 48 actual, err := s3ReaderWriter.ReadObject() 49 assert.NoError(err) 50 assert.Equal(expected, actual) 51 52 list, err := s3ReaderWriter.List("s3-reader-writer-closer", "") 53 assert.NoError(err) 54 assert.Equal(int64(3), *list.KeyCount) 55 keys := make([]string, len(list.Contents)) 56 for i, res := range list.Contents { 57 keys[i] = *res.Key 58 } 59 assert.Contains(keys, key) 60 61 PruneAlpha(testBucket, key, 0) 62 } 63 64 func TestPrune(t *testing.T) { 65 assert := assert.New(t) 66 67 prefix := "PruneAlpha" 68 numFiles := 5 69 70 input := &s3.ListObjectsV2Input{ 71 Bucket: aws.String(testBucket), 72 Prefix: aws.String(prefix), 73 } 74 svc := s3.New(session.New()) 75 76 var lastUploadedFilename string 77 for i := 0; i < numFiles; i++ { 78 lastUploadedFilename = fmt.Sprintf("%s/%d", prefix, int32(time.Now().Unix())+int32(i)) 79 s3 := NewS3(testBucket, lastUploadedFilename) 80 err := s3.WriteObject([]byte(generator.String(100))) 81 assert.NoError(err) 82 } 83 84 objects, err := svc.ListObjectsV2(input) 85 86 assert.Equal(numFiles, len(objects.Contents)) 87 assert.NoError(err) 88 89 PruneAlpha(testBucket, prefix, numFiles-2) 90 91 objects, err = svc.ListObjectsV2(input) 92 assert.Equal(numFiles-2, len(objects.Contents)) 93 94 var objectKeys = map[string]bool{} 95 for _, value := range objects.Contents { 96 objectKeys[*value.Key] = true 97 } 98 assert.True(objectKeys[lastUploadedFilename]) 99 assert.NoError(err) 100 101 PruneAlpha(testBucket, prefix, 0) 102 103 PruneAlpha("foo", "bar", numFiles) 104 }