upload/download tests with test-planet (#718)
* add upload/download test * use minio gateway for upload download * move test into miniogw package * logging edits, remove logging_test.go
This commit is contained in:
parent
72a7726513
commit
f46fcd0303
@ -10,6 +10,7 @@ import (
|
||||
"github.com/minio/cli"
|
||||
minio "github.com/minio/minio/cmd"
|
||||
"github.com/vivint/infectious"
|
||||
"go.uber.org/zap"
|
||||
|
||||
"storj.io/storj/pkg/eestream"
|
||||
"storj.io/storj/pkg/metainfo/kvmetainfo"
|
||||
@ -118,7 +119,7 @@ func (c Config) action(ctx context.Context, cliCtx *cli.Context, identity *provi
|
||||
return err
|
||||
}
|
||||
|
||||
minio.StartGateway(cliCtx, logging.Gateway(gw))
|
||||
minio.StartGateway(cliCtx, logging.Gateway(gw, zap.L()))
|
||||
return Error.New("unexpected minio exit")
|
||||
}
|
||||
|
||||
|
153
pkg/miniogw/integration_test.go
Normal file
153
pkg/miniogw/integration_test.go
Normal file
@ -0,0 +1,153 @@
|
||||
// Copyright (C) 2018 Storj Labs, Inc.
|
||||
// See LICENSE for copying information.
|
||||
|
||||
package miniogw
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/minio/cli"
|
||||
minio "github.com/minio/minio/cmd"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zaptest"
|
||||
|
||||
"storj.io/storj/internal/identity"
|
||||
"storj.io/storj/internal/s3client"
|
||||
"storj.io/storj/internal/testcontext"
|
||||
"storj.io/storj/internal/testplanet"
|
||||
"storj.io/storj/pkg/cfgstruct"
|
||||
"storj.io/storj/pkg/miniogw/logging"
|
||||
"storj.io/storj/pkg/provider"
|
||||
)
|
||||
|
||||
func TestUploadDownload(t *testing.T) {
|
||||
ctx := testcontext.New(t)
|
||||
defer ctx.Cleanup()
|
||||
|
||||
planet, err := testplanet.New(t, 1, 30, 0)
|
||||
assert.NoError(t, err)
|
||||
|
||||
defer ctx.Check(planet.Shutdown)
|
||||
|
||||
err = flag.Set("pointer-db.auth.api-key", "apiKey")
|
||||
assert.NoError(t, err)
|
||||
|
||||
// bind default values to config
|
||||
var gwCfg Config
|
||||
cfgstruct.Bind(&flag.FlagSet{}, &gwCfg)
|
||||
|
||||
// minio config directory
|
||||
gwCfg.Minio.Dir = ctx.Dir("minio")
|
||||
|
||||
// addresses
|
||||
gwCfg.Identity.Server.Address = "127.0.0.1:7777"
|
||||
gwCfg.Client.OverlayAddr = planet.Satellites[0].Addr()
|
||||
gwCfg.Client.PointerDBAddr = planet.Satellites[0].Addr()
|
||||
|
||||
// keys
|
||||
gwCfg.Client.APIKey = "apiKey"
|
||||
gwCfg.Enc.Key = "encKey"
|
||||
|
||||
// redundancy
|
||||
gwCfg.RS.MinThreshold = 7
|
||||
gwCfg.RS.RepairThreshold = 8
|
||||
gwCfg.RS.SuccessThreshold = 9
|
||||
gwCfg.RS.MaxThreshold = 10
|
||||
|
||||
planet.Start(ctx)
|
||||
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
// create identity for gateway
|
||||
ca, err := testidentity.NewTestCA(ctx)
|
||||
assert.NoError(t, err)
|
||||
identity, err := ca.NewIdentity()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// setup and start gateway
|
||||
go func() {
|
||||
// TODO: this leaks the gateway server, however it shouldn't
|
||||
err := runGateway(ctx, gwCfg, zaptest.NewLogger(t), identity)
|
||||
if err != nil {
|
||||
t.Log(err)
|
||||
}
|
||||
}()
|
||||
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
|
||||
client, err := s3client.NewMinio(s3client.Config{
|
||||
S3Gateway: gwCfg.Identity.Server.Address,
|
||||
Satellite: planet.Satellites[0].Addr(),
|
||||
AccessKey: gwCfg.Minio.AccessKey,
|
||||
SecretKey: gwCfg.Minio.SecretKey,
|
||||
APIKey: gwCfg.Client.APIKey,
|
||||
EncryptionKey: gwCfg.Enc.Key,
|
||||
NoSSL: true,
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
|
||||
bucket := "bucket"
|
||||
|
||||
err = client.MakeBucket(bucket, "")
|
||||
assert.NoError(t, err)
|
||||
|
||||
// generate enough data for a remote segment
|
||||
data := []byte{}
|
||||
for i := 0; i < 5000; i++ {
|
||||
data = append(data, 'a')
|
||||
}
|
||||
|
||||
objectName := "testdata"
|
||||
|
||||
err = client.Upload(bucket, objectName, data)
|
||||
assert.NoError(t, err)
|
||||
|
||||
buffer := make([]byte, len(data))
|
||||
|
||||
bytes, err := client.Download(bucket, objectName, buffer)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, string(data), string(bytes))
|
||||
}
|
||||
|
||||
// runGateway creates and starts a gateway
|
||||
func runGateway(ctx context.Context, c Config, log *zap.Logger, identity *provider.FullIdentity) (err error) {
|
||||
|
||||
// set gateway flags
|
||||
flags := flag.NewFlagSet("gateway", flag.ExitOnError)
|
||||
flags.String("address", c.Identity.Server.Address, "")
|
||||
flags.String("config-dir", c.Minio.Dir, "")
|
||||
flags.Bool("quiet", true, "")
|
||||
|
||||
// create *cli.Context with gateway flags
|
||||
cliCtx := cli.NewContext(cli.NewApp(), flags, nil)
|
||||
|
||||
// TODO: setting the flag on flagset and cliCtx seems redundant, but output is not quiet otherwise
|
||||
err = cliCtx.Set("quiet", "true")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = os.Setenv("MINIO_ACCESS_KEY", c.Minio.AccessKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = os.Setenv("MINIO_SECRET_KEY", c.Minio.SecretKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
gw, err := c.NewGateway(ctx, identity)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
minio.StartGateway(cliCtx, logging.Gateway(gw, log))
|
||||
return Error.New("unexpected minio exit")
|
||||
}
|
@ -17,19 +17,15 @@ import (
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
const (
|
||||
errTemplate = "gateway error: %v"
|
||||
debugTemplate = "gateway error: %+v"
|
||||
)
|
||||
|
||||
type gwLogWrap struct {
|
||||
gw minio.Gateway
|
||||
log *zap.Logger
|
||||
}
|
||||
|
||||
// Gateway is a wrapper of minio.Gateway that logs errors before
|
||||
// returning them.
|
||||
func Gateway(gw minio.Gateway) minio.Gateway {
|
||||
return &gwLogWrap{gw: gw}
|
||||
func Gateway(gw minio.Gateway, log *zap.Logger) minio.Gateway {
|
||||
return &gwLogWrap{gw, log}
|
||||
}
|
||||
|
||||
func (lg *gwLogWrap) Name() string { return lg.gw.Name() }
|
||||
@ -37,7 +33,7 @@ func (lg *gwLogWrap) Production() bool { return lg.gw.Production() }
|
||||
func (lg *gwLogWrap) NewGatewayLayer(creds auth.Credentials) (
|
||||
minio.ObjectLayer, error) {
|
||||
ol, err := lg.gw.NewGatewayLayer(creds)
|
||||
return &olLogWrap{ol: ol, logger: zap.S()}, err
|
||||
return &olLogWrap{ol: ol, logger: lg.log}, err
|
||||
}
|
||||
|
||||
type olLogWrap struct {
|
||||
@ -47,8 +43,7 @@ type olLogWrap struct {
|
||||
|
||||
// ErrorLogger logs a templated error message.
|
||||
type ErrorLogger interface {
|
||||
Errorf(template string, args ...interface{})
|
||||
Debugf(template string, args ...interface{})
|
||||
Error(msg string, fields ...zap.Field)
|
||||
}
|
||||
|
||||
// minioError checks if the given error is a minio error.
|
||||
@ -60,8 +55,7 @@ func minioError(err error) bool {
|
||||
// to allow method chaining.
|
||||
func (ol *olLogWrap) log(err error) error {
|
||||
if err != nil && !minioError(err) {
|
||||
ol.logger.Errorf(errTemplate, err)
|
||||
ol.logger.Debugf(debugTemplate, err)
|
||||
ol.logger.Error("gateway error:", zap.Error(err))
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
@ -1,993 +0,0 @@
|
||||
// Copyright (C) 2018 Storj Labs, Inc.
|
||||
// See LICENSE for copying information.
|
||||
|
||||
package logging
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"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/minio/minio/pkg/madmin"
|
||||
policy "github.com/minio/minio/pkg/policy"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
//go:generate mockgen -destination logger_mock_test.go -package logging storj.io/storj/pkg/miniogw/logging ErrorLogger
|
||||
|
||||
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)
|
||||
ErrMinio = minio.BucketNotFound{}
|
||||
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{{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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
err = ol.Shutdown(ctx)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().Shutdown(ctx).Return(ErrMinio)
|
||||
err = ol.Shutdown(ctx)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
}
|
||||
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
err = ol.MakeBucketWithLocation(ctx, bucket, location)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().MakeBucketWithLocation(ctx, bucket, location).Return(ErrMinio)
|
||||
err = ol.MakeBucketWithLocation(ctx, bucket, location)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
}
|
||||
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
info, err = ol.GetBucketInfo(ctx, bucket)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, minio.BucketInfo{}, info)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().GetBucketInfo(ctx, bucket).Return(minio.BucketInfo{}, ErrMinio)
|
||||
info, err = ol.GetBucketInfo(ctx, bucket)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
list, err = ol.ListBuckets(ctx)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, []minio.BucketInfo{}, list)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().ListBuckets(ctx).Return([]minio.BucketInfo{}, ErrMinio)
|
||||
list, err = ol.ListBuckets(ctx)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
err = ol.DeleteBucket(ctx, bucket)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().DeleteBucket(ctx, bucket).Return(ErrMinio)
|
||||
err = ol.DeleteBucket(ctx, bucket)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
}
|
||||
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
list, err = ol.ListObjects(ctx, bucket, prefix, marker, delimiter, maxKeys)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, minio.ListObjectsInfo{}, list)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().ListObjects(ctx, bucket, prefix, marker, delimiter, maxKeys).
|
||||
Return(minio.ListObjectsInfo{}, ErrMinio)
|
||||
list, err = ol.ListObjects(ctx, bucket, prefix, marker, delimiter, maxKeys)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
list, err = ol.ListObjectsV2(ctx, bucket, prefix, marker, delimiter,
|
||||
maxKeys, owner, startAfter)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, minio.ListObjectsV2Info{}, list)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().ListObjectsV2(ctx, bucket, prefix, marker, delimiter, maxKeys,
|
||||
owner, startAfter).Return(minio.ListObjectsV2Info{}, ErrMinio)
|
||||
list, err = ol.ListObjectsV2(ctx, bucket, prefix, marker, delimiter,
|
||||
maxKeys, owner, startAfter)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
err = ol.GetObject(ctx, bucket, object, offset, length, w, etag)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().GetObject(ctx, bucket, object, offset, length, w, etag).Return(ErrMinio)
|
||||
err = ol.GetObject(ctx, bucket, object, offset, length, w, etag)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
}
|
||||
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
info, err = ol.GetObjectInfo(ctx, bucket, object)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, minio.ObjectInfo{}, info)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().GetObjectInfo(ctx, bucket, object).Return(minio.ObjectInfo{}, ErrMinio)
|
||||
info, err = ol.GetObjectInfo(ctx, bucket, object)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
info, err = ol.PutObject(ctx, bucket, object, data, metadata)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, minio.ObjectInfo{}, info)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().PutObject(ctx, bucket, object, data, metadata).Return(minio.ObjectInfo{}, ErrMinio)
|
||||
info, err = ol.PutObject(ctx, bucket, object, data, metadata)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
info, err = ol.CopyObject(ctx, bucket, object, destBucket, destObject, objInfo)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, minio.ObjectInfo{}, info)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().CopyObject(ctx, bucket, object, destBucket, destObject, objInfo).
|
||||
Return(minio.ObjectInfo{}, ErrMinio)
|
||||
info, err = ol.CopyObject(ctx, bucket, object, destBucket, destObject, objInfo)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
err = ol.DeleteObject(ctx, bucket, object)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().DeleteObject(ctx, bucket, object).Return(ErrMinio)
|
||||
err = ol.DeleteObject(ctx, bucket, object)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
}
|
||||
|
||||
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{{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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
list, err = ol.ListMultipartUploads(ctx, bucket, prefix, marker, uidMarker,
|
||||
delimiter, maxKeys)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, minio.ListMultipartsInfo{}, list)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().ListMultipartUploads(ctx, bucket, prefix, marker, uidMarker,
|
||||
delimiter, maxKeys).Return(minio.ListMultipartsInfo{}, ErrMinio)
|
||||
list, err = ol.ListMultipartUploads(ctx, bucket, prefix, marker, uidMarker,
|
||||
delimiter, maxKeys)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
id, err = ol.NewMultipartUpload(ctx, bucket, object, metadata)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, "", id)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().NewMultipartUpload(ctx, bucket, object, metadata).Return("", ErrMinio)
|
||||
id, err = ol.NewMultipartUpload(ctx, bucket, object, metadata)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
info, err = ol.CopyObjectPart(ctx, bucket, object, destBucket, destObject,
|
||||
uploadID, partID, offset, length, objInfo)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, minio.PartInfo{}, info)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().CopyObjectPart(ctx, bucket, object, destBucket, destObject,
|
||||
uploadID, partID, offset, length, objInfo).Return(minio.PartInfo{}, ErrMinio)
|
||||
info, err = ol.CopyObjectPart(ctx, bucket, object, destBucket, destObject,
|
||||
uploadID, partID, offset, length, objInfo)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
info, err = ol.PutObjectPart(ctx, bucket, object, uploadID, partID, data)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, minio.PartInfo{}, info)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().PutObjectPart(ctx, bucket, object, uploadID, partID, data).
|
||||
Return(minio.PartInfo{}, ErrMinio)
|
||||
info, err = ol.PutObjectPart(ctx, bucket, object, uploadID, partID, data)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
list, err = ol.ListObjectParts(ctx, bucket, object, uploadID, partMarker, maxKeys)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, minio.ListPartsInfo{}, list)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().ListObjectParts(ctx, bucket, object, uploadID, partMarker, maxKeys).
|
||||
Return(minio.ListPartsInfo{}, ErrMinio)
|
||||
list, err = ol.ListObjectParts(ctx, bucket, object, uploadID, partMarker, maxKeys)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
err = ol.AbortMultipartUpload(ctx, bucket, object, uploadID)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().AbortMultipartUpload(ctx, bucket, object, uploadID).Return(ErrMinio)
|
||||
err = ol.AbortMultipartUpload(ctx, bucket, object, uploadID)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
}
|
||||
|
||||
func TestCompleteMultipartUpload(t *testing.T) {
|
||||
mockCtrl := gomock.NewController(t)
|
||||
defer mockCtrl.Finish()
|
||||
|
||||
logger, mol, ol := initMocks(mockCtrl)
|
||||
|
||||
parts := []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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
info, err = ol.CompleteMultipartUpload(ctx, bucket, object, uploadID, parts)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, minio.ObjectInfo{}, info)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().CompleteMultipartUpload(ctx, bucket, object, uploadID, parts).
|
||||
Return(minio.ObjectInfo{}, ErrMinio)
|
||||
info, err = ol.CompleteMultipartUpload(ctx, bucket, object, uploadID, parts)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
err = ol.ReloadFormat(ctx, dryRun)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().ReloadFormat(ctx, dryRun).Return(ErrMinio)
|
||||
err = ol.ReloadFormat(ctx, dryRun)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
}
|
||||
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
item, err = ol.HealFormat(ctx, dryRun)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, madmin.HealResultItem{}, item)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().HealFormat(ctx, dryRun).Return(madmin.HealResultItem{}, ErrMinio)
|
||||
item, err = ol.HealFormat(ctx, dryRun)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
list, err = ol.HealBucket(ctx, bucket, dryRun)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, []madmin.HealResultItem{}, list)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().HealBucket(ctx, bucket, dryRun).Return([]madmin.HealResultItem{}, ErrMinio)
|
||||
list, err = ol.HealBucket(ctx, bucket, dryRun)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
item, err = ol.HealObject(ctx, bucket, object, dryRun)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, madmin.HealResultItem{}, item)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().HealObject(ctx, bucket, object, dryRun).Return(madmin.HealResultItem{}, ErrMinio)
|
||||
item, err = ol.HealObject(ctx, bucket, object, dryRun)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
list, err = ol.ListBucketsHeal(ctx)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, []minio.BucketInfo{}, list)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().ListBucketsHeal(ctx).Return([]minio.BucketInfo{}, ErrMinio)
|
||||
list, err = ol.ListBucketsHeal(ctx)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
list, err = ol.ListObjectsHeal(ctx, bucket, prefix, marker, delimiter, maxKeys)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, minio.ListObjectsInfo{}, list)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().ListObjectsHeal(ctx, bucket, prefix, marker, delimiter, maxKeys).
|
||||
Return(minio.ListObjectsInfo{}, ErrMinio)
|
||||
list, err = ol.ListObjectsHeal(ctx, bucket, prefix, marker, delimiter, maxKeys)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
list, err = ol.ListLocks(ctx, bucket, prefix, duration)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Equal(t, []minio.VolumeLockInfo{}, list)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().ListLocks(ctx, bucket, prefix, duration).
|
||||
Return([]minio.VolumeLockInfo{}, ErrMinio)
|
||||
list, err = ol.ListLocks(ctx, bucket, prefix, duration)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
err = ol.ClearLocks(ctx, lockList)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().ClearLocks(ctx, lockList).Return(ErrMinio)
|
||||
err = ol.ClearLocks(ctx, lockList)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
}
|
||||
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
err = ol.SetBucketPolicy(ctx, n, plcy)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().SetBucketPolicy(ctx, n, plcy).Return(ErrMinio)
|
||||
err = ol.SetBucketPolicy(ctx, n, plcy)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
}
|
||||
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
p, err = ol.GetBucketPolicy(ctx, n)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
assert.Nil(t, p)
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().GetBucketPolicy(ctx, n).Return(nil, ErrMinio)
|
||||
p, err = ol.GetBucketPolicy(ctx, n)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
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)
|
||||
logger.EXPECT().Debugf(debugTemplate, ErrTest)
|
||||
err = ol.DeleteBucketPolicy(ctx, n)
|
||||
assert.Error(t, err, ErrTest.Error())
|
||||
|
||||
// Minio error returned
|
||||
mol.EXPECT().DeleteBucketPolicy(ctx, n).Return(ErrMinio)
|
||||
err = ol.DeleteBucketPolicy(ctx, n)
|
||||
assert.Error(t, err, ErrMinio.Error())
|
||||
}
|
||||
|
||||
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
|
||||
}
|
Loading…
Reference in New Issue
Block a user