mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
60 lines
969 B
Go
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)
|
|
}
|
|
}
|