discovery: update tests to reflect new broadcast related changes

This commit is contained in:
Olaoluwa Osuntokun 2017-12-26 16:29:26 +01:00
parent 38715ca768
commit 6b0f984e31
No known key found for this signature in database
GPG Key ID: 964EA263DD637C21

@ -380,10 +380,9 @@ func createUpdateAnnouncement(blockHeight uint32, flags lnwire.ChanUpdateFlag,
return a, nil return a, nil
} }
func createRemoteChannelAnnouncement(blockHeight uint32) (*lnwire.ChannelAnnouncement, func createRemoteChannelAnnouncement(blockHeight uint32) (*lnwire.ChannelAnnouncement, error) {
error) {
var err error
var err error
a := &lnwire.ChannelAnnouncement{ a := &lnwire.ChannelAnnouncement{
ShortChannelID: lnwire.ShortChannelID{ ShortChannelID: lnwire.ShortChannelID{
BlockHeight: blockHeight, BlockHeight: blockHeight,
@ -428,7 +427,7 @@ type testCtx struct {
gossiper *AuthenticatedGossiper gossiper *AuthenticatedGossiper
router *mockGraphSource router *mockGraphSource
notifier *mockNotifier notifier *mockNotifier
broadcastedMessage chan lnwire.Message broadcastedMessage chan msgWithSenders
} }
func createTestCtx(startHeight uint32) (*testCtx, func(), error) { func createTestCtx(startHeight uint32) (*testCtx, func(), error) {
@ -444,13 +443,19 @@ func createTestCtx(startHeight uint32) (*testCtx, func(), error) {
return nil, nil, err return nil, nil, err
} }
broadcastedMessage := make(chan lnwire.Message, 10) broadcastedMessage := make(chan msgWithSenders, 10)
gossiper, err := New(Config{ gossiper, err := New(Config{
Notifier: notifier, Notifier: notifier,
Broadcast: func(_ *btcec.PublicKey, msgs ...lnwire.Message) error { Broadcast: func(senders map[routing.Vertex]struct{},
msgs ...lnwire.Message) error {
for _, msg := range msgs { for _, msg := range msgs {
broadcastedMessage <- msg broadcastedMessage <- msgWithSenders{
msg: msg,
senders: senders,
}
} }
return nil return nil
}, },
SendToPeer: func(target *btcec.PublicKey, msg ...lnwire.Message) error { SendToPeer: func(target *btcec.PublicKey, msg ...lnwire.Message) error {
@ -495,6 +500,13 @@ func TestProcessAnnouncement(t *testing.T) {
} }
defer cleanup() defer cleanup()
assertSenderExistence := func(sender *btcec.PublicKey, msg msgWithSenders) {
if _, ok := msg.senders[routing.NewVertex(sender)]; !ok {
t.Fatalf("sender=%x not present in %v",
sender.SerializeCompressed(), spew.Sdump(msg))
}
}
// Create node valid, signed announcement, process it with with // Create node valid, signed announcement, process it with with
// gossiper service, check that valid announcement have been // gossiper service, check that valid announcement have been
// propagated farther into the lightning network, and check that we // propagated farther into the lightning network, and check that we
@ -514,7 +526,8 @@ func TestProcessAnnouncement(t *testing.T) {
} }
select { select {
case <-ctx.broadcastedMessage: case msg := <-ctx.broadcastedMessage:
assertSenderExistence(na.NodeID, msg)
case <-time.After(2 * trickleDelay): case <-time.After(2 * trickleDelay):
t.Fatal("announcememt wasn't proceeded") t.Fatal("announcememt wasn't proceeded")
} }
@ -541,7 +554,8 @@ func TestProcessAnnouncement(t *testing.T) {
} }
select { select {
case <-ctx.broadcastedMessage: case msg := <-ctx.broadcastedMessage:
assertSenderExistence(na.NodeID, msg)
case <-time.After(2 * trickleDelay): case <-time.After(2 * trickleDelay):
t.Fatal("announcememt wasn't proceeded") t.Fatal("announcememt wasn't proceeded")
} }
@ -568,7 +582,8 @@ func TestProcessAnnouncement(t *testing.T) {
} }
select { select {
case <-ctx.broadcastedMessage: case msg := <-ctx.broadcastedMessage:
assertSenderExistence(na.NodeID, msg)
case <-time.After(2 * trickleDelay): case <-time.After(2 * trickleDelay):
t.Fatal("announcememt wasn't proceeded") t.Fatal("announcememt wasn't proceeded")
} }
@ -1574,7 +1589,7 @@ func TestDeDuplicatedAnnouncements(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("can't create remote channel announcement: %v", err) t.Fatalf("can't create remote channel announcement: %v", err)
} }
announcements.AddMsgs(ca) announcements.AddMsgs(networkMsg{msg: ca, peer: bitcoinKeyPub2})
if len(announcements.channelAnnouncements) != 1 { if len(announcements.channelAnnouncements) != 1 {
t.Fatal("new channel announcement not stored in batch") t.Fatal("new channel announcement not stored in batch")
} }
@ -1587,7 +1602,7 @@ func TestDeDuplicatedAnnouncements(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("can't create remote channel announcement: %v", err) t.Fatalf("can't create remote channel announcement: %v", err)
} }
announcements.AddMsgs(ca2) announcements.AddMsgs(networkMsg{msg: ca2, peer: bitcoinKeyPub2})
if len(announcements.channelAnnouncements) != 1 { if len(announcements.channelAnnouncements) != 1 {
t.Fatal("channel announcement not replaced in batch") t.Fatal("channel announcement not replaced in batch")
} }
@ -1599,7 +1614,7 @@ func TestDeDuplicatedAnnouncements(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("can't create update announcement: %v", err) t.Fatalf("can't create update announcement: %v", err)
} }
announcements.AddMsgs(ua) announcements.AddMsgs(networkMsg{msg: ua, peer: bitcoinKeyPub2})
if len(announcements.channelUpdates) != 1 { if len(announcements.channelUpdates) != 1 {
t.Fatal("new channel update not stored in batch") t.Fatal("new channel update not stored in batch")
} }
@ -1610,7 +1625,7 @@ func TestDeDuplicatedAnnouncements(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("can't create update announcement: %v", err) t.Fatalf("can't create update announcement: %v", err)
} }
announcements.AddMsgs(ua2) announcements.AddMsgs(networkMsg{msg: ua2, peer: bitcoinKeyPub2})
if len(announcements.channelUpdates) != 1 { if len(announcements.channelUpdates) != 1 {
t.Fatal("channel update not replaced in batch") t.Fatal("channel update not replaced in batch")
} }
@ -1621,7 +1636,7 @@ func TestDeDuplicatedAnnouncements(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("can't create node announcement: %v", err) t.Fatalf("can't create node announcement: %v", err)
} }
announcements.AddMsgs(na) announcements.AddMsgs(networkMsg{msg: na, peer: bitcoinKeyPub2})
if len(announcements.nodeAnnouncements) != 1 { if len(announcements.nodeAnnouncements) != 1 {
t.Fatal("new node announcement not stored in batch") t.Fatal("new node announcement not stored in batch")
} }
@ -1631,7 +1646,7 @@ func TestDeDuplicatedAnnouncements(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("can't create node announcement: %v", err) t.Fatalf("can't create node announcement: %v", err)
} }
announcements.AddMsgs(na2) announcements.AddMsgs(networkMsg{msg: na2, peer: bitcoinKeyPub2})
if len(announcements.nodeAnnouncements) != 2 { if len(announcements.nodeAnnouncements) != 2 {
t.Fatal("second node announcement not stored in batch") t.Fatal("second node announcement not stored in batch")
} }
@ -1642,7 +1657,7 @@ func TestDeDuplicatedAnnouncements(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("can't create node announcement: %v", err) t.Fatalf("can't create node announcement: %v", err)
} }
announcements.AddMsgs(na3) announcements.AddMsgs(networkMsg{msg: na3, peer: bitcoinKeyPub2})
if len(announcements.nodeAnnouncements) != 2 { if len(announcements.nodeAnnouncements) != 2 {
t.Fatal("second node announcement not replaced in batch") t.Fatal("second node announcement not replaced in batch")
} }
@ -1654,7 +1669,7 @@ func TestDeDuplicatedAnnouncements(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("can't create node announcement: %v", err) t.Fatalf("can't create node announcement: %v", err)
} }
announcements.AddMsgs(na4) announcements.AddMsgs(networkMsg{msg: na4, peer: bitcoinKeyPub2})
if len(announcements.nodeAnnouncements) != 2 { if len(announcements.nodeAnnouncements) != 2 {
t.Fatal("second node announcement not replaced again in batch") t.Fatal("second node announcement not replaced again in batch")
} }
@ -1666,27 +1681,27 @@ func TestDeDuplicatedAnnouncements(t *testing.T) {
t.Fatal("announcement batch incorrect length") t.Fatal("announcement batch incorrect length")
} }
if !reflect.DeepEqual(batch[0], ca2) { if !reflect.DeepEqual(batch[0].msg, ca2) {
t.Fatal("channel announcement not first in batch: got %v, "+ t.Fatalf("channel announcement not first in batch: got %v, "+
"expected %v", spew.Sdump(batch[0]), spew.Sdump(ca2)) "expected %v", spew.Sdump(batch[0].msg), spew.Sdump(ca2))
} }
if !reflect.DeepEqual(batch[1], ua2) { if !reflect.DeepEqual(batch[1].msg, ua2) {
t.Fatal("channel update not next in batch: got %v, "+ t.Fatalf("channel update not next in batch: got %v, "+
"expected %v", spew.Sdump(batch[1]), spew.Sdump(ua2)) "expected %v", spew.Sdump(batch[1].msg), spew.Sdump(ua2))
} }
// We'll ensure that both node announcements are present. We check both // We'll ensure that both node announcements are present. We check both
// indexes as due to the randomized order of map iteration they may be // indexes as due to the randomized order of map iteration they may be
// in either place. // in either place.
if !reflect.DeepEqual(batch[2], na) && !reflect.DeepEqual(batch[3], na) { if !reflect.DeepEqual(batch[2].msg, na) && !reflect.DeepEqual(batch[3].msg, na) {
t.Fatal("first node announcement not in last part of batch: "+ t.Fatal("first node announcement not in last part of batch: "+
"got %v, expected %v", batch[2], "got %v, expected %v", batch[2].msg,
na) na)
} }
if !reflect.DeepEqual(batch[2], na4) && !reflect.DeepEqual(batch[3], na4) { if !reflect.DeepEqual(batch[2].msg, na4) && !reflect.DeepEqual(batch[3].msg, na4) {
t.Fatalf("second node announcement not in last part of batch: "+ t.Fatalf("second node announcement not in last part of batch: "+
"got %v, expected %v", batch[3], "got %v, expected %v", batch[3].msg,
na2) na2)
} }