node_test.go 963 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package raft
  2. import "testing"
  3. const (
  4. defaultHeartbeat = 1
  5. defaultElection = 5
  6. )
  7. func TestTickMsgHub(t *testing.T) {
  8. n := New(3, 0, defaultHeartbeat, defaultElection, nil)
  9. called := false
  10. n.next = stepperFunc(func(m Message) {
  11. if m.Type == msgVote {
  12. called = true
  13. }
  14. })
  15. for i := 0; i < defaultElection+1; i++ {
  16. n.Tick()
  17. }
  18. if !called {
  19. t.Errorf("called = %v, want true", called)
  20. }
  21. }
  22. func TestTickMsgBeat(t *testing.T) {
  23. k := 3
  24. n := New(k, 0, defaultHeartbeat, defaultElection, nil)
  25. called := 0
  26. n.next = stepperFunc(func(m Message) {
  27. if m.Type == msgApp {
  28. called++
  29. }
  30. if m.Type == msgVote {
  31. n.Step(Message{From: 1, Type: msgVoteResp, Index: 1, Term: 1})
  32. }
  33. })
  34. n.Step(Message{Type: msgHup}) // become leader please
  35. for i := 0; i < defaultHeartbeat+1; i++ {
  36. n.Tick()
  37. }
  38. // becomeLeader -> k-1 append
  39. // msgBeat -> k-1 append
  40. w := (k - 1) * 2
  41. if called != w {
  42. t.Errorf("called = %v, want %v", called, w)
  43. }
  44. }