Files
s3uploader/storage/s3_test.go
T

132 lines
2.9 KiB
Go
Raw Normal View History

2021-11-25 18:27:08 +01:00
package storage
import (
"fmt"
"io"
"io/ioutil"
"os"
"strings"
"testing"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
"github.com/aws/aws-sdk-go/service/s3/s3manager/s3manageriface"
"github.com/stretchr/testify/assert"
)
func TestNew(t *testing.T) {
type args struct {
bucket string
}
tests := []struct {
name string
args args
setup func() func()
wantErr bool
}{
{
name: "invalid AWS config",
args: args{},
setup: func() func() {
_ = os.Setenv("AWS_STS_REGIONAL_ENDPOINTS", "unknown_value")
return func() {
_ = os.Unsetenv("AWS_STS_REGIONAL_ENDPOINTS")
}
},
wantErr: true,
},
{
name: "success",
args: args{},
setup: func() func() {
return func() {
}
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
defer tt.setup()()
_, err := New(tt.args.bucket)
if (err != nil) != tt.wantErr {
t.Errorf("New() error = %v, wantErr %v", err, tt.wantErr)
return
}
})
}
}
func TestS3_Store(t *testing.T) {
type fields struct {
bucket string
svc func(t *testing.T) s3manageriface.UploaderAPI
}
type args struct {
path string
content io.Reader
}
tests := []struct {
name string
fields fields
args args
wantErr bool
}{
{
name: "upload error",
fields: fields{
bucket: "some-bucket",
svc: func(t *testing.T) s3manageriface.UploaderAPI {
return &mock{
upload: func(input *s3manager.UploadInput, f ...func(*s3manager.Uploader)) (*s3manager.UploadOutput, error) {
assert.Equal(t, aws.String("some-bucket"), input.Bucket)
assert.Equal(t, aws.String("/some/path"), input.Key)
buff, err := ioutil.ReadAll(input.Body)
assert.NoError(t, err)
assert.Equal(t, "some content", string(buff))
return nil, fmt.Errorf("error")
},
}
},
},
args: args{
path: "/some/path",
content: strings.NewReader("some content"),
},
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var svc s3manageriface.UploaderAPI
if tt.fields.svc != nil {
svc = tt.fields.svc(t)
}
s := &S3{
bucket: tt.fields.bucket,
svc: svc,
}
if err := s.Store(tt.args.path, tt.args.content); (err != nil) != tt.wantErr {
t.Errorf("Store() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
type mock struct {
upload func(input *s3manager.UploadInput, f ...func(*s3manager.Uploader)) (*s3manager.UploadOutput, error)
}
func (m *mock) Upload(input *s3manager.UploadInput, f ...func(*s3manager.Uploader)) (*s3manager.UploadOutput, error) {
if m.upload != nil {
return m.upload(input, f...)
}
return nil, nil
}
func (m *mock) UploadWithContext(aws.Context, *s3manager.UploadInput, ...func(*s3manager.Uploader)) (*s3manager.UploadOutput, error) {
panic("implement me")
}
var _ s3manageriface.UploaderAPI = &mock{}