mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-10-11 04:53:02 +02:00
lntemp+itest: refactir testUnconfirmedChannelFunding
This commit is contained in:
@@ -123,4 +123,8 @@ var allTestCasesTemp = []*lntemp.TestCase{
|
|||||||
Name: "basic funding flow with all input types",
|
Name: "basic funding flow with all input types",
|
||||||
TestFunc: testChannelFundingInputTypes,
|
TestFunc: testChannelFundingInputTypes,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "unconfirmed channel funding",
|
||||||
|
TestFunc: testUnconfirmedChannelFunding,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
@@ -218,31 +218,27 @@ func basicChannelFundingTest(ht *lntemp.HarnessTest,
|
|||||||
|
|
||||||
// testUnconfirmedChannelFunding tests that our unconfirmed change outputs can
|
// testUnconfirmedChannelFunding tests that our unconfirmed change outputs can
|
||||||
// be used to fund channels.
|
// be used to fund channels.
|
||||||
func testUnconfirmedChannelFunding(net *lntest.NetworkHarness, t *harnessTest) {
|
func testUnconfirmedChannelFunding(ht *lntemp.HarnessTest) {
|
||||||
const (
|
const (
|
||||||
chanAmt = funding.MaxBtcFundingAmount
|
chanAmt = funding.MaxBtcFundingAmount
|
||||||
pushAmt = btcutil.Amount(100000)
|
pushAmt = btcutil.Amount(100000)
|
||||||
)
|
)
|
||||||
|
|
||||||
// We'll start off by creating a node for Carol.
|
// We'll start off by creating a node for Carol.
|
||||||
carol := net.NewNode(t.t, "Carol", nil)
|
carol := ht.NewNode("Carol", nil)
|
||||||
defer shutdownAndAssert(net, t, carol)
|
|
||||||
|
|
||||||
// We'll send her some confirmed funds.
|
alice := ht.Alice
|
||||||
net.SendCoinsUnconfirmed(t.t, chanAmt*2, carol)
|
|
||||||
|
|
||||||
// Make sure the unconfirmed tx is seen in the mempool.
|
// We'll send her some unconfirmed funds.
|
||||||
_, err := waitForTxInMempool(net.Miner.Client, minerMempoolTimeout)
|
ht.FundCoinsUnconfirmed(2*chanAmt, carol)
|
||||||
require.NoError(t.t, err, "failed to find tx in miner mempool")
|
|
||||||
|
|
||||||
// Now, we'll connect her to Alice so that they can open a channel
|
// Now, we'll connect her to Alice so that they can open a channel
|
||||||
// together. The funding flow should select Carol's unconfirmed output
|
// together. The funding flow should select Carol's unconfirmed output
|
||||||
// as she doesn't have any other funds since it's a new node.
|
// as she doesn't have any other funds since it's a new node.
|
||||||
net.ConnectNodes(t.t, carol, net.Alice)
|
ht.ConnectNodes(carol, alice)
|
||||||
|
|
||||||
chanOpenUpdate := openChannelStream(
|
chanOpenUpdate := ht.OpenChannelAssertPending(
|
||||||
t, net, carol, net.Alice,
|
carol, alice, lntemp.OpenChannelParams{
|
||||||
lntest.OpenChannelParams{
|
|
||||||
Amt: chanAmt,
|
Amt: chanAmt,
|
||||||
PushAmt: pushAmt,
|
PushAmt: pushAmt,
|
||||||
SpendUnconfirmed: true,
|
SpendUnconfirmed: true,
|
||||||
@@ -251,7 +247,7 @@ func testUnconfirmedChannelFunding(net *lntest.NetworkHarness, t *harnessTest) {
|
|||||||
|
|
||||||
// Creates a helper closure to be used below which asserts the proper
|
// Creates a helper closure to be used below which asserts the proper
|
||||||
// response to a channel balance RPC.
|
// response to a channel balance RPC.
|
||||||
checkChannelBalance := func(node *lntest.HarnessNode,
|
checkChannelBalance := func(node *node.HarnessNode,
|
||||||
local, remote, pendingLocal, pendingRemote btcutil.Amount) {
|
local, remote, pendingLocal, pendingRemote btcutil.Amount) {
|
||||||
|
|
||||||
expectedResponse := &lnrpc.ChannelBalanceResponse{
|
expectedResponse := &lnrpc.ChannelBalanceResponse{
|
||||||
@@ -285,7 +281,7 @@ func testUnconfirmedChannelFunding(net *lntest.NetworkHarness, t *harnessTest) {
|
|||||||
Balance: int64(local),
|
Balance: int64(local),
|
||||||
PendingOpenBalance: int64(pendingLocal),
|
PendingOpenBalance: int64(pendingLocal),
|
||||||
}
|
}
|
||||||
assertChannelBalanceResp(t, node, expectedResponse)
|
ht.AssertChannelBalanceResp(node, expectedResponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
// As the channel is pending open, it's expected Carol has both zero
|
// As the channel is pending open, it's expected Carol has both zero
|
||||||
@@ -300,22 +296,37 @@ func testUnconfirmedChannelFunding(net *lntest.NetworkHarness, t *harnessTest) {
|
|||||||
|
|
||||||
// For Alice, her local/remote balances should be zero, and the
|
// For Alice, her local/remote balances should be zero, and the
|
||||||
// local/remote balances are the mirror of Carol's.
|
// local/remote balances are the mirror of Carol's.
|
||||||
checkChannelBalance(net.Alice, 0, 0, pushAmt, carolLocalBalance)
|
checkChannelBalance(alice, 0, 0, pushAmt, carolLocalBalance)
|
||||||
|
|
||||||
// Confirm the channel and wait for it to be recognized by both
|
// Confirm the channel and wait for it to be recognized by both
|
||||||
// parties. Two transactions should be mined, the unconfirmed spend and
|
// parties. For neutrino backend, the funding transaction should be
|
||||||
// the funding tx.
|
// mined. Otherwise, two transactions should be mined, the unconfirmed
|
||||||
mineBlocks(t, net, 6, 2)
|
// spend and the funding tx.
|
||||||
chanPoint, err := net.WaitForChannelOpen(chanOpenUpdate)
|
if ht.IsNeutrinoBackend() {
|
||||||
require.NoError(t.t, err, "error while waitinng for channel open")
|
ht.MineBlocksAndAssertNumTxes(6, 1)
|
||||||
|
} else {
|
||||||
|
ht.MineBlocksAndAssertNumTxes(6, 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
chanPoint := ht.WaitForChannelOpenEvent(chanOpenUpdate)
|
||||||
|
|
||||||
// With the channel open, we'll check the balances on each side of the
|
// With the channel open, we'll check the balances on each side of the
|
||||||
// channel as a sanity check to ensure things worked out as intended.
|
// channel as a sanity check to ensure things worked out as intended.
|
||||||
checkChannelBalance(carol, carolLocalBalance, pushAmt, 0, 0)
|
checkChannelBalance(carol, carolLocalBalance, pushAmt, 0, 0)
|
||||||
checkChannelBalance(net.Alice, pushAmt, carolLocalBalance, 0, 0)
|
checkChannelBalance(alice, pushAmt, carolLocalBalance, 0, 0)
|
||||||
|
|
||||||
|
// TODO(yy): remove the sleep once the following bug is fixed.
|
||||||
|
//
|
||||||
|
// We may get the error `unable to gracefully close channel while peer
|
||||||
|
// is offline (try force closing it instead): channel link not found`.
|
||||||
|
// This happens because the channel link hasn't been added yet but we
|
||||||
|
// now proceed to closing the channel. We may need to revisit how the
|
||||||
|
// channel open event is created and make sure the event is only sent
|
||||||
|
// after all relevant states have been updated.
|
||||||
|
time.Sleep(2 * time.Second)
|
||||||
|
|
||||||
// Now that we're done with the test, the channel can be closed.
|
// Now that we're done with the test, the channel can be closed.
|
||||||
closeChannelAndAssert(t, net, carol, chanPoint, false)
|
ht.CloseChannel(carol, chanPoint)
|
||||||
}
|
}
|
||||||
|
|
||||||
// testChannelFundingInputTypes tests that any type of supported input type can
|
// testChannelFundingInputTypes tests that any type of supported input type can
|
||||||
|
@@ -4,10 +4,6 @@
|
|||||||
package itest
|
package itest
|
||||||
|
|
||||||
var allTestCases = []*testCase{
|
var allTestCases = []*testCase{
|
||||||
{
|
|
||||||
name: "unconfirmed channel funding",
|
|
||||||
test: testUnconfirmedChannelFunding,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "update channel policy",
|
name: "update channel policy",
|
||||||
test: testUpdateChannelPolicy,
|
test: testUpdateChannelPolicy,
|
||||||
|
Reference in New Issue
Block a user