mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-07-28 13:52:55 +02:00
lntest: make sure error from shutdown is caught
This commit is contained in:
@@ -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.
|
||||||
|
Reference in New Issue
Block a user