add test which demonstrates how Mocknet latency works

This commit is contained in:
Erin Swenson-Healey 2018-06-05 17:35:18 -07:00
parent 4b33a80057
commit bb9d55ac08
1 changed files with 53 additions and 0 deletions

View File

@ -582,3 +582,56 @@ func TestLimitedStreams(t *testing.T) {
t.Fatal("Expected 2ish seconds but got ", time.Since(before))
}
}
func TestStreamsWithLatency(t *testing.T) {
latency := time.Millisecond * 500
mn, err := WithNPeers(context.Background(), 2)
if err != nil {
t.Fatal(err)
}
// configure the Mocknet with some latency and link/connect its peers
mn.SetLinkDefaults(LinkOptions{Latency: latency})
mn.LinkAll()
mn.ConnectAllButSelf()
msg := []byte("ping")
mln := len(msg)
var wg sync.WaitGroup
// we'll write once to a single stream
wg.Add(1)
handler := func(s inet.Stream) {
b := make([]byte, mln)
if _, err := io.ReadFull(s, b); err != nil {
t.Fatal(err)
}
wg.Done()
s.Close()
}
mn.Hosts()[0].SetStreamHandler(protocol.TestingID, handler)
mn.Hosts()[1].SetStreamHandler(protocol.TestingID, handler)
s, err := mn.Hosts()[0].NewStream(context.Background(), mn.Hosts()[1].ID(), protocol.TestingID)
if err != nil {
t.Fatal(err)
}
// writing to the stream will be subject to our configured latency
checkpoint := time.Now()
if _, err := s.Write(msg); err != nil {
t.Fatal(err)
}
wg.Wait()
delta := time.Since(checkpoint)
if !within(delta, latency, time.Millisecond*50) {
t.Fatalf("Expected write to take ~%s, but took %s", latency.String(), delta.String())
}
}