Skip to content

Commit

Permalink
peer: Add startPeer test function
Browse files Browse the repository at this point in the history
Signed-off-by: Ononiwu Maureen <maureen.ononiwu@outlook.com>
  • Loading branch information
Ononiwu Maureen authored and Chinwendu20 committed Apr 9, 2024
1 parent cd904aa commit eaba9c8
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 42 deletions.
44 changes: 3 additions & 41 deletions peer/brontide_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1012,27 +1012,8 @@ func TestPeerCustomMessage(t *testing.T) {

remoteKey := alicePeer.PubKey()

// Set up the init sequence.
go func() {
// Read init message.
<-mockConn.writtenMessages

// Write the init reply message.
initReplyMsg := lnwire.NewInitMessage(
lnwire.NewRawFeatureVector(
lnwire.DataLossProtectRequired,
),
lnwire.NewRawFeatureVector(),
)
var b bytes.Buffer
_, err := lnwire.WriteMessage(&b, initReplyMsg, 0)
require.NoError(t, err)

mockConn.readMessages <- b.Bytes()
}()

// Start the peer.
require.NoError(t, alicePeer.Start())
// Start peer.
startPeer(t, mockConn, alicePeer)

// Send a custom message.
customMsg, err := lnwire.NewCustom(
Expand Down Expand Up @@ -1320,27 +1301,8 @@ func TestStartupWriteMessageRace(t *testing.T) {
close(sendPingDone)
}()

// Handle init messages.
go func() {
// Read init message.
<-mockConn.writtenMessages

// Write the init reply message.
initReplyMsg := lnwire.NewInitMessage(
lnwire.NewRawFeatureVector(
lnwire.DataLossProtectRequired,
),
lnwire.NewRawFeatureVector(),
)
var b bytes.Buffer
_, err = lnwire.WriteMessage(&b, initReplyMsg, 0)
require.NoError(t, err)

mockConn.readMessages <- b.Bytes()
}()

// Start the peer. No data race should occur.
require.NoError(t, peer.Start())
startPeer(t, mockConn, peer)

// Ensure messages were sent during startup.
<-sendPingDone
Expand Down
68 changes: 67 additions & 1 deletion peer/test_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import (
"bytes"
crand "crypto/rand"
"encoding/binary"
"errors"
"github.com/lightningnetwork/lnd/fn"
"io"
"math/rand"
"net"
Expand Down Expand Up @@ -591,7 +593,7 @@ func createTestPeer(t *testing.T) *testPeerEnv {
nodeSignerAlice := netann.NewNodeSigner(aliceKeySigner)

chanStatusMgr, err := netann.NewChanStatusManager(&netann.
ChanStatusConfig{
ChanStatusConfig{
ChanStatusSampleInterval: 30 * time.Second,
ChanEnableTimeout: chanActiveTimeout,
ChanDisableTimeout: 2 * time.Minute,
Expand Down Expand Up @@ -726,3 +728,67 @@ func createTestPeer(t *testing.T) *testPeerEnv {
chanStatusMgr: chanStatusMgr,
}
}

func startPeer(t *testing.T, mockConn *mockMessageConn, peer *Brontide) {
errChan := make(chan error)
go func() {
rawMsg, err := fn.RecvOrTimeout[[]byte](
mockConn.writtenMessages, timeout,
)
if err != nil {
errChan <- err

return
}

msgReader := bytes.NewReader(rawMsg)
nextMsg, err := lnwire.ReadMessage(msgReader, 0)
if err != nil {
errChan <- err

return
}

_, ok := nextMsg.(*lnwire.Init)
if !ok {
errChan <- errors.New("expected lnwire.Init " +
"type, got something else")

return
}

// Write the init reply message.
initReplyMsg := lnwire.NewInitMessage(
lnwire.NewRawFeatureVector(
lnwire.DataLossProtectRequired,
lnwire.GossipQueriesOptional,
),
lnwire.NewRawFeatureVector(),
)

var b bytes.Buffer
_, err = lnwire.WriteMessage(&b, initReplyMsg, 0)
if err != nil {
errChan <- err

return
}

ok = fn.SendOrQuit[[]byte, struct{}](
mockConn.readMessages, b.Bytes(), make(chan struct{}),
)
if !ok {
errChan <- errors.New("expected lnwire.Init " +
"type, got something else")

return
}

errChan <- nil
}()

require.NoError(t, peer.Start())

err := <-errChan
require.NoError(t, err)
}

0 comments on commit eaba9c8

Please sign in to comment.