test: fix some minor typos, expand comments

This commit is contained in:
Olaoluwa Osuntokun 2016-09-15 12:24:52 -07:00
parent 2788dbeaa8
commit 255b1b7727
No known key found for this signature in database
GPG Key ID: 9CC5B105D03521A2
2 changed files with 45 additions and 25 deletions

View File

@ -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)
} }

View File

@ -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) {