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

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

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