From a215c55186f625370e735882ef605467c508f3aa Mon Sep 17 00:00:00 2001 From: yyforyongyu Date: Sat, 21 Nov 2020 19:52:02 +0800 Subject: [PATCH 1/2] itest: add logging for subtests --- lntest/itest/assertions.go | 16 ++++++++++++++++ lntest/itest/lnd_funding_test.go | 6 ++++++ lntest/itest/lnd_multi-hop_test.go | 7 +++++++ lntest/itest/lnd_test.go | 12 +++++++----- 4 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 lntest/itest/assertions.go diff --git a/lntest/itest/assertions.go b/lntest/itest/assertions.go new file mode 100644 index 000000000..84fc7949a --- /dev/null +++ b/lntest/itest/assertions.go @@ -0,0 +1,16 @@ +package itest + +import ( + "testing" + + "github.com/lightningnetwork/lnd/lntest" + "github.com/stretchr/testify/require" +) + +// AddToNodeLog adds a line to the log file and asserts there's no error. +func AddToNodeLog(t *testing.T, + node *lntest.HarnessNode, logLine string) { + + err := node.AddToLog(logLine) + require.NoError(t, err, "unable to add to log") +} diff --git a/lntest/itest/lnd_funding_test.go b/lntest/itest/lnd_funding_test.go index 6d2d791f6..b957205f7 100644 --- a/lntest/itest/lnd_funding_test.go +++ b/lntest/itest/lnd_funding_test.go @@ -137,6 +137,12 @@ test: "carol_commit=%v,dave_commit=%v", cc, dc, ) + logLine := fmt.Sprintf( + "---- basic channel funding subtest %s ----\n", + testName, + ) + AddToNodeLog(t.t, net.Alice, logLine) + success := t.t.Run(testName, func(t *testing.T) { testFunding(cc, dc) }) diff --git a/lntest/itest/lnd_multi-hop_test.go b/lntest/itest/lnd_multi-hop_test.go index 9a4819db0..7eee2c52e 100644 --- a/lntest/itest/lnd_multi-hop_test.go +++ b/lntest/itest/lnd_multi-hop_test.go @@ -102,6 +102,13 @@ func testMultiHopHtlcClaims(net *lntest.NetworkHarness, t *harnessTest) { for _, subTest := range subTests { subTest := subTest + logLine := fmt.Sprintf( + "---- multi-hop htlc subtest "+ + "%s/%s ----\n", + testName, subTest.name, + ) + AddToNodeLog(t, net.Alice, logLine) + success := ht.t.Run(subTest.name, func(t *testing.T) { ht := newHarnessTest(t, net) diff --git a/lntest/itest/lnd_test.go b/lntest/itest/lnd_test.go index d4b04a0fc..687827e3f 100644 --- a/lntest/itest/lnd_test.go +++ b/lntest/itest/lnd_test.go @@ -3153,6 +3153,11 @@ func testChannelForceClosure(net *lntest.NetworkHarness, t *harnessTest) { for _, channelType := range commitTypes { testName := fmt.Sprintf("committype=%v", channelType) + logLine := fmt.Sprintf( + "---- channel force close subtest %s ----\n", + testName, + ) + AddToNodeLog(t.t, net.Alice, logLine) channelType := channelType success := t.t.Run(testName, func(t *testing.T) { @@ -14476,11 +14481,8 @@ func TestLightningNetworkDaemon(t *testing.T) { testCase.name, ) - err = lndHarness.Alice.AddToLog(logLine) - require.NoError(t1, err, "unable to add to log") - - err = lndHarness.Bob.AddToLog(logLine) - require.NoError(t1, err, "unable to add to log") + AddToNodeLog(t, lndHarness.Alice, logLine) + AddToNodeLog(t, lndHarness.Bob, logLine) // Start every test with the default static fee estimate. lndHarness.SetFeeEstimate(12500) From 96c3a64316fa18c69c0970f73ad99991a62b3cb0 Mon Sep 17 00:00:00 2001 From: yyforyongyu Date: Sat, 21 Nov 2020 19:52:50 +0800 Subject: [PATCH 2/2] lntest: refactor WaitForBlockchainSync --- lntest/node.go | 61 +++++++++++++++++--------------------------------- 1 file changed, 21 insertions(+), 40 deletions(-) diff --git a/lntest/node.go b/lntest/node.go index 1024406ab..be6ea23e9 100644 --- a/lntest/node.go +++ b/lntest/node.go @@ -1304,50 +1304,31 @@ func (hn *HarnessNode) WaitForNetworkChannelClose(ctx context.Context, } } -// WaitForBlockchainSync will block until the target nodes has fully -// synchronized with the blockchain. If the passed context object has a set -// timeout, then the goroutine will continually poll until the timeout has -// elapsed. In the case that the chain isn't synced before the timeout is up, -// then this function will return an error. +// WaitForBlockchainSync waits for the target node to be fully synchronized with +// the blockchain. If the passed context object has a set timeout, it will +// continually poll until the timeout has elapsed. In the case that the chain +// isn't synced before the timeout is up, this function will return an error. func (hn *HarnessNode) WaitForBlockchainSync(ctx context.Context) error { - errChan := make(chan error, 1) - retryDelay := time.Millisecond * 100 + ticker := time.NewTicker(time.Millisecond * 100) + defer ticker.Stop() - go func() { - for { - select { - case <-ctx.Done(): - case <-hn.quit: - return - default: - } - - getInfoReq := &lnrpc.GetInfoRequest{} - getInfoResp, err := hn.GetInfo(ctx, getInfoReq) - if err != nil { - errChan <- err - return - } - if getInfoResp.SyncedToChain { - errChan <- nil - return - } - - select { - case <-ctx.Done(): - return - case <-time.After(retryDelay): - } + for { + resp, err := hn.GetInfo(ctx, &lnrpc.GetInfoRequest{}) + if err != nil { + return err + } + if resp.SyncedToChain { + return nil } - }() - select { - case <-hn.quit: - return nil - case err := <-errChan: - return err - case <-ctx.Done(): - return fmt.Errorf("timeout while waiting for blockchain sync") + select { + case <-ctx.Done(): + return fmt.Errorf("timeout while waiting for " + + "blockchain sync") + case <-hn.quit: + return nil + case <-ticker.C: + } } }