mirror of
https://github.com/lightninglabs/loop.git
synced 2026-08-13 12:33:03 +02:00
Build list and summary responses from tracked deposit records instead of raw wallet UTXOs so RPC clients see the manager availability state. Split unconfirmed value from confirmed deposited value in summaries. Keep withdrawal and channel-open flows on confirmed inputs by rejecting unconfirmed selected deposits in those paths.
86 lines
2 KiB
Go
86 lines
2 KiB
Go
package loopd
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
|
"github.com/btcsuite/btcd/wire"
|
|
"github.com/lightninglabs/loop/staticaddr/deposit"
|
|
)
|
|
|
|
// TestDepositBlocksUntilExpiry checks blocks-until-expiry handling for
|
|
// confirmed and unconfirmed deposits.
|
|
func TestDepositBlocksUntilExpiry(t *testing.T) {
|
|
t.Run("unconfirmed", func(t *testing.T) {
|
|
if blocks := depositBlocksUntilExpiry(0, 144, 500); blocks != 144 {
|
|
t.Fatalf("expected 144 blocks for unconfirmed deposit, got %d",
|
|
blocks)
|
|
}
|
|
})
|
|
|
|
t.Run("confirmed", func(t *testing.T) {
|
|
if blocks := depositBlocksUntilExpiry(450, 144, 500); blocks != 94 {
|
|
t.Fatalf("expected 94 blocks until expiry, got %d",
|
|
blocks)
|
|
}
|
|
})
|
|
}
|
|
|
|
// TestWithdrawAllDepositOutpoints checks `all` withdrawal handling for
|
|
// confirmed and unconfirmed deposits.
|
|
func TestWithdrawAllDepositOutpoints(t *testing.T) {
|
|
t.Run("rejects unconfirmed", func(t *testing.T) {
|
|
deposits := []*deposit.Deposit{
|
|
{
|
|
OutPoint: wire.OutPoint{
|
|
Hash: chainhash.Hash{1},
|
|
Index: 1,
|
|
},
|
|
},
|
|
{
|
|
OutPoint: wire.OutPoint{
|
|
Hash: chainhash.Hash{2},
|
|
Index: 2,
|
|
},
|
|
ConfirmationHeight: 123,
|
|
},
|
|
}
|
|
|
|
_, err := withdrawAllDepositOutpoints(deposits)
|
|
if err == nil {
|
|
t.Fatal("expected unconfirmed deposit to fail all withdrawal")
|
|
}
|
|
})
|
|
|
|
t.Run("returns all confirmed", func(t *testing.T) {
|
|
first := wire.OutPoint{
|
|
Hash: chainhash.Hash{3},
|
|
Index: 3,
|
|
}
|
|
second := wire.OutPoint{
|
|
Hash: chainhash.Hash{4},
|
|
Index: 4,
|
|
}
|
|
deposits := []*deposit.Deposit{
|
|
{
|
|
OutPoint: first,
|
|
ConfirmationHeight: 123,
|
|
},
|
|
{
|
|
OutPoint: second,
|
|
ConfirmationHeight: 124,
|
|
},
|
|
}
|
|
|
|
outpoints, err := withdrawAllDepositOutpoints(deposits)
|
|
if err != nil {
|
|
t.Fatalf("expected confirmed deposits to succeed: %v", err)
|
|
}
|
|
if len(outpoints) != 2 {
|
|
t.Fatalf("expected 2 outpoints, got %d", len(outpoints))
|
|
}
|
|
if outpoints[0] != first || outpoints[1] != second {
|
|
t.Fatal("expected all confirmed outpoints to remain selected")
|
|
}
|
|
})
|
|
}
|