added unit testing

This commit is contained in:
2022-06-01 11:55:33 +02:00
parent 12ee768f11
commit fc19fd867c
7 changed files with 466 additions and 0 deletions

80
internal/s3/mock.go Normal file
View File

@@ -0,0 +1,80 @@
package s3
import (
"bytes"
"context"
"crypto/md5"
"fmt"
"git.kapelle.org/niklas/s3share/internal/types"
)
type mockS3 struct {
objects map[string]mockObject
}
type mockObject struct {
content []byte
contentType string
}
type mockObjectReader struct {
*bytes.Reader
}
func (r mockObjectReader) Close() error {
// NOOP
return nil
}
func NewMockS3() S3 {
return &mockS3{
objects: map[string]mockObject{
"test.txt": {
content: []byte("test.txt"),
contentType: "text/plain",
},
"test.png": {
content: []byte("test.png"),
contentType: "image/png",
},
"dir/test": {
content: []byte("test"),
contentType: "application/octet-stream",
},
},
}
}
func (m *mockS3) GetObject(ctx context.Context, key string) (ObjectReader, error) {
mockObj, exist := m.objects[key]
if !exist {
return nil, fmt.Errorf("Object not found")
}
reader := bytes.NewReader(mockObj.content)
return mockObjectReader{reader}, nil
}
func (m *mockS3) GetObjectMetadata(ctx context.Context, key string) (*types.Metadata, error) {
mockObj, exist := m.objects[key]
if !exist {
return nil, nil
}
return &types.Metadata{
Size: int64(len(mockObj.content)),
ETag: fmt.Sprintf("%x", md5.Sum(mockObj.content)),
ContentType: mockObj.contentType,
}, nil
}
func (m *mockS3) KeyExists(ctx context.Context, key string) (bool, error) {
_, exist := m.objects[key]
return exist, nil
}

72
internal/s3/mock_test.go Normal file
View File

@@ -0,0 +1,72 @@
package s3_test
import (
"context"
"io/ioutil"
"testing"
"git.kapelle.org/niklas/s3share/internal/s3"
"github.com/stretchr/testify/assert"
)
func setup(t *testing.T) (s3.S3, context.Context, *assert.Assertions) {
service := s3.NewMockS3()
ctx := context.Background()
assert := assert.New(t)
return service, ctx, assert
}
func TestGetObject(t *testing.T) {
service, ctx, assert := setup(t)
reader, err := service.GetObject(ctx, "test.txt")
assert.NoError(err)
assert.NotNil(reader)
content, err := ioutil.ReadAll(reader)
assert.NoError(err)
assert.Equal("test.txt", string(content))
}
func TestGetObjectNotFound(t *testing.T) {
service, ctx, assert := setup(t)
reader, err := service.GetObject(ctx, "not_existing.txt")
assert.Error(err)
assert.Nil(reader)
}
func TestGetMetadata(t *testing.T) {
service, ctx, assert := setup(t)
metadata, err := service.GetObjectMetadata(ctx, "test.txt")
assert.NoError(err)
assert.NotNil(metadata)
assert.Equal("text/plain", metadata.ContentType)
assert.Equal(int64(8), metadata.Size)
}
func TestGetMetadataNotFound(t *testing.T) {
service, ctx, assert := setup(t)
metadata, err := service.GetObjectMetadata(ctx, "not_existing.txt")
assert.NoError(err)
assert.Nil(metadata)
}
func TestKeyExists(t *testing.T) {
service, ctx, assert := setup(t)
exists, err := service.KeyExists(ctx, "test.txt")
assert.NoError(err)
assert.True(exists)
}
func TestKeyNotExist(t *testing.T) {
service, ctx, assert := setup(t)
exists, err := service.KeyExists(ctx, "not_existing.txt")
assert.NoError(err)
assert.False(exists)
}