779 lines
23 KiB
Go
779 lines
23 KiB
Go
|
// Copyright (C) 2018 Storj Labs, Inc.
|
||
|
// See LICENSE for copying information.
|
||
|
|
||
|
package logging
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"context"
|
||
|
"errors"
|
||
|
"io/ioutil"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/minio/minio/pkg/madmin"
|
||
|
policy "github.com/minio/minio/pkg/policy"
|
||
|
|
||
|
"github.com/golang/mock/gomock"
|
||
|
minio "github.com/minio/minio/cmd"
|
||
|
"github.com/minio/minio/pkg/auth"
|
||
|
"github.com/minio/minio/pkg/hash"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"go.uber.org/zap"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
testError = "test error"
|
||
|
bucket = "test-bucket"
|
||
|
object = "test-object"
|
||
|
destBucket = "dest-bucket"
|
||
|
destObject = "dest-object"
|
||
|
prefix = "test-prefix"
|
||
|
marker = "test-marker"
|
||
|
partMarker = 42
|
||
|
delimiter = "test-delimiter"
|
||
|
maxKeys = 1234
|
||
|
offset = int64(12)
|
||
|
length = int64(34)
|
||
|
uploadID = "test-upload-id"
|
||
|
partID = 9876
|
||
|
dryRun = true
|
||
|
duration = 12 * time.Second
|
||
|
n = "test-n"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
ctx = context.Background()
|
||
|
ErrTest = errors.New(testError)
|
||
|
metadata = map[string]string{"key": "value"}
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
bucketInfo = minio.BucketInfo{Name: bucket}
|
||
|
bucketList = []minio.BucketInfo{bucketInfo}
|
||
|
objInfo = minio.ObjectInfo{Bucket: bucket, Name: object}
|
||
|
objList = minio.ListObjectsInfo{Objects: []minio.ObjectInfo{objInfo}}
|
||
|
objListV2 = minio.ListObjectsV2Info{Objects: []minio.ObjectInfo{objInfo}}
|
||
|
destObjInfo = minio.ObjectInfo{Bucket: destBucket, Name: destObject}
|
||
|
partInfo = minio.PartInfo{PartNumber: partID}
|
||
|
partList = minio.ListPartsInfo{Parts: []minio.PartInfo{partInfo}}
|
||
|
healItem = madmin.HealResultItem{Bucket: bucket, Object: object}
|
||
|
healList = []madmin.HealResultItem{healItem}
|
||
|
lockList = []minio.VolumeLockInfo{minio.VolumeLockInfo{Bucket: bucket, Object: object}}
|
||
|
plcy = &policy.Policy{ID: n}
|
||
|
)
|
||
|
|
||
|
func TestGateway(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
gw := NewMockGateway(mockCtrl)
|
||
|
lgw := Gateway(gw)
|
||
|
|
||
|
// Test Name()
|
||
|
name := "GatewayName"
|
||
|
gw.EXPECT().Name().Return(name)
|
||
|
assert.Equal(t, name, lgw.Name())
|
||
|
|
||
|
// Test Production()
|
||
|
production := true
|
||
|
gw.EXPECT().Production().Return(production)
|
||
|
assert.Equal(t, production, lgw.Production())
|
||
|
|
||
|
// Test NewGatewayLayer() returning without error
|
||
|
creds := auth.Credentials{
|
||
|
AccessKey: "test-access-key",
|
||
|
SecretKey: "test-secret-key",
|
||
|
}
|
||
|
mol := NewMockObjectLayer(mockCtrl)
|
||
|
gw.EXPECT().NewGatewayLayer(creds).Return(mol, nil)
|
||
|
ol, err := lgw.NewGatewayLayer(creds)
|
||
|
assert.NoError(t, err)
|
||
|
olw, ok := ol.(*olLogWrap)
|
||
|
assert.True(t, ok)
|
||
|
assert.Equal(t, mol, olw.ol)
|
||
|
assert.Equal(t, zap.S(), olw.logger)
|
||
|
|
||
|
// Test NewGatewayLayer() returning error
|
||
|
gw.EXPECT().NewGatewayLayer(creds).Return(nil, ErrTest)
|
||
|
_, err = lgw.NewGatewayLayer(creds)
|
||
|
assert.Error(t, err, testError)
|
||
|
}
|
||
|
|
||
|
func TestShutdown(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().Shutdown(ctx).Return(nil)
|
||
|
err := ol.Shutdown(ctx)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().Shutdown(ctx).Return(ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
err = ol.Shutdown(ctx)
|
||
|
assert.Error(t, err, testError)
|
||
|
}
|
||
|
|
||
|
func TestStorageInfo(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
_, mol, ol := initMocks(mockCtrl)
|
||
|
storageInfo := minio.StorageInfo{}
|
||
|
|
||
|
mol.EXPECT().StorageInfo(ctx).Return(storageInfo)
|
||
|
info := ol.StorageInfo(ctx)
|
||
|
assert.Equal(t, storageInfo, info)
|
||
|
}
|
||
|
|
||
|
func TestMakeBucketWithLocation(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
location := "test-location"
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().MakeBucketWithLocation(ctx, bucket, location).Return(nil)
|
||
|
err := ol.MakeBucketWithLocation(ctx, bucket, location)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().MakeBucketWithLocation(ctx, bucket, location).Return(ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
err = ol.MakeBucketWithLocation(ctx, bucket, location)
|
||
|
assert.Error(t, err, testError)
|
||
|
}
|
||
|
|
||
|
func TestGetBucketInfo(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().GetBucketInfo(ctx, bucket).Return(bucketInfo, nil)
|
||
|
info, err := ol.GetBucketInfo(ctx, bucket)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, bucketInfo, info)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().GetBucketInfo(ctx, bucket).Return(minio.BucketInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
info, err = ol.GetBucketInfo(ctx, bucket)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, minio.BucketInfo{}, info)
|
||
|
}
|
||
|
|
||
|
func TestListBuckets(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().ListBuckets(ctx).Return(bucketList, nil)
|
||
|
list, err := ol.ListBuckets(ctx)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, bucketList, list)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().ListBuckets(ctx).Return([]minio.BucketInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
list, err = ol.ListBuckets(ctx)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, []minio.BucketInfo{}, list)
|
||
|
}
|
||
|
|
||
|
func TestDeleteBucket(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().DeleteBucket(ctx, bucket).Return(nil)
|
||
|
err := ol.DeleteBucket(ctx, bucket)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().DeleteBucket(ctx, bucket).Return(ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
err = ol.DeleteBucket(ctx, bucket)
|
||
|
assert.Error(t, err, testError)
|
||
|
}
|
||
|
|
||
|
func TestListObjects(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().ListObjects(ctx, bucket, prefix, marker, delimiter, maxKeys).
|
||
|
Return(objList, nil)
|
||
|
list, err := ol.ListObjects(ctx, bucket, prefix, marker, delimiter, maxKeys)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, objList, list)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().ListObjects(ctx, bucket, prefix, marker, delimiter, maxKeys).
|
||
|
Return(minio.ListObjectsInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
list, err = ol.ListObjects(ctx, bucket, prefix, marker, delimiter, maxKeys)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, minio.ListObjectsInfo{}, list)
|
||
|
}
|
||
|
|
||
|
func TestListObjectsV2(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
token := "test-token"
|
||
|
owner := true
|
||
|
startAfter := "test-after"
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().ListObjectsV2(ctx, bucket, prefix, token, delimiter, maxKeys,
|
||
|
owner, startAfter).Return(objListV2, nil)
|
||
|
list, err := ol.ListObjectsV2(ctx, bucket, prefix, token, delimiter,
|
||
|
maxKeys, owner, startAfter)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, objListV2, list)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().ListObjectsV2(ctx, bucket, prefix, marker, delimiter, maxKeys,
|
||
|
owner, startAfter).Return(minio.ListObjectsV2Info{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
list, err = ol.ListObjectsV2(ctx, bucket, prefix, marker, delimiter,
|
||
|
maxKeys, owner, startAfter)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, minio.ListObjectsV2Info{}, list)
|
||
|
}
|
||
|
|
||
|
func TestGetObject(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
w := ioutil.Discard
|
||
|
etag := "test-etag"
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().GetObject(ctx, bucket, object, offset, length, w, etag).Return(nil)
|
||
|
err := ol.GetObject(ctx, bucket, object, offset, length, w, etag)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().GetObject(ctx, bucket, object, offset, length, w, etag).Return(ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
err = ol.GetObject(ctx, bucket, object, offset, length, w, etag)
|
||
|
assert.Error(t, err, testError)
|
||
|
}
|
||
|
|
||
|
func TestGetObjectInfo(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().GetObjectInfo(ctx, bucket, object).Return(objInfo, nil)
|
||
|
info, err := ol.GetObjectInfo(ctx, bucket, object)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, objInfo, info)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().GetObjectInfo(ctx, bucket, object).Return(minio.ObjectInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
info, err = ol.GetObjectInfo(ctx, bucket, object)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, minio.ObjectInfo{}, info)
|
||
|
}
|
||
|
|
||
|
func TestPutObject(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
data := initHashReader(t)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().PutObject(ctx, bucket, object, data, metadata).Return(objInfo, nil)
|
||
|
info, err := ol.PutObject(ctx, bucket, object, data, metadata)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, objInfo, info)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().PutObject(ctx, bucket, object, data, metadata).Return(minio.ObjectInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
info, err = ol.PutObject(ctx, bucket, object, data, metadata)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, minio.ObjectInfo{}, info)
|
||
|
}
|
||
|
|
||
|
func TestCopyObject(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().CopyObject(ctx, bucket, object, destBucket, destObject, objInfo).
|
||
|
Return(destObjInfo, nil)
|
||
|
info, err := ol.CopyObject(ctx, bucket, object, destBucket, destObject, objInfo)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, destObjInfo, info)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().CopyObject(ctx, bucket, object, destBucket, destObject, objInfo).
|
||
|
Return(minio.ObjectInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
info, err = ol.CopyObject(ctx, bucket, object, destBucket, destObject, objInfo)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, minio.ObjectInfo{}, info)
|
||
|
}
|
||
|
|
||
|
func TestDeleteObject(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().DeleteObject(ctx, bucket, object).Return(nil)
|
||
|
err := ol.DeleteObject(ctx, bucket, object)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().DeleteObject(ctx, bucket, object).Return(ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
err = ol.DeleteObject(ctx, bucket, object)
|
||
|
assert.Error(t, err, testError)
|
||
|
}
|
||
|
|
||
|
func TestListMultipartUploads(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
uidMarker := "test-upload-id-marker"
|
||
|
listMultiParts := minio.ListMultipartsInfo{
|
||
|
Uploads: []minio.MultipartInfo{minio.MultipartInfo{Object: object}}}
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().ListMultipartUploads(ctx, bucket, prefix, marker, uidMarker,
|
||
|
delimiter, maxKeys).Return(listMultiParts, nil)
|
||
|
list, err := ol.ListMultipartUploads(ctx, bucket, prefix, marker,
|
||
|
uidMarker, delimiter, maxKeys)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, listMultiParts, list)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().ListMultipartUploads(ctx, bucket, prefix, marker, uidMarker,
|
||
|
delimiter, maxKeys).Return(minio.ListMultipartsInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
list, err = ol.ListMultipartUploads(ctx, bucket, prefix, marker, uidMarker,
|
||
|
delimiter, maxKeys)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, minio.ListMultipartsInfo{}, list)
|
||
|
}
|
||
|
|
||
|
func TestNewMultipartUpload(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().NewMultipartUpload(ctx, bucket, object, metadata).Return(uploadID, nil)
|
||
|
id, err := ol.NewMultipartUpload(ctx, bucket, object, metadata)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, uploadID, id)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().NewMultipartUpload(ctx, bucket, object, metadata).Return("", ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
id, err = ol.NewMultipartUpload(ctx, bucket, object, metadata)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, "", id)
|
||
|
}
|
||
|
|
||
|
func TestCopyObjectPart(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().CopyObjectPart(ctx, bucket, object, destBucket, destObject,
|
||
|
uploadID, partID, offset, length, objInfo).Return(partInfo, nil)
|
||
|
info, err := ol.CopyObjectPart(ctx, bucket, object, destBucket, destObject,
|
||
|
uploadID, partID, offset, length, objInfo)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, partInfo, info)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().CopyObjectPart(ctx, bucket, object, destBucket, destObject,
|
||
|
uploadID, partID, offset, length, objInfo).Return(minio.PartInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
info, err = ol.CopyObjectPart(ctx, bucket, object, destBucket, destObject,
|
||
|
uploadID, partID, offset, length, objInfo)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, minio.PartInfo{}, info)
|
||
|
}
|
||
|
|
||
|
func TestPutObjectPart(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
data := initHashReader(t)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().PutObjectPart(ctx, bucket, object, uploadID, partID, data).
|
||
|
Return(partInfo, nil)
|
||
|
info, err := ol.PutObjectPart(ctx, bucket, object, uploadID, partID, data)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, partInfo, info)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().PutObjectPart(ctx, bucket, object, uploadID, partID, data).
|
||
|
Return(minio.PartInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
info, err = ol.PutObjectPart(ctx, bucket, object, uploadID, partID, data)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, minio.PartInfo{}, info)
|
||
|
}
|
||
|
|
||
|
func TestListObjectParts(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().ListObjectParts(ctx, bucket, object, uploadID, partMarker, maxKeys).
|
||
|
Return(partList, nil)
|
||
|
list, err := ol.ListObjectParts(ctx, bucket, object, uploadID, partMarker, maxKeys)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, partList, list)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().ListObjectParts(ctx, bucket, object, uploadID, partMarker, maxKeys).
|
||
|
Return(minio.ListPartsInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
list, err = ol.ListObjectParts(ctx, bucket, object, uploadID, partMarker, maxKeys)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, minio.ListPartsInfo{}, list)
|
||
|
}
|
||
|
|
||
|
func TestAbortMultipartUpload(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().AbortMultipartUpload(ctx, bucket, object, uploadID).Return(nil)
|
||
|
err := ol.AbortMultipartUpload(ctx, bucket, object, uploadID)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().AbortMultipartUpload(ctx, bucket, object, uploadID).Return(ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
err = ol.AbortMultipartUpload(ctx, bucket, object, uploadID)
|
||
|
assert.Error(t, err, testError)
|
||
|
}
|
||
|
|
||
|
func TestCompleteMultipartUpload(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
parts := []minio.CompletePart{minio.CompletePart{PartNumber: partID}}
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().CompleteMultipartUpload(ctx, bucket, object, uploadID, parts).
|
||
|
Return(objInfo, nil)
|
||
|
info, err := ol.CompleteMultipartUpload(ctx, bucket, object, uploadID, parts)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, objInfo, info)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().CompleteMultipartUpload(ctx, bucket, object, uploadID, parts).
|
||
|
Return(minio.ObjectInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
info, err = ol.CompleteMultipartUpload(ctx, bucket, object, uploadID, parts)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, minio.ObjectInfo{}, info)
|
||
|
}
|
||
|
|
||
|
func TestReloadFormat(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().ReloadFormat(ctx, dryRun).Return(nil)
|
||
|
err := ol.ReloadFormat(ctx, dryRun)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().ReloadFormat(ctx, dryRun).Return(ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
err = ol.ReloadFormat(ctx, dryRun)
|
||
|
assert.Error(t, err, testError)
|
||
|
}
|
||
|
|
||
|
func TestHealFormat(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().HealFormat(ctx, dryRun).Return(healItem, nil)
|
||
|
item, err := ol.HealFormat(ctx, dryRun)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, healItem, item)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().HealFormat(ctx, dryRun).Return(madmin.HealResultItem{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
item, err = ol.HealFormat(ctx, dryRun)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, madmin.HealResultItem{}, item)
|
||
|
}
|
||
|
|
||
|
func TestHealBucket(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().HealBucket(ctx, bucket, dryRun).Return(healList, nil)
|
||
|
list, err := ol.HealBucket(ctx, bucket, dryRun)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, healList, list)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().HealBucket(ctx, bucket, dryRun).Return([]madmin.HealResultItem{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
list, err = ol.HealBucket(ctx, bucket, dryRun)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, []madmin.HealResultItem{}, list)
|
||
|
}
|
||
|
|
||
|
func TestHealObject(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().HealObject(ctx, bucket, object, dryRun).Return(healItem, nil)
|
||
|
item, err := ol.HealObject(ctx, bucket, object, dryRun)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, healItem, item)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().HealObject(ctx, bucket, object, dryRun).Return(madmin.HealResultItem{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
item, err = ol.HealObject(ctx, bucket, object, dryRun)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, madmin.HealResultItem{}, item)
|
||
|
}
|
||
|
|
||
|
func TestListBucketsHeal(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().ListBucketsHeal(ctx).Return(bucketList, nil)
|
||
|
list, err := ol.ListBucketsHeal(ctx)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, bucketList, list)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().ListBucketsHeal(ctx).Return([]minio.BucketInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
list, err = ol.ListBucketsHeal(ctx)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, []minio.BucketInfo{}, list)
|
||
|
}
|
||
|
|
||
|
func TestListObjectsHeal(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().ListObjectsHeal(ctx, bucket, prefix, marker, delimiter, maxKeys).
|
||
|
Return(objList, nil)
|
||
|
list, err := ol.ListObjectsHeal(ctx, bucket, prefix, marker, delimiter, maxKeys)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, objList, list)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().ListObjectsHeal(ctx, bucket, prefix, marker, delimiter, maxKeys).
|
||
|
Return(minio.ListObjectsInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
list, err = ol.ListObjectsHeal(ctx, bucket, prefix, marker, delimiter, maxKeys)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, minio.ListObjectsInfo{}, list)
|
||
|
}
|
||
|
|
||
|
func TestListLocks(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().ListLocks(ctx, bucket, prefix, duration).Return(lockList, nil)
|
||
|
list, err := ol.ListLocks(ctx, bucket, prefix, duration)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, lockList, list)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().ListLocks(ctx, bucket, prefix, duration).
|
||
|
Return([]minio.VolumeLockInfo{}, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
list, err = ol.ListLocks(ctx, bucket, prefix, duration)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Equal(t, []minio.VolumeLockInfo{}, list)
|
||
|
}
|
||
|
|
||
|
func TestClearLocks(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().ClearLocks(ctx, lockList).Return(nil)
|
||
|
err := ol.ClearLocks(ctx, lockList)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().ClearLocks(ctx, lockList).Return(ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
err = ol.ClearLocks(ctx, lockList)
|
||
|
assert.Error(t, err, testError)
|
||
|
}
|
||
|
|
||
|
func TestSetBucketPolicy(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().SetBucketPolicy(ctx, n, plcy).Return(nil)
|
||
|
err := ol.SetBucketPolicy(ctx, n, plcy)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().SetBucketPolicy(ctx, n, plcy).Return(ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
err = ol.SetBucketPolicy(ctx, n, plcy)
|
||
|
assert.Error(t, err, testError)
|
||
|
}
|
||
|
|
||
|
func TestGetBucketPolicy(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().GetBucketPolicy(ctx, n).Return(plcy, nil)
|
||
|
p, err := ol.GetBucketPolicy(ctx, n)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, plcy, p)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().GetBucketPolicy(ctx, n).Return(nil, ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
p, err = ol.GetBucketPolicy(ctx, n)
|
||
|
assert.Error(t, err, testError)
|
||
|
assert.Nil(t, p)
|
||
|
}
|
||
|
|
||
|
func TestDeleteBucketPolicy(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
logger, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
// No error returned
|
||
|
mol.EXPECT().DeleteBucketPolicy(ctx, n).Return(nil)
|
||
|
err := ol.DeleteBucketPolicy(ctx, n)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
// Error returned
|
||
|
mol.EXPECT().DeleteBucketPolicy(ctx, n).Return(ErrTest)
|
||
|
logger.EXPECT().Errorf(errTemplate, ErrTest)
|
||
|
err = ol.DeleteBucketPolicy(ctx, n)
|
||
|
assert.Error(t, err, testError)
|
||
|
}
|
||
|
|
||
|
func TestIsNotificationSupported(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
_, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
mol.EXPECT().IsNotificationSupported().Return(true)
|
||
|
assert.True(t, ol.IsNotificationSupported())
|
||
|
|
||
|
mol.EXPECT().IsNotificationSupported().Return(false)
|
||
|
assert.False(t, ol.IsNotificationSupported())
|
||
|
}
|
||
|
|
||
|
func TestIsEncryptionSupported(t *testing.T) {
|
||
|
mockCtrl := gomock.NewController(t)
|
||
|
defer mockCtrl.Finish()
|
||
|
|
||
|
_, mol, ol := initMocks(mockCtrl)
|
||
|
|
||
|
mol.EXPECT().IsEncryptionSupported().Return(true)
|
||
|
assert.True(t, ol.IsEncryptionSupported())
|
||
|
|
||
|
mol.EXPECT().IsEncryptionSupported().Return(false)
|
||
|
assert.False(t, ol.IsEncryptionSupported())
|
||
|
}
|
||
|
|
||
|
func initMocks(mockCtrl *gomock.Controller) (*MockErrorLogger, *MockObjectLayer, olLogWrap) {
|
||
|
logger := NewMockErrorLogger(mockCtrl)
|
||
|
mol := NewMockObjectLayer(mockCtrl)
|
||
|
ol := olLogWrap{ol: mol, logger: logger}
|
||
|
return logger, mol, ol
|
||
|
}
|
||
|
|
||
|
func initHashReader(t *testing.T) *hash.Reader {
|
||
|
data, err := hash.NewReader(bytes.NewReader([]byte("test")), 4,
|
||
|
"d8e8fca2dc0f896fd7cb4cb0031ba249",
|
||
|
"f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2")
|
||
|
assert.NoError(t, err)
|
||
|
return data
|
||
|
}
|