etcd/raft/node_test.go
Yicheng Qin 4d22ff90d5 raft: refactor network simulator
Signed-off-by: Blake Mizerany <blake.mizerany@gmail.com>
2014-09-03 09:05:08 -07:00

60 lines
969 B
Go

package raft
import (
"testing"
)
const (
defaultHeartbeat = 1
defaultElection = 5
)
func TestTickMsgHub(t *testing.T) {
n := New(3, 0, defaultHeartbeat, defaultElection)
for i := 0; i < defaultElection+1; i++ {
n.Tick()
}
called := false
for _, m := range n.Msgs() {
if m.Type == msgVote {
called = true
}
}
if !called {
t.Errorf("called = %v, want true", called)
}
}
func TestTickMsgBeat(t *testing.T) {
k := 3
n := New(k, 0, defaultHeartbeat, defaultElection)
n.Step(Message{Type: msgHup}) // become leader please
for _, m := range n.Msgs() {
if m.Type == msgVote {
n.Step(Message{From: 1, Type: msgVoteResp, Index: 1, Term: 1})
}
}
for i := 0; i < defaultHeartbeat+1; i++ {
n.Tick()
}
called := 0
for _, m := range n.Msgs() {
if m.Type == msgApp {
called++
}
}
// becomeLeader -> k-1 append
// msgBeat -> k-1 append
w := (k - 1) * 2
if called != w {
t.Errorf("called = %v, want %v", called, w)
}
}