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.
20
"github.com/stretchr/testify/require"
22
"github.com/cubefs/cubefs/blobstore/common/codemode"
23
"github.com/cubefs/cubefs/blobstore/common/proto"
26
func TestSchedulerAll(t *testing.T) {
27
require.True(t, proto.TaskTypeBlobDelete.Valid())
28
require.True(t, proto.TaskTypeDiskRepair.Valid())
29
require.False(t, proto.TaskType("").Valid())
30
require.False(t, proto.TaskType("nothing-xxx").Valid())
31
require.Equal(t, "nothing-xxx", proto.TaskType("nothing-xxx").String())
33
var locs []proto.VunitLocation
34
require.False(t, proto.CheckVunitLocations(locs))
35
locs = append(locs, proto.VunitLocation{})
36
require.False(t, proto.CheckVunitLocations(locs))
38
require.False(t, proto.CheckVunitLocations(locs))
39
locs[0].Host = "localhost"
40
require.False(t, proto.CheckVunitLocations(locs))
42
require.True(t, proto.CheckVunitLocations(locs))
44
vt := &proto.VolumeInspectTask{Mode: codemode.EC6P6}
45
require.False(t, vt.IsValid())
46
vi := proto.VolumeInspectRet{}
47
require.NoError(t, vi.Err())
48
vi.InspectErrStr = "has error"
49
require.Error(t, vi.Err())
51
sr := proto.ShardRepairTask{}
52
require.False(t, sr.IsValid())
54
require.False(t, sr.IsValid())
57
func TestSchedulerMigrateTask(t *testing.T) {
58
sVuid, _ := proto.NewVuid(111, 1, 1)
59
dVuid, _ := proto.NewVuid(222, 2, 2)
60
mt := proto.MigrateTask{
62
TaskType: proto.TaskTypeBalance,
63
State: proto.MigrateStateWorkCompleted,
68
CodeMode: codemode.EC6P6,
69
Sources: []proto.VunitLocation{{Vuid: sVuid, Host: "src_host", DiskID: 11}},
70
Destination: proto.VunitLocation{Vuid: dVuid, Host: "dest_host", DiskID: 22},
73
require.Equal(t, proto.Vid(111), mt.Vid())
74
require.Equal(t, dVuid, mt.GetDestination().Vuid)
75
require.Equal(t, proto.DiskID(11), mt.GetSourceDiskID())
76
require.Equal(t, proto.DiskID(22), mt.DestinationDiskID())
77
require.Equal(t, 1, len(mt.GetSources()))
78
require.True(t, mt.Running())
79
require.True(t, mt.IsValid())
80
require.Equal(t, mt, *(mt.Copy()))
82
mt.SetDestination(proto.VunitLocation{DiskID: 33})
83
require.Equal(t, proto.DiskID(33), mt.DestinationDiskID())
86
func TestSchedulerTaskProgress(t *testing.T) {
88
tp := proto.NewTaskProgress()
89
require.Equal(t, proto.TaskStatistics{}, tp.Done())
92
require.True(t, tp.Done().Progress >= 100)
94
require.True(t, tp.Done().Progress >= 100)
97
tp := proto.NewTaskProgress()
99
require.False(t, tp.Done().Progress >= 100)
101
for range [9]struct{}{} {
103
require.False(t, tp.Done().Progress >= 100)
105
for range [3]struct{}{} {
107
require.True(t, tp.Done().Progress >= 100)