85 lines
2.0 KiB
Go
85 lines
2.0 KiB
Go
package hashring
|
|
|
|
import (
|
|
// "fmt"
|
|
"testing"
|
|
)
|
|
|
|
const (
|
|
node1 = "192.168.1.1"
|
|
node2 = "192.168.1.2"
|
|
node3 = "192.168.1.3"
|
|
)
|
|
|
|
func getNodesCount(nodes nodesArray) (int, int, int) {
|
|
node1Count := 0
|
|
node2Count := 0
|
|
node3Count := 0
|
|
|
|
for _, node := range nodes {
|
|
if node.nodeKey == node1 {
|
|
node1Count += 1
|
|
}
|
|
if node.nodeKey == node2 {
|
|
node2Count += 1
|
|
|
|
}
|
|
if node.nodeKey == node3 {
|
|
node3Count += 1
|
|
|
|
}
|
|
}
|
|
return node1Count, node2Count, node3Count
|
|
}
|
|
|
|
func TestHash(t *testing.T) {
|
|
|
|
nodeWeight := make(map[string]int)
|
|
nodeWeight[node1] = 2
|
|
nodeWeight[node2] = 2
|
|
nodeWeight[node3] = 3
|
|
vitualSpots := 100
|
|
|
|
hash := NewHashRing(vitualSpots)
|
|
|
|
hash.AddNodes(nodeWeight)
|
|
if hash.GetNode("1") != node3 {
|
|
t.Fatalf("expetcd %v got %v", node3, hash.GetNode("1"))
|
|
}
|
|
if hash.GetNode("2") != node3 {
|
|
t.Fatalf("expetcd %v got %v", node3, hash.GetNode("2"))
|
|
}
|
|
if hash.GetNode("3") != node2 {
|
|
t.Fatalf("expetcd %v got %v", node2, hash.GetNode("3"))
|
|
}
|
|
c1, c2, c3 := getNodesCount(hash.nodes)
|
|
t.Logf("len of nodes is %v after AddNodes node1:%v, node2:%v, node3:%v", len(hash.nodes), c1, c2, c3)
|
|
|
|
hash.RemoveNode(node3)
|
|
if hash.GetNode("1") != node1 {
|
|
t.Fatalf("expetcd %v got %v", node1, hash.GetNode("1"))
|
|
}
|
|
if hash.GetNode("2") != node2 {
|
|
t.Fatalf("expetcd %v got %v", node1, hash.GetNode("2"))
|
|
}
|
|
if hash.GetNode("3") != node2 {
|
|
t.Fatalf("expetcd %v got %v", node2, hash.GetNode("3"))
|
|
}
|
|
c1, c2, c3 = getNodesCount(hash.nodes)
|
|
t.Logf("len of nodes is %v after RemoveNode node1:%v, node2:%v, node3:%v", len(hash.nodes), c1, c2, c3)
|
|
|
|
hash.AddNode(node3, 3)
|
|
if hash.GetNode("1") != node3 {
|
|
t.Fatalf("expetcd %v got %v", node3, hash.GetNode("1"))
|
|
}
|
|
if hash.GetNode("2") != node3 {
|
|
t.Fatalf("expetcd %v got %v", node3, hash.GetNode("2"))
|
|
}
|
|
if hash.GetNode("3") != node2 {
|
|
t.Fatalf("expetcd %v got %v", node2, hash.GetNode("3"))
|
|
}
|
|
c1, c2, c3 = getNodesCount(hash.nodes)
|
|
t.Logf("len of nodes is %v after AddNode node1:%v, node2:%v, node3:%v", len(hash.nodes), c1, c2, c3)
|
|
|
|
}
|