diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c025f0d2d..35ac97c0a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,6 +22,8 @@ defaults: env: BITCOIN_VERSION: "27" + + TRANCHES: 16 # If you change this value, please change it in the following files as well: # /.travis.yml @@ -275,7 +277,7 @@ jobs: run: ./scripts/install_bitcoind.sh $BITCOIN_VERSION - name: run ${{ matrix.name }} - run: make itest-parallel ${{ matrix.args }} + run: make itest-parallel tranches=${{ env.TRANCHES }} ${{ matrix.args }} - name: Send coverage if: ${{ contains(matrix.args, 'cover=1') }} @@ -317,7 +319,7 @@ jobs: key-prefix: integration-test - name: run itest - run: make itest-parallel windows=1 + run: make itest-parallel tranches=${{ env.TRANCHES }} windows=1 - name: kill any remaining lnd processes if: ${{ failure() }} @@ -361,7 +363,7 @@ jobs: mv bitcoin-${BITCOIN_VERSION}.0 /tmp/bitcoin - name: run itest - run: PATH=$PATH:/tmp/bitcoin/bin make itest-parallel backend=bitcoind + run: PATH=$PATH:/tmp/bitcoin/bin make itest-parallel tranches=${{ env.TRANCHES }} backend=bitcoind - name: Zip log files on failure if: ${{ failure() }} diff --git a/itest/lnd_psbt_test.go b/itest/lnd_psbt_test.go index cd93fa0c0..2d4118599 100644 --- a/itest/lnd_psbt_test.go +++ b/itest/lnd_psbt_test.go @@ -649,16 +649,51 @@ func runPsbtChanFundingSingleStep(ht *lntest.HarnessTest, carol, // testSignPsbt tests that the SignPsbt RPC works correctly. func testSignPsbt(ht *lntest.HarnessTest) { - runSignPsbtSegWitV0P2WKH(ht, ht.Alice) - runSignPsbtSegWitV0NP2WKH(ht, ht.Alice) - runSignPsbtSegWitV1KeySpendBip86(ht, ht.Alice) - runSignPsbtSegWitV1KeySpendRootHash(ht, ht.Alice) - runSignPsbtSegWitV1ScriptSpend(ht, ht.Alice) + psbtTestRunners := []struct { + name string + runner func(*lntest.HarnessTest, *node.HarnessNode) + }{ + { + name: "sign psbt segwit v0 P2WPKH", + runner: runSignPsbtSegWitV0P2WKH, + }, + { + name: "sign psbt segwit v0 P2WSH", + runner: runSignPsbtSegWitV0NP2WKH, + }, + { + name: "sign psbt segwit v1 key spend bip86", + runner: runSignPsbtSegWitV1KeySpendBip86, + }, + { + name: "sign psbt segwit v1 key spend root hash", + runner: runSignPsbtSegWitV1KeySpendRootHash, + }, + { + name: "sign psbt segwit v1 script spend", + runner: runSignPsbtSegWitV1ScriptSpend, + }, + { + // The above tests all make sure we can sign for keys + // that aren't in the wallet. But we also want to make + // sure we can fund and then sign PSBTs from our + // wallet. + name: "fund and sign psbt", + runner: runFundAndSignPsbt, + }, + } - // The above tests all make sure we can sign for keys that aren't in - // the wallet. But we also want to make sure we can fund and then sign - // PSBTs from our wallet. - runFundAndSignPsbt(ht, ht.Alice) + for _, tc := range psbtTestRunners { + succeed := ht.Run(tc.name, func(t *testing.T) { + st := ht.Subtest(t) + tc.runner(st, st.Alice) + }) + + // Abort the test if failed. + if !succeed { + return + } + } } // runSignPsbtSegWitV0P2WKH tests that the SignPsbt RPC works correctly for a diff --git a/lntest/harness.go b/lntest/harness.go index ba61b0ac3..4c26e1aa7 100644 --- a/lntest/harness.go +++ b/lntest/harness.go @@ -1778,6 +1778,11 @@ func (h *HarnessTest) MineBlocksAndAssertNumTxes(num uint32, h.Miner.AssertTxInBlock(blocks[0], txid) } + // Make sure the mempool has been updated. + for _, txid := range txids { + h.Miner.AssertTxNotInMempool(*txid) + } + // Finally, make sure all the active nodes are synced. bestBlock := blocks[len(blocks)-1] h.AssertActiveNodesSyncedTo(bestBlock) diff --git a/lntest/wait/timeouts_remote_db.go b/lntest/wait/timeouts_remote_db.go index bc6784ff0..470cc3aa8 100644 --- a/lntest/wait/timeouts_remote_db.go +++ b/lntest/wait/timeouts_remote_db.go @@ -20,7 +20,7 @@ const ( // DefaultTimeout is a timeout that will be used for various wait // scenarios where no custom timeout value is defined. - DefaultTimeout = time.Second * 45 + DefaultTimeout = time.Second * 60 // AsyncBenchmarkTimeout is the timeout used when running the async // payments benchmark. diff --git a/sweep/walletsweep.go b/sweep/walletsweep.go index 8eb3764a1..733855068 100644 --- a/sweep/walletsweep.go +++ b/sweep/walletsweep.go @@ -246,6 +246,8 @@ func CraftSweepAllTx(feeRate, maxFeeRate chainfee.SatPerKWeight, // knows of. Otherwise, it may be possible for a new funding flow to // lock an output while we fetch the set of unspent witnesses. err := coinSelectLocker.WithCoinSelectLock(func() error { + log.Trace("[WithCoinSelectLock] entered the lock") + // Now that we can be sure that no other coin selection // operations are going on, we can grab a clean snapshot of the // current UTXO state of the wallet. @@ -256,10 +258,15 @@ func CraftSweepAllTx(feeRate, maxFeeRate chainfee.SatPerKWeight, return err } + log.Trace("[WithCoinSelectLock] finished fetching UTXOs") + // We'll now lock each UTXO to ensure that other callers don't // attempt to use these UTXOs in transactions while we're // crafting out sweep all transaction. for _, utxo := range utxos { + log.Tracef("[WithCoinSelectLock] leasing utxo: %v", + utxo.OutPoint) + _, _, _, err = outputLeaser.LeaseOutput( chanfunding.LndInternalLockID, utxo.OutPoint, chanfunding.DefaultLockDuration, @@ -269,6 +276,8 @@ func CraftSweepAllTx(feeRate, maxFeeRate chainfee.SatPerKWeight, } } + log.Trace("[WithCoinSelectLock] exited the lock") + allOutputs = append(allOutputs, utxos...) return nil