Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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') }}
Expand Down Expand Up @@ -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() }}
Expand Down Expand Up @@ -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() }}
Expand Down
55 changes: 45 additions & 10 deletions itest/lnd_psbt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)

// 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)
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,
},
}

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
Expand Down
5 changes: 5 additions & 0 deletions lntest/harness.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion lntest/wait/timeouts_remote_db.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
9 changes: 9 additions & 0 deletions sweep/walletsweep.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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,
Expand All @@ -269,6 +276,8 @@ func CraftSweepAllTx(feeRate, maxFeeRate chainfee.SatPerKWeight,
}
}

log.Trace("[WithCoinSelectLock] exited the lock")

allOutputs = append(allOutputs, utxos...)

return nil
Expand Down