raft/rafttest: simulate async send in node test

In order to cover message can well be received when a node is paused, this commit sends message async using goroutine and random sleep. This change makes recvms is possible to cache message during node.pause is triggered.
This commit is contained in:
Changkun Ou 2019-07-13 16:16:35 +02:00
parent e56e8471ec
commit 856097181b

View File

@ -17,6 +17,7 @@ package rafttest
import (
"context"
"log"
"math/rand"
"sync"
"time"
@ -79,9 +80,14 @@ func (n *node) start() {
}
n.storage.Append(rd.Entries)
time.Sleep(time.Millisecond)
// TODO: make send async, more like real world...
// simulate async send, more like real world...
for _, m := range rd.Messages {
n.iface.send(m)
mlocal := m
go func() {
time.Sleep(time.Duration(rand.Int63n(10)) * time.Millisecond)
n.iface.send(mlocal)
}()
}
n.Advance()
case m := <-n.iface.recv():