itest: wrap assertTxLabel inside wait

This commit is contained in:
yyforyongyu
2022-11-10 14:47:48 +08:00
parent bbe69f1bd3
commit d39303f246
2 changed files with 32 additions and 7 deletions

View File

@@ -1262,23 +1262,45 @@ func testSweepAllCoins(ht *lntemp.HarnessTest) {
// assertTxLabel is a helper function which finds a target tx in our // assertTxLabel is a helper function which finds a target tx in our
// set of transactions and checks that it has the desired label. // set of transactions and checks that it has the desired label.
assertTxLabel := func(targetTx, label string) { assertTxLabel := func(targetTx, label string) error {
// List all transactions relevant to our wallet, and find the // List all transactions relevant to our wallet, and find the
// tx so that we can check the correct label has been set. // tx so that we can check the correct label has been set.
txResp := ainz.RPC.GetTransactions() txResp := ainz.RPC.GetTransactions()
// Find our transaction in the set of transactions returned and var target *lnrpc.Transaction
// check its label.
// First we need to find the target tx.
for _, txn := range txResp.Transactions { for _, txn := range txResp.Transactions {
if txn.TxHash == targetTx { if txn.TxHash == targetTx {
require.Equal(ht, label, txn.Label, target = txn
"labels not match")
} }
} }
// If we cannot find it, return an error.
if target == nil {
return fmt.Errorf("target tx %v not found", targetTx)
}
// Otherwise, check the labels are matched.
if target.Label == label {
return nil
}
return fmt.Errorf("labels not match, want: "+
"%v, got %v", label, target.Label)
}
// waitTxLabel waits until the desired tx label is found or timeout.
waitTxLabel := func(targetTx, label string) {
err := wait.NoError(func() error {
return assertTxLabel(targetTx, label)
}, defaultTimeout)
require.NoError(ht, err, "timeout assertTxLabel")
} }
sweepTxStr := sweepTx.TxHash().String() sweepTxStr := sweepTx.TxHash().String()
assertTxLabel(sweepTxStr, sendCoinsLabel) waitTxLabel(sweepTxStr, sendCoinsLabel)
// While we are looking at labels, we test our label transaction // While we are looking at labels, we test our label transaction
// command to make sure it is behaving as expected. First, we try to // command to make sure it is behaving as expected. First, we try to
@@ -1322,7 +1344,7 @@ func testSweepAllCoins(ht *lntemp.HarnessTest) {
} }
ainz.RPC.LabelTransaction(req) ainz.RPC.LabelTransaction(req)
assertTxLabel(sweepTxStr, newLabel) waitTxLabel(sweepTxStr, newLabel)
// Finally, Ainz should now have no coins at all within his wallet. // Finally, Ainz should now have no coins at all within his wallet.
resp := ainz.RPC.WalletBalance() resp := ainz.RPC.WalletBalance()

View File

@@ -13,6 +13,9 @@ const PollInterval = 200 * time.Millisecond
// timing doesn't always line up well when running integration tests with // timing doesn't always line up well when running integration tests with
// several running lnd nodes. This function gives callers a way to assert that // several running lnd nodes. This function gives callers a way to assert that
// some property is upheld within a particular time frame. // some property is upheld within a particular time frame.
//
// TODO(yy): build a counter here so we know how many times we've tried the
// `pred`.
func Predicate(pred func() bool, timeout time.Duration) error { func Predicate(pred func() bool, timeout time.Duration) error {
exitTimer := time.After(timeout) exitTimer := time.After(timeout)
result := make(chan bool, 1) result := make(chan bool, 1)