|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- package event
-
- import (
- "testing"
-
- "github.com/samber/lo"
- . "github.com/smartystreets/goconvey/convey"
- "gitlink.org.cn/cloudream/common/utils/sort"
- "gitlink.org.cn/cloudream/storage-common/consts"
- "gitlink.org.cn/cloudream/storage-common/pkgs/db/model"
- )
-
- func Test_chooseNewRepNodes(t *testing.T) {
- testcases := []struct {
- title string
- allNodes []model.Node
- curRepNodes []model.Node
- newCount int
- wantNodeIDs []int
- }{
- {
- title: "优先选择不同地域的节点",
- allNodes: []model.Node{
- {
- NodeID: 1,
- LocationID: 1,
- State: consts.NodeStateNormal,
- },
- {
- NodeID: 2,
- LocationID: 1,
- State: consts.NodeStateNormal,
- },
- {
- NodeID: 3,
- LocationID: 2,
- State: consts.NodeStateNormal,
- },
- {
- NodeID: 4,
- LocationID: 3,
- State: consts.NodeStateNormal,
- },
- },
- curRepNodes: []model.Node{
- {
- NodeID: 1,
- LocationID: 1,
- },
- },
- newCount: 2,
- wantNodeIDs: []int{3, 4},
- },
- {
- title: "就算节点数不足,也不能选择重复节点",
- allNodes: []model.Node{
- {
- NodeID: 1,
- LocationID: 1,
- State: consts.NodeStateNormal,
- },
- {
- NodeID: 2,
- LocationID: 1,
- State: consts.NodeStateNormal,
- },
- },
- curRepNodes: []model.Node{
- {
- NodeID: 1,
- LocationID: 1,
- },
- },
- newCount: 2,
- wantNodeIDs: []int{2},
- },
- {
- title: "就算节点数不足,也不能选择状态unavailable的节点",
- allNodes: []model.Node{
- {
- NodeID: 1,
- LocationID: 1,
- State: consts.NodeStateUnavailable,
- },
- {
- NodeID: 2,
- LocationID: 1,
- State: consts.NodeStateNormal,
- },
- },
- curRepNodes: []model.Node{
- {
- NodeID: 3,
- LocationID: 1,
- },
- },
- newCount: 2,
- wantNodeIDs: []int{2},
- },
- }
-
- for _, test := range testcases {
- Convey(test.title, t, func() {
- chooseNodes := chooseNewRepNodes(test.allNodes, test.curRepNodes, test.newCount)
- chooseNodeIDs := lo.Map(chooseNodes, func(node model.Node, index int) int64 { return node.NodeID })
-
- sort.Sort(chooseNodeIDs, sort.Cmp[int64])
-
- So(chooseNodeIDs, ShouldResemble, test.wantNodeIDs)
- })
- }
- }
-
- func Test_chooseDeleteAvaiRepNodes(t *testing.T) {
- testcases := []struct {
- title string
- allNodes []model.Node
- curRepNodes []model.Node
- delCount int
- wantNodeLocationIDs []int
- }{
- {
- title: "优先选择地域重复的节点",
- allNodes: []model.Node{},
- curRepNodes: []model.Node{
- {NodeID: 1, LocationID: 1}, {NodeID: 2, LocationID: 1},
- {NodeID: 3, LocationID: 2}, {NodeID: 4, LocationID: 2},
- {NodeID: 5, LocationID: 3}, {NodeID: 6, LocationID: 3}, {NodeID: 7, LocationID: 3},
- {NodeID: 8, LocationID: 4},
- },
- delCount: 4,
- wantNodeLocationIDs: []int{1, 2, 3, 3},
- },
- {
- title: "节点不够删",
- allNodes: []model.Node{},
- curRepNodes: []model.Node{
- {NodeID: 1, LocationID: 1},
- },
- delCount: 2,
- wantNodeLocationIDs: []int{1},
- },
- }
-
- for _, test := range testcases {
- Convey(test.title, t, func() {
- chooseNodes := chooseDeleteAvaiRepNodes(test.allNodes, test.curRepNodes, test.delCount)
- chooseNodeLocationIDs := lo.Map(chooseNodes, func(node model.Node, index int) int64 { return node.LocationID })
-
- sort.Sort(chooseNodeLocationIDs, sort.Cmp[int64])
-
- So(chooseNodeLocationIDs, ShouldResemble, test.wantNodeLocationIDs)
- })
- }
- }
|