...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package rafttest
16
17 import (
18 "testing"
19 "time"
20
21 "go.etcd.io/etcd/raft/v3/raftpb"
22 )
23
24 func TestNetworkDrop(t *testing.T) {
25
26 sent := 1000
27 droprate := 0.1
28 nt := newRaftNetwork(1, 2)
29 nt.drop(1, 2, droprate)
30 for i := 0; i < sent; i++ {
31 nt.send(raftpb.Message{From: 1, To: 2})
32 }
33
34 c := nt.recvFrom(2)
35
36 received := 0
37 done := false
38 for !done {
39 select {
40 case <-c:
41 received++
42 default:
43 done = true
44 }
45 }
46
47 drop := sent - received
48 if drop > int((droprate+0.1)*float64(sent)) || drop < int((droprate-0.1)*float64(sent)) {
49 t.Errorf("drop = %d, want around %.2f", drop, droprate*float64(sent))
50 }
51 }
52
53 func TestNetworkDelay(t *testing.T) {
54 sent := 1000
55 delay := time.Millisecond
56 delayrate := 0.1
57 nt := newRaftNetwork(1, 2)
58
59 nt.delay(1, 2, delay, delayrate)
60 var total time.Duration
61 for i := 0; i < sent; i++ {
62 s := time.Now()
63 nt.send(raftpb.Message{From: 1, To: 2})
64 total += time.Since(s)
65 }
66
67 w := time.Duration(float64(sent)*delayrate/2) * delay
68
69 if total < w {
70 t.Errorf("total = %v, want > %v", total, w)
71 }
72 }
73
View as plain text