fix whisper tests (#1867)

This commit is contained in:
Adam Babik 2020-02-21 15:49:10 +01:00 committed by GitHub
parent 849492fda9
commit cc8e786702
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 65 additions and 26 deletions

View File

@ -22,6 +22,7 @@ import (
"crypto/sha256" "crypto/sha256"
"math" "math"
mrand "math/rand" mrand "math/rand"
"sync"
"testing" "testing"
"time" "time"
@ -945,7 +946,7 @@ func TestSendP2PDirect(t *testing.T) {
rwStub.messages = nil rwStub.messages = nil
// send a batch of envelopes // send a batch of envelopes
err = w.SendP2PDirect(peerW, env, env, env) err = w.SendP2PDirect(peerW.ID(), env, env, env)
if err != nil { if err != nil {
t.Fatalf("failed to send envelope with seed %d: %s.", seed, err) t.Fatalf("failed to send envelope with seed %d: %s.", seed, err)
} }
@ -1064,7 +1065,11 @@ func testConfirmationsHandshake(t *testing.T, expectConfirmations bool) {
time.AfterFunc(5*time.Second, func() { time.AfterFunc(5*time.Second, func() {
rw1.Close() rw1.Close()
}) })
require.NoError(t, p2p.ExpectMsg(rw1, statusCode, []interface{}{ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), false, expectConfirmations})) require.NoError(t, p2p.ExpectMsg(
rw1,
statusCode,
[]interface{}{ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), false, expectConfirmations, RateLimits{}},
))
} }
func TestConfirmationHadnshakeExtension(t *testing.T) { func TestConfirmationHadnshakeExtension(t *testing.T) {
@ -1091,7 +1096,11 @@ func TestConfirmationReceived(t *testing.T) {
time.AfterFunc(5*time.Second, func() { time.AfterFunc(5*time.Second, func() {
rw1.Close() rw1.Close()
}) })
require.NoError(t, p2p.ExpectMsg(rw1, statusCode, []interface{}{ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), false, true})) require.NoError(t, p2p.ExpectMsg(
rw1,
statusCode,
[]interface{}{ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), false, true, RateLimits{}},
))
require.NoError(t, p2p.SendItems(rw1, statusCode, ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), true, true)) require.NoError(t, p2p.SendItems(rw1, statusCode, ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), true, true))
e := Envelope{ e := Envelope{
@ -1126,8 +1135,15 @@ func TestMessagesResponseWithError(t *testing.T) {
err := w.HandlePeer(p, rw2) err := w.HandlePeer(p, rw2)
errorc <- err errorc <- err
}() }()
require.NoError(t, p2p.ExpectMsg(rw1, statusCode, []interface{}{ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), false, true})) require.NoError(t, p2p.ExpectMsg(
require.NoError(t, p2p.SendItems(rw1, statusCode, ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), true, true)) rw1,
statusCode,
[]interface{}{ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), false, true, RateLimits{}},
))
require.NoError(
t,
p2p.SendItems(rw1, statusCode, ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), true, true),
)
failed := Envelope{ failed := Envelope{
Expiry: uint32(time.Now().Add(time.Hour).Unix()), Expiry: uint32(time.Now().Add(time.Hour).Unix()),
@ -1174,7 +1190,11 @@ func testConfirmationEvents(t *testing.T, envelope Envelope, envelopeErrors []En
time.AfterFunc(5*time.Second, func() { time.AfterFunc(5*time.Second, func() {
rw1.Close() rw1.Close()
}) })
require.NoError(t, p2p.ExpectMsg(rw1, statusCode, []interface{}{ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), false, true})) require.NoError(t, p2p.ExpectMsg(
rw1,
statusCode,
[]interface{}{ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), false, true, RateLimits{}},
))
require.NoError(t, p2p.SendItems(rw1, statusCode, ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), true, true)) require.NoError(t, p2p.SendItems(rw1, statusCode, ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), true, true))
require.NoError(t, w.Send(&envelope)) require.NoError(t, w.Send(&envelope))
@ -1227,7 +1247,8 @@ func TestConfirmationEventsExtendedWithErrors(t *testing.T) {
Hash: e.Hash(), Hash: e.Hash(),
Code: EnvelopeTimeNotSynced, Code: EnvelopeTimeNotSynced,
Description: "test error", Description: "test error",
}}) }},
)
} }
func TestEventsWithoutConfirmation(t *testing.T) { func TestEventsWithoutConfirmation(t *testing.T) {
@ -1250,7 +1271,11 @@ func TestEventsWithoutConfirmation(t *testing.T) {
time.AfterFunc(5*time.Second, func() { time.AfterFunc(5*time.Second, func() {
rw1.Close() rw1.Close()
}) })
require.NoError(t, p2p.ExpectMsg(rw1, statusCode, []interface{}{ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), false, true})) require.NoError(t, p2p.ExpectMsg(
rw1,
statusCode,
[]interface{}{ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), false, true, RateLimits{}},
))
require.NoError(t, p2p.SendItems(rw1, statusCode, ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), true, false)) require.NoError(t, p2p.SendItems(rw1, statusCode, ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), true, false))
e := Envelope{ e := Envelope{
@ -1400,14 +1425,14 @@ func TestSyncMessages(t *testing.T) {
t.Run("WithoutPeer", func(t *testing.T) { t.Run("WithoutPeer", func(t *testing.T) {
w := New(nil) w := New(nil)
w.RegisterServer(&stubMailServer{}) w.RegisterMailServer(&stubMailServer{})
err := w.SyncMessages([]byte{0x01, 0x02}, SyncMailRequest{}) err := w.SyncMessages([]byte{0x01, 0x02}, SyncMailRequest{})
require.EqualError(t, err, "Could not find peer with ID: 0102") require.EqualError(t, err, "Could not find peer with ID: 0102")
}) })
t.Run("WithInvalidRequest", func(t *testing.T) { t.Run("WithInvalidRequest", func(t *testing.T) {
w := New(nil) w := New(nil)
w.RegisterServer(&stubMailServer{}) w.RegisterMailServer(&stubMailServer{})
p := p2p.NewPeer(enode.ID{0x01}, "peer01", nil) p := p2p.NewPeer(enode.ID{0x01}, "peer01", nil)
rw1, _ := p2p.MsgPipe() rw1, _ := p2p.MsgPipe()
@ -1420,7 +1445,7 @@ func TestSyncMessages(t *testing.T) {
t.Run("AllGood", func(t *testing.T) { t.Run("AllGood", func(t *testing.T) {
w := New(nil) w := New(nil)
w.RegisterServer(&stubMailServer{}) w.RegisterMailServer(&stubMailServer{})
p := p2p.NewPeer(enode.ID{0x01}, "peer01", nil) p := p2p.NewPeer(enode.ID{0x01}, "peer01", nil)
rw1, rw2 := p2p.MsgPipe() rw1, rw2 := p2p.MsgPipe()
@ -1441,13 +1466,23 @@ func TestSendSyncResponse(t *testing.T) {
p := p2p.NewPeer(enode.ID{0x01}, "peer01", nil) p := p2p.NewPeer(enode.ID{0x01}, "peer01", nil)
rw1, rw2 := p2p.MsgPipe() rw1, rw2 := p2p.MsgPipe()
whisperPeer := newPeer(w, p, rw1) whisperPeer := newPeer(w, p, rw1)
w.peers[whisperPeer] = struct{}{}
errC := make(chan error, 2)
var wg sync.WaitGroup
wg.Add(1)
go func() { go func() {
err := w.SendSyncResponse(whisperPeer, SyncResponse{}) errC <- w.SendSyncResponse(whisperPeer.ID(), SyncResponse{})
require.NoError(t, err) wg.Done()
}()
wg.Add(1)
go func() {
errC <- p2p.ExpectMsg(rw2, p2pSyncResponseCode, nil)
wg.Done()
}() }()
require.NoError(t, p2p.ExpectMsg(rw2, p2pSyncResponseCode, nil)) require.NoError(t, <-errC)
require.NoError(t, <-errC)
} }
func TestHandleP2PSyncRequestCode(t *testing.T) { func TestHandleP2PSyncRequestCode(t *testing.T) {
@ -1455,10 +1490,10 @@ func TestHandleP2PSyncRequestCode(t *testing.T) {
peer := newPeer(nil, p2p.NewPeer(enode.ID{}, "test", nil), nil) peer := newPeer(nil, p2p.NewPeer(enode.ID{}, "test", nil), nil)
mailMock := &mockMailServer{} mailMock := &mockMailServer{}
mailMock.On("SyncMail", peer, mock.Anything).Return(nil) mailMock.On("SyncMail", peer.ID(), mock.Anything).Return(nil)
w := New(nil) w := New(nil)
w.RegisterServer(mailMock) w.RegisterMailServer(mailMock)
go func() { go func() {
err := p2p.Send(rw1, p2pSyncRequestCode, SyncMailRequest{Limit: 10}) err := p2p.Send(rw1, p2pSyncRequestCode, SyncMailRequest{Limit: 10})
@ -1482,7 +1517,7 @@ func TestHandleP2PSyncRequestCodeWithInvalidRequest(t *testing.T) {
mailMock.On("SyncMail", peer, mock.Anything).Return(nil) mailMock.On("SyncMail", peer, mock.Anything).Return(nil)
w := New(nil) w := New(nil)
w.RegisterServer(mailMock) w.RegisterMailServer(mailMock)
// create an invalid request // create an invalid request
req := SyncMailRequest{Limit: 10, Lower: 10, Upper: 5} req := SyncMailRequest{Limit: 10, Lower: 10, Upper: 5}
@ -1509,7 +1544,7 @@ func TestHandleP2PSyncResponseCode(t *testing.T) {
mailMock.On("Archive", mock.Anything) mailMock.On("Archive", mock.Anything)
w := New(nil) w := New(nil)
w.RegisterServer(mailMock) w.RegisterMailServer(mailMock)
envelopesCount := 3 envelopesCount := 3
@ -1559,7 +1594,11 @@ func TestRateLimiterIntegration(t *testing.T) {
err := w.HandlePeer(p, rw2) err := w.HandlePeer(p, rw2)
errorc <- err errorc <- err
}() }()
require.NoError(t, p2p.ExpectMsg(rw1, statusCode, []interface{}{ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), false, true})) require.NoError(t, p2p.ExpectMsg(
rw1,
statusCode,
[]interface{}{ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), false, true, w.RateLimits()},
))
require.NoError(t, p2p.SendItems(rw1, statusCode, ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), true, true)) require.NoError(t, p2p.SendItems(rw1, statusCode, ProtocolVersion, math.Float64bits(w.MinPow()), w.BloomFilter(), true, true))
envelope := Envelope{ envelope := Envelope{
@ -1579,10 +1618,10 @@ func TestRateLimiterIntegration(t *testing.T) {
type stubMailServer struct{} type stubMailServer struct{}
func (stubMailServer) Archive(*Envelope) {} func (stubMailServer) Archive(*Envelope) {}
func (stubMailServer) DeliverMail(*Peer, *Envelope) {} func (stubMailServer) DeliverMail([]byte, *Envelope) {}
func (stubMailServer) Deliver(*Peer, MessagesRequest) {} func (stubMailServer) Deliver([]byte, MessagesRequest) {}
func (stubMailServer) SyncMail(*Peer, SyncMailRequest) error { return nil } func (stubMailServer) SyncMail([]byte, SyncMailRequest) error { return nil }
type mockMailServer struct { type mockMailServer struct {
mock.Mock mock.Mock
@ -1592,15 +1631,15 @@ func (m *mockMailServer) Archive(env *Envelope) {
m.Called(env) m.Called(env)
} }
func (m *mockMailServer) DeliverMail(p *Peer, env *Envelope) { func (m *mockMailServer) DeliverMail(p []byte, env *Envelope) {
m.Called(p, env) m.Called(p, env)
} }
func (m *mockMailServer) Deliver(p *Peer, r MessagesRequest) { func (m *mockMailServer) Deliver(p []byte, r MessagesRequest) {
m.Called(p, r) m.Called(p, r)
} }
func (m *mockMailServer) SyncMail(p *Peer, r SyncMailRequest) error { func (m *mockMailServer) SyncMail(p []byte, r SyncMailRequest) error {
args := m.Called(p, r) args := m.Called(p, r)
return args.Error(0) return args.Error(0)
} }