You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

event_test.go 2.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package event
  2. import (
  3. "testing"
  4. "github.com/samber/lo"
  5. . "github.com/smartystreets/goconvey/convey"
  6. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  7. )
  8. func Test_chooseSoManyNodes(t *testing.T) {
  9. testcases := []struct {
  10. title string
  11. allNodes []*NodeLoadInfo
  12. count int
  13. expectedNodeIDs []cdssdk.NodeID
  14. }{
  15. {
  16. title: "节点数量充足",
  17. allNodes: []*NodeLoadInfo{
  18. {Node: cdssdk.Node{NodeID: cdssdk.NodeID(1)}},
  19. {Node: cdssdk.Node{NodeID: cdssdk.NodeID(2)}},
  20. },
  21. count: 2,
  22. expectedNodeIDs: []cdssdk.NodeID{1, 2},
  23. },
  24. {
  25. title: "节点数量超过",
  26. allNodes: []*NodeLoadInfo{
  27. {Node: cdssdk.Node{NodeID: cdssdk.NodeID(1)}},
  28. {Node: cdssdk.Node{NodeID: cdssdk.NodeID(2)}},
  29. {Node: cdssdk.Node{NodeID: cdssdk.NodeID(3)}},
  30. },
  31. count: 2,
  32. expectedNodeIDs: []cdssdk.NodeID{1, 2},
  33. },
  34. {
  35. title: "只有一个节点,节点数量不够",
  36. allNodes: []*NodeLoadInfo{
  37. {Node: cdssdk.Node{NodeID: cdssdk.NodeID(1)}},
  38. },
  39. count: 3,
  40. expectedNodeIDs: []cdssdk.NodeID{1, 1, 1},
  41. },
  42. {
  43. title: "多个同地区节点,节点数量不够",
  44. allNodes: []*NodeLoadInfo{
  45. {Node: cdssdk.Node{NodeID: cdssdk.NodeID(1)}},
  46. {Node: cdssdk.Node{NodeID: cdssdk.NodeID(2)}},
  47. },
  48. count: 5,
  49. expectedNodeIDs: []cdssdk.NodeID{1, 1, 1, 2, 2},
  50. },
  51. {
  52. title: "节点数量不够,且在不同地区",
  53. allNodes: []*NodeLoadInfo{
  54. {Node: cdssdk.Node{NodeID: cdssdk.NodeID(1), LocationID: cdssdk.LocationID(1)}},
  55. {Node: cdssdk.Node{NodeID: cdssdk.NodeID(2), LocationID: cdssdk.LocationID(2)}},
  56. },
  57. count: 5,
  58. expectedNodeIDs: []cdssdk.NodeID{1, 2, 1, 2, 1},
  59. },
  60. }
  61. for _, test := range testcases {
  62. Convey(test.title, t, func() {
  63. var t CheckPackageRedundancy
  64. chosenNodes := t.chooseSoManyNodes(test.count, test.allNodes)
  65. chosenNodeIDs := lo.Map(chosenNodes, func(item *NodeLoadInfo, idx int) cdssdk.NodeID { return item.Node.NodeID })
  66. So(chosenNodeIDs, ShouldResemble, test.expectedNodeIDs)
  67. })
  68. }
  69. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。