Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions aws/s3/s3.go
Original file line number Diff line number Diff line change
Expand Up @@ -562,3 +562,28 @@ func (s *S3) Copy(bucket, key, source string) error {

return err
}

// CreateBucket creates a bucket.
func (s *S3) CreateBucket(bucket string) error {
config := types.CreateBucketConfiguration{
LocationConstraint: types.BucketLocationConstraint(s.client.Options().Region),
}

input := s3.CreateBucketInput{
Bucket: aws.String(bucket),
CreateBucketConfiguration: &config,
}
_, err := s.client.CreateBucket(context.TODO(), &input)

return err
}

// DeleteBucket deletes a bucket.
func (s *S3) DeleteBucket(bucket string) error {
input := s3.DeleteBucketInput{
Bucket: aws.String(bucket),
}
_, err := s.client.DeleteBucket(context.TODO(), &input)

return err
}
52 changes: 51 additions & 1 deletion aws/s3/s3_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ func setup() {
"--create-bucket-configuration", fmt.Sprintf(
"{\"LocationConstraint\": \"%v\"}", testRegion),
).Run(); err != nil {

panic(err)
}
}
Expand Down Expand Up @@ -97,6 +96,17 @@ func awsCmdPopulateBucket() {
}
}

func awsCmdBucketExists(bucket string) bool {
if err := exec.Command(
"aws", "s3api",
"head-bucket",
"--bucket", bucket,
).Run(); err != nil {
return false
}
return true
}

func awsCmdExists(key string) bool {
if err := exec.Command(
"aws", "s3api",
Expand Down Expand Up @@ -712,3 +722,43 @@ func TestS3Copy(t *testing.T) {
// new object exists
assert.True(t, awsCmdExists(testNewKey))
}

func TestS3CreateBucket(t *testing.T) {
// ARRANGE
setAwsEnv()
client, err := New()
require.Nil(t, err, fmt.Sprintf("Error creating s3 client: %v", err))

bucket := "new-bucket"
require.False(t, awsCmdBucketExists(bucket), "error arranging test, bucket already exists")

// ACTION
err = client.CreateBucket(bucket)
t.Cleanup(func() {
if err := client.DeleteBucket(bucket); err != nil {
t.Fatalf("Failed to delete bucket during cleanup: %v", err)
}
})

// ASSERT
assert.Nil(t, err)
assert.True(t, awsCmdBucketExists(bucket))
}

func TestS3DeleteBucket(t *testing.T) {
// ARRANGE
setAwsEnv()
client, err := New()
require.Nil(t, err, fmt.Sprintf("Error creating s3 client: %v", err))

bucket := "bucket-to-delete"
require.Nil(t, client.CreateBucket(bucket), "error arranging test, couldn't create bucket to delete")
require.True(t, awsCmdBucketExists(bucket), "error arranging test, doesn't exist")

// ACTION
err = client.DeleteBucket(bucket)

// ASSERT
assert.Nil(t, err)
assert.False(t, awsCmdBucketExists(bucket))
}