1
// Copyright 2022 The CubeFS Authors.
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
7
// http://www.apache.org/licenses/LICENSE-2.0
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12
// implied. See the License for the specific language governing
13
// permissions and limitations under the License.
22
"github.com/golang/mock/gomock"
23
"github.com/stretchr/testify/require"
25
api "github.com/cubefs/cubefs/blobstore/api/scheduler"
26
"github.com/cubefs/cubefs/blobstore/common/codemode"
27
"github.com/cubefs/cubefs/blobstore/common/proto"
28
"github.com/cubefs/cubefs/blobstore/scheduler/client"
29
"github.com/cubefs/cubefs/blobstore/testing/mocks"
32
func newManualMigrater(t *testing.T) *ManualMigrateMgr {
33
ctr := gomock.NewController(t)
34
clusterMgr := NewMockClusterMgrAPI(ctr)
35
volumeUpdater := NewMockVolumeUpdater(ctr)
36
taskLogger := mocks.NewMockRecordLogEncoder(ctr)
37
migrater := NewMockMigrater(ctr)
38
mgr := NewManualMigrateMgr(clusterMgr, volumeUpdater, taskLogger, &MigrateConfig{ClusterID: 1})
39
mgr.IMigrator = migrater
43
func TestManualMigrateLoad(t *testing.T) {
44
mgr := newManualMigrater(t)
45
mgr.IMigrator.(*MockMigrater).EXPECT().Load().Return(nil)
47
require.NoError(t, err)
50
func TestManualMigrateRun(t *testing.T) {
51
mgr := newManualMigrater(t)
52
mgr.IMigrator.(*MockMigrater).EXPECT().Run().Return()
56
func TestManualMigrateAddTask(t *testing.T) {
57
ctx := context.Background()
59
mgr := newManualMigrater(t)
60
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().GetVolumeInfo(any, any).Return(nil, errMock)
61
err := mgr.AddManualTask(ctx, proto.Vuid(1), false)
62
require.True(t, errors.Is(err, errMock))
65
mgr := newManualMigrater(t)
66
volume := MockGenVolInfo(10001, codemode.EC6P6, proto.VolumeStatusIdle)
67
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().GetVolumeInfo(any, any).Return(volume, nil)
68
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().GetDiskInfo(any, any).Return(nil, errMock)
69
err := mgr.AddManualTask(ctx, proto.Vuid(1), false)
70
require.True(t, errors.Is(err, errMock))
73
mgr := newManualMigrater(t)
74
volume := MockGenVolInfo(10001, codemode.EC6P6, proto.VolumeStatusIdle)
75
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().GetVolumeInfo(any, any).Return(volume, nil)
76
mgr.clusterMgrCli.(*MockClusterMgrAPI).EXPECT().GetDiskInfo(any, any).Return(&client.DiskInfoSimple{}, nil)
77
mgr.IMigrator.(*MockMigrater).EXPECT().AddTask(any, any).Return()
78
err := mgr.AddManualTask(ctx, proto.Vuid(1), false)
79
require.NoError(t, err)
83
func TestManualMigrateAcquireTask(t *testing.T) {
84
ctx := context.Background()
86
mgr := newManualMigrater(t)
87
mgr.IMigrator.(*MockMigrater).EXPECT().AcquireTask(any, any).Return(proto.MigrateTask{TaskType: proto.TaskTypeManualMigrate}, nil)
88
_, err := mgr.AcquireTask(ctx, idc)
89
require.NoError(t, err)
92
func TestManualMigrateCancelTask(t *testing.T) {
93
ctx := context.Background()
94
mgr := newManualMigrater(t)
95
mgr.IMigrator.(*MockMigrater).EXPECT().CancelTask(any, any).Return(nil)
96
err := mgr.CancelTask(ctx, &api.OperateTaskArgs{})
97
require.NoError(t, err)
100
func TestManualMigrateReclaimTask(t *testing.T) {
101
ctx := context.Background()
103
mgr := newManualMigrater(t)
104
mgr.IMigrator.(*MockMigrater).EXPECT().ReclaimTask(any, any, any, any, any, any).Return(nil)
105
t1 := mockGenMigrateTask(proto.TaskTypeManualMigrate, idc, 4, 100, proto.MigrateStatePrepared, MockMigrateVolInfoMap)
106
err := mgr.ReclaimTask(ctx, idc, t1.TaskID, t1.Sources, t1.Destination, &client.AllocVunitInfo{})
107
require.NoError(t, err)
110
func TestManualMigrateCompleteTask(t *testing.T) {
111
ctx := context.Background()
113
mgr := newManualMigrater(t)
114
mgr.IMigrator.(*MockMigrater).EXPECT().CompleteTask(any, any).Return(nil)
115
t1 := mockGenMigrateTask(proto.TaskTypeManualMigrate, idc, 4, 100, proto.MigrateStatePrepared, MockMigrateVolInfoMap)
116
err := mgr.CompleteTask(ctx, &api.OperateTaskArgs{IDC: idc, TaskID: t1.TaskID, Src: t1.Sources, Dest: t1.Destination})
117
require.NoError(t, err)
119
mgr.IMigrator.(*MockMigrater).EXPECT().CompleteTask(any, any).Return(errMock)
120
err = mgr.CompleteTask(ctx, &api.OperateTaskArgs{IDC: idc, TaskID: t1.TaskID, Src: t1.Sources, Dest: t1.Destination})
121
require.True(t, errors.Is(err, errMock))
124
func TestManualMigrateRenewalTask(t *testing.T) {
125
ctx := context.Background()
127
mgr := newManualMigrater(t)
128
mgr.IMigrator.(*MockMigrater).EXPECT().RenewalTask(any, any, any).Return(nil)
129
err := mgr.RenewalTask(ctx, idc, "")
130
require.NoError(t, err)
132
mgr.IMigrator.(*MockMigrater).EXPECT().RenewalTask(any, any, any).Return(errMock)
133
err = mgr.RenewalTask(ctx, idc, "")
134
require.True(t, errors.Is(err, errMock))