Skip to content

Commit

Permalink
Merge pull request lightningnetwork#5833 from guggero/itest-github-fixes
Browse files Browse the repository at this point in the history
itest: fix log file upload and flakes
  • Loading branch information
Roasbeef authored Oct 7, 2021
2 parents ca4b818 + 0d2ea30 commit 3efe94b
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 10 deletions.
6 changes: 4 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -286,8 +286,9 @@ jobs:

- name: Upload Artifact
uses: actions/upload-artifact@v2
if: ${{ failure() }}
with:
name: logs
name: logs-itest-${{ job.id }}
path: lntest/itest/**/*.log
retention-days: 5

Expand Down Expand Up @@ -325,8 +326,9 @@ jobs:

- name: Upload Artifact
uses: actions/upload-artifact@v2
if: ${{ failure() }}
with:
name: logs
name: logs-itest-windows
path: lntest/itest/**/*.log
retention-days: 5

Expand Down
3 changes: 3 additions & 0 deletions docs/release-notes/release-notes-0.14.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,9 @@ you.

* [Replace reference to protobuf library with OSV](https://github.com/lightningnetwork/lnd/pull/5759)

* [Only upload itest logs on failure, fix more
flakes](https://github.com/lightningnetwork/lnd/pull/5833).

## Database

* [Ensure single writer for legacy
Expand Down
28 changes: 22 additions & 6 deletions lntest/itest/lnd_rest_api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -451,11 +451,15 @@ func wsTestCaseBiDirectionalSubscription(ht *harnessTest,

// We want to read messages over and over again. We just accept any
// channels that are opened.
defer close(done)
go func() {
for {
_, msg, err := conn.ReadMessage()
if err != nil {
errChan <- err
select {
case errChan <- err:
case <-done:
}
return
}

Expand All @@ -464,7 +468,11 @@ func wsTestCaseBiDirectionalSubscription(ht *harnessTest,
// get rid of here.
msgStr := string(msg)
if !strings.Contains(msgStr, "\"result\":") {
errChan <- fmt.Errorf("invalid msg: %s", msgStr)
select {
case errChan <- fmt.Errorf("invalid msg: %s",
msgStr):
case <-done:
}
return
}
msgStr = resultPattern.ReplaceAllString(msgStr, "${1}")
Expand All @@ -474,7 +482,10 @@ func wsTestCaseBiDirectionalSubscription(ht *harnessTest,
protoMsg := &lnrpc.ChannelAcceptRequest{}
err = jsonpb.UnmarshalString(msgStr, protoMsg)
if err != nil {
errChan <- err
select {
case errChan <- err:
case <-done:
}
return
}

Expand All @@ -485,14 +496,20 @@ func wsTestCaseBiDirectionalSubscription(ht *harnessTest,
}
resMsg, err := jsonMarshaler.MarshalToString(res)
if err != nil {
errChan <- err
select {
case errChan <- err:
case <-done:
}
return
}
err = conn.WriteMessage(
websocket.TextMessage, []byte(resMsg),
)
if err != nil {
errChan <- err
select {
case errChan <- err:
case <-done:
}
return
}

Expand Down Expand Up @@ -531,7 +548,6 @@ func wsTestCaseBiDirectionalSubscription(ht *harnessTest,
ht.t.Fatalf("Timeout before message was received")
}
}
close(done)
}

func wsTestPingPongTimeout(ht *harnessTest, net *lntest.NetworkHarness) {
Expand Down
4 changes: 3 additions & 1 deletion lntest/itest/lnd_rpc_middleware_interceptor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,9 @@ func middlewareMandatoryTest(t *testing.T, node *lntest.HarnessNode,
// test case. So we need to do the wait and client setup manually here.
conn, err := node.ConnectRPC(true)
require.NoError(t, err)
err = node.WaitUntilStarted(conn, defaultTimeout)
err = node.WaitUntilStateReached(
conn, defaultTimeout, lnrpc.WalletState_RPC_ACTIVE,
)
require.NoError(t, err)
node.LightningClient = lnrpc.NewLightningClient(conn)

Expand Down
23 changes: 22 additions & 1 deletion lntest/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -887,6 +887,27 @@ func (hn *HarnessNode) start(lndBinary string, lndError chan<- error,
func (hn *HarnessNode) WaitUntilStarted(conn grpc.ClientConnInterface,
timeout time.Duration) error {

return hn.waitForState(conn, timeout, func(s lnrpc.WalletState) bool {
return s != lnrpc.WalletState_WAITING_TO_START
})
}

// WaitUntilStateReached waits until the given wallet state (or one of the
// states following it) has been reached.
func (hn *HarnessNode) WaitUntilStateReached(conn grpc.ClientConnInterface,
timeout time.Duration, desiredState lnrpc.WalletState) error {

return hn.waitForState(conn, timeout, func(s lnrpc.WalletState) bool {
return s >= desiredState
})
}

// waitForState waits until the current node state fulfills the given
// predicate.
func (hn *HarnessNode) waitForState(conn grpc.ClientConnInterface,
timeout time.Duration,
predicate func(state lnrpc.WalletState) bool) error {

stateClient := lnrpc.NewStateClient(conn)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
Expand All @@ -908,7 +929,7 @@ func (hn *HarnessNode) WaitUntilStarted(conn grpc.ClientConnInterface,
return
}

if resp.State != lnrpc.WalletState_WAITING_TO_START {
if predicate(resp.State) {
close(started)
return
}
Expand Down

0 comments on commit 3efe94b

Please sign in to comment.