From c9868aae8fad74ca03edb95c27840878ca049e56 Mon Sep 17 00:00:00 2001 From: "Johan T. Halseth" Date: Tue, 25 Sep 2018 09:41:22 +0200 Subject: [PATCH] htlcswitch test: add fwdinglog inspection on triggered FwdEventTicker --- htlcswitch/switch_test.go | 60 +++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 5 deletions(-) diff --git a/htlcswitch/switch_test.go b/htlcswitch/switch_test.go index 6dd8980fee..0e7c37a0a7 100644 --- a/htlcswitch/switch_test.go +++ b/htlcswitch/switch_test.go @@ -15,6 +15,7 @@ import ( "github.com/go-errors/errors" "github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/lnwire" + "github.com/lightningnetwork/lnd/ticker" ) func genPreimage() ([32]byte, error) { @@ -1835,7 +1836,60 @@ func TestMultiHopPaymentForwardingEvents(t *testing.T) { n.carolChannelLink, ) firstHop := n.firstBobChannelLink.ShortChanID() - for i := 0; i < numPayments; i++ { + for i := 0; i < numPayments/2; i++ { + _, err := n.makePayment( + n.aliceServer, n.carolServer, firstHop, hops, finalAmt, + htlcAmt, totalTimelock, + ).Wait(30 * time.Second) + if err != nil { + t.Fatalf("unable to send payment: %v", err) + } + } + + bobLog, ok := n.bobServer.htlcSwitch.cfg.FwdingLog.(*mockForwardingLog) + if !ok { + t.Fatalf("mockForwardingLog assertion failed") + } + + // After sending 5 of the payments, trigger the forwarding ticker, to + // make sure the events are properly flushed. + bobTicker, ok := n.bobServer.htlcSwitch.cfg.FwdEventTicker.(*ticker.Mock) + if !ok { + t.Fatalf("mockTicker assertion failed") + } + + // We'll trigger the ticker, and wait for the events to appear in Bob's + // forwarding log. + timeout := time.After(15 * time.Second) + for { + select { + case bobTicker.Force <- time.Now(): + case <-time.After(1 * time.Second): + t.Fatalf("unable to force tick") + } + + // If all 5 events is found in Bob's log, we can break out and + // continue the test. + bobLog.Lock() + if len(bobLog.events) == 5 { + bobLog.Unlock() + break + } + bobLog.Unlock() + + // Otherwise wait a little bit before checking again. + select { + case <-time.After(50 * time.Millisecond): + case <-timeout: + bobLog.Lock() + defer bobLog.Unlock() + t.Fatalf("expected 5 events in event log, instead "+ + "found: %v", spew.Sdump(bobLog.events)) + } + } + + // Send the remaining payments. + for i := numPayments / 2; i < numPayments; i++ { _, err := n.makePayment( n.aliceServer, n.carolServer, firstHop, hops, finalAmt, htlcAmt, totalTimelock, @@ -1874,10 +1928,6 @@ func TestMultiHopPaymentForwardingEvents(t *testing.T) { } // Bob on the other hand, should have 10 events. - bobLog, ok := n.bobServer.htlcSwitch.cfg.FwdingLog.(*mockForwardingLog) - if !ok { - t.Fatalf("mockForwardingLog assertion failed") - } bobLog.Lock() defer bobLog.Unlock() if len(bobLog.events) != 10 {