一致性哈希库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.0 KiB

  1. package hashring
  2. import (
  3. // "fmt"
  4. "testing"
  5. )
  6. const (
  7. node1 = "192.168.1.1"
  8. node2 = "192.168.1.2"
  9. node3 = "192.168.1.3"
  10. )
  11. func getNodesCount(nodes nodesArray) (int, int, int) {
  12. node1Count := 0
  13. node2Count := 0
  14. node3Count := 0
  15. for _, node := range nodes {
  16. if node.nodeKey == node1 {
  17. node1Count += 1
  18. }
  19. if node.nodeKey == node2 {
  20. node2Count += 1
  21. }
  22. if node.nodeKey == node3 {
  23. node3Count += 1
  24. }
  25. }
  26. return node1Count, node2Count, node3Count
  27. }
  28. func TestHash(t *testing.T) {
  29. nodeWeight := make(map[string]int)
  30. nodeWeight[node1] = 2
  31. nodeWeight[node2] = 2
  32. nodeWeight[node3] = 3
  33. vitualSpots := 100
  34. hash := NewHashRing(vitualSpots)
  35. hash.AddNodes(nodeWeight)
  36. if hash.GetNode("1") != node3 {
  37. t.Fatalf("expetcd %v got %v", node3, hash.GetNode("1"))
  38. }
  39. if hash.GetNode("2") != node3 {
  40. t.Fatalf("expetcd %v got %v", node3, hash.GetNode("2"))
  41. }
  42. if hash.GetNode("3") != node2 {
  43. t.Fatalf("expetcd %v got %v", node2, hash.GetNode("3"))
  44. }
  45. c1, c2, c3 := getNodesCount(hash.nodes)
  46. t.Logf("len of nodes is %v after AddNodes node1:%v, node2:%v, node3:%v", len(hash.nodes), c1, c2, c3)
  47. hash.RemoveNode(node3)
  48. if hash.GetNode("1") != node1 {
  49. t.Fatalf("expetcd %v got %v", node1, hash.GetNode("1"))
  50. }
  51. if hash.GetNode("2") != node2 {
  52. t.Fatalf("expetcd %v got %v", node1, hash.GetNode("2"))
  53. }
  54. if hash.GetNode("3") != node2 {
  55. t.Fatalf("expetcd %v got %v", node2, hash.GetNode("3"))
  56. }
  57. c1, c2, c3 = getNodesCount(hash.nodes)
  58. t.Logf("len of nodes is %v after RemoveNode node1:%v, node2:%v, node3:%v", len(hash.nodes), c1, c2, c3)
  59. hash.AddNode(node3, 3)
  60. if hash.GetNode("1") != node3 {
  61. t.Fatalf("expetcd %v got %v", node3, hash.GetNode("1"))
  62. }
  63. if hash.GetNode("2") != node3 {
  64. t.Fatalf("expetcd %v got %v", node3, hash.GetNode("2"))
  65. }
  66. if hash.GetNode("3") != node2 {
  67. t.Fatalf("expetcd %v got %v", node2, hash.GetNode("3"))
  68. }
  69. c1, c2, c3 = getNodesCount(hash.nodes)
  70. t.Logf("len of nodes is %v after AddNode node1:%v, node2:%v, node3:%v", len(hash.nodes), c1, c2, c3)
  71. }