cubefs

Форк
0
/
manual_migrater_test.go 
135 строк · 4.9 Кб
1
// Copyright 2022 The CubeFS Authors.
2
//
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
6
//
7
//     http://www.apache.org/licenses/LICENSE-2.0
8
//
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.
14

15
package scheduler
16

17
import (
18
	"context"
19
	"errors"
20
	"testing"
21

22
	"github.com/golang/mock/gomock"
23
	"github.com/stretchr/testify/require"
24

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"
30
)
31

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
40
	return mgr
41
}
42

43
func TestManualMigrateLoad(t *testing.T) {
44
	mgr := newManualMigrater(t)
45
	mgr.IMigrator.(*MockMigrater).EXPECT().Load().Return(nil)
46
	err := mgr.Load()
47
	require.NoError(t, err)
48
}
49

50
func TestManualMigrateRun(t *testing.T) {
51
	mgr := newManualMigrater(t)
52
	mgr.IMigrator.(*MockMigrater).EXPECT().Run().Return()
53
	mgr.Run()
54
}
55

56
func TestManualMigrateAddTask(t *testing.T) {
57
	ctx := context.Background()
58
	{
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))
63
	}
64
	{
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))
71
	}
72
	{
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)
80
	}
81
}
82

83
func TestManualMigrateAcquireTask(t *testing.T) {
84
	ctx := context.Background()
85
	idc := "z0"
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)
90
}
91

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)
98
}
99

100
func TestManualMigrateReclaimTask(t *testing.T) {
101
	ctx := context.Background()
102
	idc := "z0"
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)
108
}
109

110
func TestManualMigrateCompleteTask(t *testing.T) {
111
	ctx := context.Background()
112
	idc := "z0"
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)
118

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))
122
}
123

124
func TestManualMigrateRenewalTask(t *testing.T) {
125
	ctx := context.Background()
126
	idc := "z0"
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)
131

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))
135
}
136

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.