|
- package event
-
- import (
- "testing"
-
- "github.com/samber/lo"
- . "github.com/smartystreets/goconvey/convey"
- cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
- )
-
- func Test_chooseSoManyNodes(t *testing.T) {
- testcases := []struct {
- title string
- allNodes []*NodeLoadInfo
- count int
- expectedNodeIDs []cdssdk.NodeID
- }{
- {
- title: "节点数量充足",
- allNodes: []*NodeLoadInfo{
- {Node: cdssdk.Node{NodeID: cdssdk.NodeID(1)}},
- {Node: cdssdk.Node{NodeID: cdssdk.NodeID(2)}},
- },
- count: 2,
- expectedNodeIDs: []cdssdk.NodeID{1, 2},
- },
- {
- title: "节点数量超过",
- allNodes: []*NodeLoadInfo{
- {Node: cdssdk.Node{NodeID: cdssdk.NodeID(1)}},
- {Node: cdssdk.Node{NodeID: cdssdk.NodeID(2)}},
- {Node: cdssdk.Node{NodeID: cdssdk.NodeID(3)}},
- },
- count: 2,
- expectedNodeIDs: []cdssdk.NodeID{1, 2},
- },
- {
- title: "只有一个节点,节点数量不够",
- allNodes: []*NodeLoadInfo{
- {Node: cdssdk.Node{NodeID: cdssdk.NodeID(1)}},
- },
- count: 3,
- expectedNodeIDs: []cdssdk.NodeID{1, 1, 1},
- },
- {
- title: "多个同地区节点,节点数量不够",
- allNodes: []*NodeLoadInfo{
- {Node: cdssdk.Node{NodeID: cdssdk.NodeID(1)}},
- {Node: cdssdk.Node{NodeID: cdssdk.NodeID(2)}},
- },
- count: 5,
- expectedNodeIDs: []cdssdk.NodeID{1, 1, 1, 2, 2},
- },
- {
- title: "节点数量不够,且在不同地区",
- allNodes: []*NodeLoadInfo{
- {Node: cdssdk.Node{NodeID: cdssdk.NodeID(1), LocationID: cdssdk.LocationID(1)}},
- {Node: cdssdk.Node{NodeID: cdssdk.NodeID(2), LocationID: cdssdk.LocationID(2)}},
- },
- count: 5,
- expectedNodeIDs: []cdssdk.NodeID{1, 2, 1, 2, 1},
- },
- }
-
- for _, test := range testcases {
- Convey(test.title, t, func() {
- var t CheckPackageRedundancy
- chosenNodes := t.chooseSoManyNodes(test.count, test.allNodes)
-
- chosenNodeIDs := lo.Map(chosenNodes, func(item *NodeLoadInfo, idx int) cdssdk.NodeID { return item.Node.NodeID })
-
- So(chosenNodeIDs, ShouldResemble, test.expectedNodeIDs)
- })
- }
- }
|