1package physical 2 3import ( 4 "fmt" 5 "log" 6 "math/rand" 7 "os" 8 "testing" 9 "time" 10 11 "github.com/aws/aws-sdk-go/aws" 12 "github.com/aws/aws-sdk-go/aws/credentials" 13 "github.com/aws/aws-sdk-go/aws/session" 14 "github.com/aws/aws-sdk-go/service/s3" 15) 16 17func TestS3Backend(t *testing.T) { 18 if os.Getenv("AWS_ACCESS_KEY_ID") == "" || os.Getenv("AWS_SECRET_ACCESS_KEY") == "" { 19 t.SkipNow() 20 } 21 22 creds, err := credentials.NewEnvCredentials().Get() 23 if err != nil { 24 t.Fatalf("err: %v", err) 25 } 26 27 // If the variable is empty or doesn't exist, the default 28 // AWS endpoints will be used 29 endpoint := os.Getenv("AWS_S3_ENDPOINT") 30 31 region := os.Getenv("AWS_DEFAULT_REGION") 32 if region == "" { 33 region = "us-east-1" 34 } 35 36 s3conn := s3.New(session.New(&aws.Config{ 37 Credentials: credentials.NewEnvCredentials(), 38 Endpoint: aws.String(endpoint), 39 Region: aws.String(region), 40 })) 41 42 var randInt = rand.New(rand.NewSource(time.Now().UnixNano())).Int() 43 bucket := fmt.Sprintf("vault-s3-testacc-%d", randInt) 44 45 _, err = s3conn.CreateBucket(&s3.CreateBucketInput{ 46 Bucket: aws.String(bucket), 47 }) 48 if err != nil { 49 t.Fatalf("unable to create test bucket: %s", err) 50 } 51 52 defer func() { 53 // Gotta list all the objects and delete them 54 // before being able to delete the bucket 55 listResp, _ := s3conn.ListObjects(&s3.ListObjectsInput{ 56 Bucket: aws.String(bucket), 57 }) 58 59 objects := &s3.Delete{} 60 for _, key := range listResp.Contents { 61 oi := &s3.ObjectIdentifier{Key: key.Key} 62 objects.Objects = append(objects.Objects, oi) 63 } 64 65 s3conn.DeleteObjects(&s3.DeleteObjectsInput{ 66 Bucket: aws.String(bucket), 67 Delete: objects, 68 }) 69 70 _, err := s3conn.DeleteBucket(&s3.DeleteBucketInput{Bucket: aws.String(bucket)}) 71 if err != nil { 72 t.Fatalf("err: %s", err) 73 } 74 }() 75 76 logger := log.New(os.Stderr, "", log.LstdFlags) 77 b, err := NewBackend("s3", logger, map[string]string{ 78 "access_key": creds.AccessKeyID, 79 "secret_key": creds.SecretAccessKey, 80 "session_token": creds.SessionToken, 81 "bucket": bucket, 82 }) 83 if err != nil { 84 t.Fatalf("err: %s", err) 85 } 86 87 testBackend(t, b) 88 testBackend_ListPrefix(t, b) 89 90} 91