test: fix some minor typos, expand comments
This commit is contained in:
parent
2788dbeaa8
commit
255b1b7727
67
lnd_test.go
67
lnd_test.go
@ -9,11 +9,11 @@ import (
|
|||||||
|
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
|
|
||||||
|
"github.com/lightningnetwork/lnd/lnrpc"
|
||||||
"github.com/roasbeef/btcd/rpctest"
|
"github.com/roasbeef/btcd/rpctest"
|
||||||
"github.com/roasbeef/btcd/wire"
|
"github.com/roasbeef/btcd/wire"
|
||||||
"github.com/roasbeef/btcrpcclient"
|
"github.com/roasbeef/btcrpcclient"
|
||||||
"github.com/roasbeef/btcutil"
|
"github.com/roasbeef/btcutil"
|
||||||
"github.com/lightningnetwork/lnd/lnrpc"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type lndTestCase func(net *networkHarness, t *testing.T)
|
type lndTestCase func(net *networkHarness, t *testing.T)
|
||||||
@ -28,8 +28,12 @@ func assertTxInBlock(block *btcutil.Block, txid *wire.ShaHash, t *testing.T) {
|
|||||||
t.Fatalf("funding tx was not included in block")
|
t.Fatalf("funding tx was not included in block")
|
||||||
}
|
}
|
||||||
|
|
||||||
func getChannelHelpers(ctxb context.Context, net *networkHarness, t *testing.T) (func(*lightningNode,
|
// getChannelHelpers returns a series of helper functions as closures which may
|
||||||
*lightningNode, btcutil.Amount) *lnrpc.ChannelPoint, func(*lightningNode, *lnrpc.ChannelPoint)) {
|
// be useful within tests to execute common activities such as synchronously
|
||||||
|
// waiting for channels to open/close.
|
||||||
|
func getChannelHelpers(ctxb context.Context, net *networkHarness,
|
||||||
|
t *testing.T) (func(*lightningNode, *lightningNode, btcutil.Amount) *lnrpc.ChannelPoint,
|
||||||
|
func(*lightningNode, *lnrpc.ChannelPoint)) {
|
||||||
|
|
||||||
openChannel := func(alice *lightningNode, bob *lightningNode, amount btcutil.Amount) *lnrpc.ChannelPoint {
|
openChannel := func(alice *lightningNode, bob *lightningNode, amount btcutil.Amount) *lnrpc.ChannelPoint {
|
||||||
chanOpenUpdate, err := net.OpenChannel(ctxb, alice, bob, amount, 1)
|
chanOpenUpdate, err := net.OpenChannel(ctxb, alice, bob, amount, 1)
|
||||||
@ -50,7 +54,7 @@ func getChannelHelpers(ctxb context.Context, net *networkHarness, t *testing.T)
|
|||||||
}
|
}
|
||||||
fundingChanPoint, err := net.WaitForChannelOpen(chanOpenUpdate)
|
fundingChanPoint, err := net.WaitForChannelOpen(chanOpenUpdate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error while waiting for channeel open: %v", err)
|
t.Fatalf("error while waiting for channel open: %v", err)
|
||||||
}
|
}
|
||||||
fundingTxID, err := wire.NewShaHash(fundingChanPoint.FundingTxid)
|
fundingTxID, err := wire.NewShaHash(fundingChanPoint.FundingTxid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -75,7 +79,7 @@ func getChannelHelpers(ctxb context.Context, net *networkHarness, t *testing.T)
|
|||||||
closeChannel := func(node *lightningNode, fundingChanPoint *lnrpc.ChannelPoint) {
|
closeChannel := func(node *lightningNode, fundingChanPoint *lnrpc.ChannelPoint) {
|
||||||
closeUpdates, err := net.CloseChannel(ctxb, node, fundingChanPoint, false)
|
closeUpdates, err := net.CloseChannel(ctxb, node, fundingChanPoint, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to clsoe channel: %v", err)
|
t.Fatalf("unable to close channel: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finally, generate a single block, wait for the final close status
|
// Finally, generate a single block, wait for the final close status
|
||||||
@ -99,9 +103,6 @@ func getChannelHelpers(ctxb context.Context, net *networkHarness, t *testing.T)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return openChannel, closeChannel
|
return openChannel, closeChannel
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// testBasicChannelFunding performs a test exercising expected behavior from a
|
// testBasicChannelFunding performs a test exercising expected behavior from a
|
||||||
@ -111,13 +112,20 @@ func getChannelHelpers(ctxb context.Context, net *networkHarness, t *testing.T)
|
|||||||
// transaction was mined.
|
// transaction was mined.
|
||||||
func testBasicChannelFunding(net *networkHarness, t *testing.T) {
|
func testBasicChannelFunding(net *networkHarness, t *testing.T) {
|
||||||
ctxb := context.Background()
|
ctxb := context.Background()
|
||||||
|
|
||||||
// First establish a channel with a capacity of 0.5 BTC between Alice
|
|
||||||
// and Bob.
|
|
||||||
openChannel, closeChannel := getChannelHelpers(ctxb, net, t)
|
openChannel, closeChannel := getChannelHelpers(ctxb, net, t)
|
||||||
|
|
||||||
chanAmt := btcutil.Amount(btcutil.SatoshiPerBitcoin / 2)
|
chanAmt := btcutil.Amount(btcutil.SatoshiPerBitcoin / 2)
|
||||||
|
|
||||||
|
// First establish a channel with a capacity of 0.5 BTC between Alice
|
||||||
|
// and Bob. This function will block until the channel itself is fully
|
||||||
|
// open or an error occurs in the funding process. A series of
|
||||||
|
// assertions will be executed to ensure the funding process completed
|
||||||
|
// successfully.
|
||||||
chanPoint := openChannel(net.Alice, net.Bob, chanAmt)
|
chanPoint := openChannel(net.Alice, net.Bob, chanAmt)
|
||||||
|
|
||||||
|
// Finally, immediately close the channel. This function will also
|
||||||
|
// block until the channel is closed and will additionally assert the
|
||||||
|
// relevant channel closing post conditions.
|
||||||
closeChannel(net.Alice, chanPoint)
|
closeChannel(net.Alice, chanPoint)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,8 +133,11 @@ func testBasicChannelFunding(net *networkHarness, t *testing.T) {
|
|||||||
// checks channel balance to be equal amount specified while creation of channel.
|
// checks channel balance to be equal amount specified while creation of channel.
|
||||||
func testChannelBalance(net *networkHarness, t *testing.T) {
|
func testChannelBalance(net *networkHarness, t *testing.T) {
|
||||||
ctxb := context.Background()
|
ctxb := context.Background()
|
||||||
|
openChannel, closeChannel := getChannelHelpers(ctxb, net, t)
|
||||||
|
|
||||||
checkChannelBalance := func (node lnrpc.LightningClient, amount btcutil.Amount) {
|
// Creates a helper closure to be used below which asserts the proper
|
||||||
|
// response to a channel balance RPC.
|
||||||
|
checkChannelBalance := func(node lnrpc.LightningClient, amount btcutil.Amount) {
|
||||||
response, err := node.ChannelBalance(ctxb, &lnrpc.ChannelBalanceRequest{})
|
response, err := node.ChannelBalance(ctxb, &lnrpc.ChannelBalanceRequest{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to get channel balance: %v", err)
|
t.Fatalf("unable to get channel balance: %v", err)
|
||||||
@ -138,19 +149,28 @@ func testChannelBalance(net *networkHarness, t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
openChannel, closeChannel := getChannelHelpers(ctxb, net, t)
|
// Open a channel with 0.5 BTC between Alice and Bob, ensuring the
|
||||||
|
// channel has been opened properly.
|
||||||
amount := btcutil.Amount(btcutil.SatoshiPerBitcoin / 2)
|
amount := btcutil.Amount(btcutil.SatoshiPerBitcoin / 2)
|
||||||
|
|
||||||
chanPoint := openChannel(net.Alice, net.Bob, amount)
|
chanPoint := openChannel(net.Alice, net.Bob, amount)
|
||||||
|
|
||||||
|
// As this is a single funder channel, Alice's balance should be
|
||||||
|
// exactly 0.5 BTC since now state transitions have taken place yet.
|
||||||
checkChannelBalance(net.Alice, amount)
|
checkChannelBalance(net.Alice, amount)
|
||||||
|
|
||||||
// Because we wait for Alice channel open notification it might happen
|
// Since we only explicitly wait for Alice's channel open notification,
|
||||||
// that Bob haven't added newly created channel in the list of active
|
// Bob might not yet have updated his internal state in response to
|
||||||
// channels, so lets wait for a second.
|
// Alice's channel open proof. So we sleep here for a second to let Bob
|
||||||
|
// catch up.
|
||||||
|
// TODO(roasbeef): Bob should also watch for the channel on-chain after
|
||||||
|
// the changes to restrict the number of pending channels are in.
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
|
|
||||||
|
// Ensure Bob currently has no available balance within the channel.
|
||||||
checkChannelBalance(net.Bob, 0)
|
checkChannelBalance(net.Bob, 0)
|
||||||
|
|
||||||
|
// Finally close the channel between Alice and Bob, asserting that the
|
||||||
|
// channel has been properly closed on-chain.
|
||||||
closeChannel(net.Alice, chanPoint)
|
closeChannel(net.Alice, chanPoint)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,7 +205,7 @@ func testChannelForceClosure(net *networkHarness, t *testing.T) {
|
|||||||
|
|
||||||
// Now that the channel is open, immediately execute a force closure of
|
// Now that the channel is open, immediately execute a force closure of
|
||||||
// the channel. This will also assert that the commitment transaction
|
// the channel. This will also assert that the commitment transaction
|
||||||
// was immediately broadcast in order to fufill the force closure
|
// was immediately broadcast in order to fulfill the force closure
|
||||||
// request.
|
// request.
|
||||||
closeUpdate, err := net.CloseChannel(ctxb, net.Alice, chanPoint, true)
|
closeUpdate, err := net.CloseChannel(ctxb, net.Alice, chanPoint, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -213,7 +233,7 @@ func testChannelForceClosure(net *networkHarness, t *testing.T) {
|
|||||||
|
|
||||||
// At this point, the sweeping transaction should now be broadcast. So
|
// At this point, the sweeping transaction should now be broadcast. So
|
||||||
// we fetch the node's mempool to ensure it has been properly
|
// we fetch the node's mempool to ensure it has been properly
|
||||||
// broadcasted.
|
// broadcast.
|
||||||
var sweepingTXID *wire.ShaHash
|
var sweepingTXID *wire.ShaHash
|
||||||
var mempool []*wire.ShaHash
|
var mempool []*wire.ShaHash
|
||||||
mempoolPoll:
|
mempoolPoll:
|
||||||
@ -244,7 +264,7 @@ mempoolPoll:
|
|||||||
sweepingTXID = mempool[0]
|
sweepingTXID = mempool[0]
|
||||||
|
|
||||||
// Fetch the sweep transaction, all input it's spending should be from
|
// Fetch the sweep transaction, all input it's spending should be from
|
||||||
// the commitment transaction which was broadcasted on-chain.
|
// the commitment transaction which was broadcast on-chain.
|
||||||
sweepTx, err := net.Miner.Node.GetRawTransaction(sweepingTXID)
|
sweepTx, err := net.Miner.Node.GetRawTransaction(sweepingTXID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unable to fetch sweep tx: %v", err)
|
t.Fatalf("unable to fetch sweep tx: %v", err)
|
||||||
@ -274,10 +294,9 @@ mempoolPoll:
|
|||||||
var lndTestCases = map[string]lndTestCase{
|
var lndTestCases = map[string]lndTestCase{
|
||||||
"basic funding flow": testBasicChannelFunding,
|
"basic funding flow": testBasicChannelFunding,
|
||||||
"channel force closure": testChannelForceClosure,
|
"channel force closure": testChannelForceClosure,
|
||||||
"channel balance": testChannelBalance,
|
"channel balance": testChannelBalance,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TestLightningNetworkDaemon performs a series of integration tests amongst a
|
// TestLightningNetworkDaemon performs a series of integration tests amongst a
|
||||||
// programmatically driven network of lnd nodes.
|
// programmatically driven network of lnd nodes.
|
||||||
func TestLightningNetworkDaemon(t *testing.T) {
|
func TestLightningNetworkDaemon(t *testing.T) {
|
||||||
@ -332,9 +351,9 @@ func TestLightningNetworkDaemon(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// With the btcd harness created, we can now complete the
|
// With the btcd harness created, we can now complete the
|
||||||
// initialization of the network. args - list of lnd arguments, example: "--debuglevel=debug"
|
// initialization of the network. args - list of lnd arguments,
|
||||||
|
// example: "--debuglevel=debug"
|
||||||
args := []string{}
|
args := []string{}
|
||||||
|
|
||||||
if err := lightningNetwork.InitializeSeedNodes(btcdHarness, args); err != nil {
|
if err := lightningNetwork.InitializeSeedNodes(btcdHarness, args); err != nil {
|
||||||
t.Fatalf("unable to initialize seed nodes: %v", err)
|
t.Fatalf("unable to initialize seed nodes: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -385,7 +385,8 @@ func (r *rpcServer) WalletBalance(ctx context.Context,
|
|||||||
return &lnrpc.WalletBalanceResponse{balance.ToBTC()}, nil
|
return &lnrpc.WalletBalanceResponse{balance.ToBTC()}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChannelBalance returns the total available channel flow across all open
|
||||||
|
// channels in satoshis.
|
||||||
func (r *rpcServer) ChannelBalance(ctx context.Context,
|
func (r *rpcServer) ChannelBalance(ctx context.Context,
|
||||||
in *lnrpc.ChannelBalanceRequest) (*lnrpc.ChannelBalanceResponse, error) {
|
in *lnrpc.ChannelBalanceRequest) (*lnrpc.ChannelBalanceResponse, error) {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user