Files

128 lines
2.7 KiB
Go
Raw Permalink Normal View History

2021-11-25 18:27:08 +01:00
package storage
import (
2023-06-28 06:55:56 +02:00
"context"
2021-11-25 18:27:08 +01:00
"fmt"
"io"
"os"
"strings"
"testing"
2023-06-28 06:55:56 +02:00
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/feature/s3/manager"
"github.com/aws/aws-sdk-go-v2/service/s3"
2021-11-25 18:27:08 +01:00
"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() {
2023-06-28 06:55:56 +02:00
_ = os.Setenv("AWS_MAX_ATTEMPTS", "invalid")
2021-11-25 18:27:08 +01:00
return func() {
2023-06-28 06:55:56 +02:00
_ = os.Unsetenv("AWS_MAX_ATTEMPTS")
2021-11-25 18:27:08 +01:00
}
},
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
2023-06-28 06:55:56 +02:00
svc func(t *testing.T) Uploader
2021-11-25 18:27:08 +01:00
}
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",
2023-06-28 06:55:56 +02:00
svc: func(t *testing.T) Uploader {
2021-11-25 18:27:08 +01:00
return &mock{
2023-06-28 06:55:56 +02:00
upload: func(ctx context.Context, input *s3.PutObjectInput, f ...func(*manager.Uploader)) (*manager.UploadOutput, error) {
2021-11-25 18:27:08 +01:00
assert.Equal(t, aws.String("some-bucket"), input.Bucket)
assert.Equal(t, aws.String("/some/path"), input.Key)
2023-06-28 06:55:56 +02:00
buff, err := io.ReadAll(input.Body)
2021-11-25 18:27:08 +01:00
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) {
2023-06-28 06:55:56 +02:00
var svc Uploader
2021-11-25 18:27:08 +01:00
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 {
2023-06-28 06:55:56 +02:00
upload func(ctx context.Context, input *s3.PutObjectInput, f ...func(*manager.Uploader)) (*manager.UploadOutput, error)
2021-11-25 18:27:08 +01:00
}
2023-06-28 06:55:56 +02:00
func (m *mock) Upload(ctx context.Context, input *s3.PutObjectInput, f ...func(*manager.Uploader)) (*manager.UploadOutput, error) {
2021-11-25 18:27:08 +01:00
if m.upload != nil {
2023-06-28 06:55:56 +02:00
return m.upload(ctx, input, f...)
2021-11-25 18:27:08 +01:00
}
return nil, nil
}
2023-06-28 06:55:56 +02:00
var _ Uploader = &mock{}