cubefs

Форк
0
/
scheduler_test.go 
109 строк · 3.3 Кб
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 proto_test
16

17
import (
18
	"testing"
19

20
	"github.com/stretchr/testify/require"
21

22
	"github.com/cubefs/cubefs/blobstore/common/codemode"
23
	"github.com/cubefs/cubefs/blobstore/common/proto"
24
)
25

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())
32

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))
37
	locs[0].Vuid = 1
38
	require.False(t, proto.CheckVunitLocations(locs))
39
	locs[0].Host = "localhost"
40
	require.False(t, proto.CheckVunitLocations(locs))
41
	locs[0].DiskID = 10
42
	require.True(t, proto.CheckVunitLocations(locs))
43

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())
50

51
	sr := proto.ShardRepairTask{}
52
	require.False(t, sr.IsValid())
53
	sr.CodeMode = 1
54
	require.False(t, sr.IsValid())
55
}
56

57
func TestSchedulerMigrateTask(t *testing.T) {
58
	sVuid, _ := proto.NewVuid(111, 1, 1)
59
	dVuid, _ := proto.NewVuid(222, 2, 2)
60
	mt := proto.MigrateTask{
61
		TaskID:   "task_id",
62
		TaskType: proto.TaskTypeBalance,
63
		State:    proto.MigrateStateWorkCompleted,
64

65
		SourceIDC:    "z0",
66
		SourceDiskID: 11,
67
		SourceVuid:   sVuid,
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},
71
	}
72

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()))
81

82
	mt.SetDestination(proto.VunitLocation{DiskID: 33})
83
	require.Equal(t, proto.DiskID(33), mt.DestinationDiskID())
84
}
85

86
func TestSchedulerTaskProgress(t *testing.T) {
87
	{
88
		tp := proto.NewTaskProgress()
89
		require.Equal(t, proto.TaskStatistics{}, tp.Done())
90

91
		tp.Total(0, 10)
92
		require.True(t, tp.Done().Progress >= 100)
93
		tp.Do(10, 10)
94
		require.True(t, tp.Done().Progress >= 100)
95
	}
96

97
	tp := proto.NewTaskProgress()
98
	tp.Total(100, 10)
99
	require.False(t, tp.Done().Progress >= 100)
100

101
	for range [9]struct{}{} {
102
		tp.Do(11, 1)
103
		require.False(t, tp.Done().Progress >= 100)
104
	}
105
	for range [3]struct{}{} {
106
		tp.Do(11, 1)
107
		require.True(t, tp.Done().Progress >= 100)
108
	}
109
}
110

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

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

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

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