lntest: add SendCoinsUnconfimed method

In this commit, we add a new method to the network harness that allows
us to send funds to another party without confirming the transaction.
This will be useful for testing funding channels with outputs that have
not been confirmed yet.
This commit is contained in:
Wilmer Paulino 2018-08-09 21:16:20 -07:00
parent 0a335bbea2
commit 130124bb79
No known key found for this signature in database
GPG Key ID: 6DF57B9F9514972F

@ -1104,12 +1104,26 @@ func (n *NetworkHarness) DumpLogs(node *HarnessNode) (string, error) {
} }
// SendCoins attempts to send amt satoshis from the internal mining node to the // SendCoins attempts to send amt satoshis from the internal mining node to the
// targeted lightning node using a P2WKH address. // targeted lightning node using a P2WKH address. 6 blocks are mined after in
// order to confirm the transaction.
func (n *NetworkHarness) SendCoins(ctx context.Context, amt btcutil.Amount, func (n *NetworkHarness) SendCoins(ctx context.Context, amt btcutil.Amount,
target *HarnessNode) error { target *HarnessNode) error {
return n.sendCoins( return n.sendCoins(
ctx, amt, target, lnrpc.NewAddressRequest_WITNESS_PUBKEY_HASH, ctx, amt, target, lnrpc.NewAddressRequest_WITNESS_PUBKEY_HASH,
true,
)
}
// SendCoinsUnconfirmed sends coins from the internal mining node to the target
// lightning node using a P2WPKH address. No blocks are mined after, so the
// transaction remains unconfirmed.
func (n *NetworkHarness) SendCoinsUnconfirmed(ctx context.Context,
amt btcutil.Amount, target *HarnessNode) error {
return n.sendCoins(
ctx, amt, target, lnrpc.NewAddressRequest_WITNESS_PUBKEY_HASH,
false,
) )
} }
@ -1120,14 +1134,16 @@ func (n *NetworkHarness) SendCoinsNP2WKH(ctx context.Context,
return n.sendCoins( return n.sendCoins(
ctx, amt, target, lnrpc.NewAddressRequest_NESTED_PUBKEY_HASH, ctx, amt, target, lnrpc.NewAddressRequest_NESTED_PUBKEY_HASH,
true,
) )
} }
// sendCoins attempts to send amt satoshis from the internal mining node to the // sendCoins attempts to send amt satoshis from the internal mining node to the
// targeted lightning node. // targeted lightning node. The confirmed boolean indicates whether the
// transaction that pays to the target should confirm.
func (n *NetworkHarness) sendCoins(ctx context.Context, amt btcutil.Amount, func (n *NetworkHarness) sendCoins(ctx context.Context, amt btcutil.Amount,
target *HarnessNode, target *HarnessNode, addrType lnrpc.NewAddressRequest_AddressType,
addrType lnrpc.NewAddressRequest_AddressType) error { confirmed bool) error {
balReq := &lnrpc.WalletBalanceRequest{} balReq := &lnrpc.WalletBalanceRequest{}
initialBalance, err := target.WalletBalance(ctx, balReq) initialBalance, err := target.WalletBalance(ctx, balReq)
@ -1165,8 +1181,17 @@ func (n *NetworkHarness) sendCoins(ctx context.Context, amt btcutil.Amount,
return err return err
} }
// Finally, generate 6 new blocks to ensure the output gains a // If the transaction should remain unconfirmed, then we'll wait until
// sufficient number of confirmations. // the target node's unconfirmed balance reflects the expected balance
// and exit.
if !confirmed {
expectedBalance := initialBalance.UnconfirmedBalance + int64(amt)
return target.WaitForBalance(expectedBalance, false)
}
// Otherwise, we'll generate 6 new blocks to ensure the output gains a
// sufficient number of confirmations and wait for the balance to
// reflect what's expected.
if _, err := n.Miner.Node.Generate(6); err != nil { if _, err := n.Miner.Node.Generate(6); err != nil {
return err return err
} }