lntest: make sure error from shutdown is caught

This commit is contained in:
yyforyongyu
2023-04-19 17:24:25 +08:00
parent 4243c5b95f
commit 24c028ff52

View File

@@ -6,6 +6,7 @@ import (
"crypto/rand" "crypto/rand"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io" "io"
"io/ioutil" "io/ioutil"
@@ -627,10 +628,12 @@ func (hn *HarnessNode) cleanup() error {
// waitForProcessExit Launch a new goroutine which that bubbles up any // waitForProcessExit Launch a new goroutine which that bubbles up any
// potential fatal process errors to the goroutine running the tests. // potential fatal process errors to the goroutine running the tests.
func (hn *HarnessNode) waitForProcessExit() { func (hn *HarnessNode) waitForProcessExit() error {
var err error
errChan := make(chan error, 1) errChan := make(chan error, 1)
go func() { go func() {
err := hn.cmd.Wait() err = hn.cmd.Wait()
errChan <- err errChan <- err
}() }()
@@ -643,7 +646,7 @@ func (hn *HarnessNode) waitForProcessExit() {
// If the process has already been canceled, we can exit early // If the process has already been canceled, we can exit early
// as the logs have already been saved. // as the logs have already been saved.
if strings.Contains(err.Error(), "Wait was already called") { if strings.Contains(err.Error(), "Wait was already called") {
return return nil
} }
// Otherwise, we print the error, break the select and save // Otherwise, we print the error, break the select and save
@@ -653,7 +656,8 @@ func (hn *HarnessNode) waitForProcessExit() {
break break
case <-time.After(wait.DefaultTimeout): case <-time.After(wait.DefaultTimeout):
hn.printErrf("timeout waiting for process to exit") err = errors.New("timeout waiting for process to exit")
hn.printErrf(err.Error())
} }
// Make sure log file is closed and renamed if necessary. // Make sure log file is closed and renamed if necessary.
@@ -662,6 +666,8 @@ func (hn *HarnessNode) waitForProcessExit() {
// Rename the etcd.log file if the node was running on embedded // Rename the etcd.log file if the node was running on embedded
// etcd. // etcd.
finalizeEtcdLog(hn) finalizeEtcdLog(hn)
return err
} }
// Stop attempts to stop the active lnd process. // Stop attempts to stop the active lnd process.
@@ -675,9 +681,6 @@ func (hn *HarnessNode) Stop() error {
// Stop the runCtx. // Stop the runCtx.
hn.cancel() hn.cancel()
// Wait for lnd process to exit in the end.
defer hn.waitForProcessExit()
// If we ever reaches the state where `Watcher` is initialized, it // If we ever reaches the state where `Watcher` is initialized, it
// means the node has an authed connection and all its RPC clients are // means the node has an authed connection and all its RPC clients are
// ready for use. Thus we will try to stop it via the RPC. // ready for use. Thus we will try to stop it via the RPC.
@@ -740,7 +743,8 @@ func (hn *HarnessNode) Stop() error {
} }
} }
return nil // Wait for lnd process to exit in the end.
return hn.waitForProcessExit()
} }
// CloseConn closes the grpc connection. // CloseConn closes the grpc connection.