routing: refactor attempt makers to return pointers
Thus adding following unit tests can be a bit easier.
This commit is contained in:
2 files changed
+58
-20
No files matched your search
@@ -4,6 +4,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/btcsuite/btcd/btcec/v2"
|
||||||
"github.com/go-errors/errors"
|
"github.com/go-errors/errors"
|
||||||
"github.com/lightningnetwork/lnd/channeldb"
|
"github.com/lightningnetwork/lnd/channeldb"
|
||||||
"github.com/lightningnetwork/lnd/lntypes"
|
"github.com/lightningnetwork/lnd/lntypes"
|
||||||
@@ -17,31 +18,68 @@ var (
|
|||||||
dummyErr = errors.New("dummy")
|
dummyErr = errors.New("dummy")
|
||||||
)
|
)
|
||||||
|
|
||||||
func makeSettledAttempt(total, fee int,
|
// createDummyRoute builds a route a->b->c paying the given amt to c.
|
||||||
preimage lntypes.Preimage) channeldb.HTLCAttempt {
|
func createDummyRoute(t *testing.T, amt lnwire.MilliSatoshi) *route.Route {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
return channeldb.HTLCAttempt{
|
priv, err := btcec.NewPrivateKey()
|
||||||
HTLCAttemptInfo: makeAttemptInfo(total, total-fee),
|
require.NoError(t, err, "failed to create private key")
|
||||||
|
hop1 := route.NewVertex(priv.PubKey())
|
||||||
|
|
||||||
|
priv, err = btcec.NewPrivateKey()
|
||||||
|
require.NoError(t, err, "failed to create private key")
|
||||||
|
hop2 := route.NewVertex(priv.PubKey())
|
||||||
|
|
||||||
|
hopFee := lnwire.NewMSatFromSatoshis(3)
|
||||||
|
hops := []*route.Hop{
|
||||||
|
{
|
||||||
|
ChannelID: 1,
|
||||||
|
PubKeyBytes: hop1,
|
||||||
|
LegacyPayload: true,
|
||||||
|
AmtToForward: amt + hopFee,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ChannelID: 2,
|
||||||
|
PubKeyBytes: hop2,
|
||||||
|
LegacyPayload: true,
|
||||||
|
AmtToForward: amt,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
priv, err = btcec.NewPrivateKey()
|
||||||
|
require.NoError(t, err, "failed to create private key")
|
||||||
|
source := route.NewVertex(priv.PubKey())
|
||||||
|
|
||||||
|
// We create a simple route that we will supply every time the router
|
||||||
|
// requests one.
|
||||||
|
rt, err := route.NewRouteFromHops(amt+2*hopFee, 100, source, hops)
|
||||||
|
require.NoError(t, err, "failed to create route")
|
||||||
|
|
||||||
|
return rt
|
||||||
|
}
|
||||||
|
|
||||||
|
func makeSettledAttempt(t *testing.T, total int,
|
||||||
|
preimage lntypes.Preimage) *channeldb.HTLCAttempt {
|
||||||
|
|
||||||
|
return &channeldb.HTLCAttempt{
|
||||||
|
HTLCAttemptInfo: makeAttemptInfo(t, total),
|
||||||
Settle: &channeldb.HTLCSettleInfo{Preimage: preimage},
|
Settle: &channeldb.HTLCSettleInfo{Preimage: preimage},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeFailedAttempt(total, fee int) *channeldb.HTLCAttempt {
|
func makeFailedAttempt(t *testing.T, total int) *channeldb.HTLCAttempt {
|
||||||
return &channeldb.HTLCAttempt{
|
return &channeldb.HTLCAttempt{
|
||||||
HTLCAttemptInfo: makeAttemptInfo(total, total-fee),
|
HTLCAttemptInfo: makeAttemptInfo(t, total),
|
||||||
Failure: &channeldb.HTLCFailInfo{
|
Failure: &channeldb.HTLCFailInfo{
|
||||||
Reason: channeldb.HTLCFailInternal,
|
Reason: channeldb.HTLCFailInternal,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeAttemptInfo(total, amtForwarded int) channeldb.HTLCAttemptInfo {
|
func makeAttemptInfo(t *testing.T, amt int) channeldb.HTLCAttemptInfo {
|
||||||
hop := &route.Hop{AmtToForward: lnwire.MilliSatoshi(amtForwarded)}
|
rt := createDummyRoute(t, lnwire.MilliSatoshi(amt))
|
||||||
return channeldb.HTLCAttemptInfo{
|
return channeldb.HTLCAttemptInfo{
|
||||||
Route: route.Route{
|
Route: *rt,
|
||||||
TotalAmount: lnwire.MilliSatoshi(total),
|
|
||||||
Hops: []*route.Hop{hop},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3483,7 +3483,7 @@ func TestSendToRouteSkipTempErrSuccess(t *testing.T) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
preimage := lntypes.Preimage{1}
|
preimage := lntypes.Preimage{1}
|
||||||
testAttempt := makeSettledAttempt(int(payAmt), 0, preimage)
|
testAttempt := makeSettledAttempt(t, int(payAmt), preimage)
|
||||||
|
|
||||||
node, err := createTestNode()
|
node, err := createTestNode()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -3521,7 +3521,7 @@ func TestSendToRouteSkipTempErrSuccess(t *testing.T) {
|
|||||||
controlTower.On("RegisterAttempt", payHash, mock.Anything).Return(nil)
|
controlTower.On("RegisterAttempt", payHash, mock.Anything).Return(nil)
|
||||||
controlTower.On("SettleAttempt",
|
controlTower.On("SettleAttempt",
|
||||||
payHash, mock.Anything, mock.Anything,
|
payHash, mock.Anything, mock.Anything,
|
||||||
).Return(&testAttempt, nil)
|
).Return(testAttempt, nil)
|
||||||
|
|
||||||
payer.On("SendHTLC",
|
payer.On("SendHTLC",
|
||||||
mock.Anything, mock.Anything, mock.Anything,
|
mock.Anything, mock.Anything, mock.Anything,
|
||||||
@@ -3550,7 +3550,7 @@ func TestSendToRouteSkipTempErrSuccess(t *testing.T) {
|
|||||||
// Expect a successful send to route.
|
// Expect a successful send to route.
|
||||||
attempt, err := router.SendToRouteSkipTempErr(payHash, rt)
|
attempt, err := router.SendToRouteSkipTempErr(payHash, rt)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, &testAttempt, attempt)
|
require.Equal(t, testAttempt, attempt)
|
||||||
|
|
||||||
// Assert the above methods are called as expected.
|
// Assert the above methods are called as expected.
|
||||||
controlTower.AssertExpectations(t)
|
controlTower.AssertExpectations(t)
|
||||||
@@ -3563,11 +3563,11 @@ func TestSendToRouteSkipTempErrSuccess(t *testing.T) {
|
|||||||
// cause the payment to be failed.
|
// cause the payment to be failed.
|
||||||
func TestSendToRouteSkipTempErrTempFailure(t *testing.T) {
|
func TestSendToRouteSkipTempErrTempFailure(t *testing.T) {
|
||||||
var (
|
var (
|
||||||
payHash lntypes.Hash
|
payHash lntypes.Hash
|
||||||
payAmt = lnwire.MilliSatoshi(10000)
|
payAmt = lnwire.MilliSatoshi(10000)
|
||||||
testAttempt = &channeldb.HTLCAttempt{}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
testAttempt := makeFailedAttempt(t, int(payAmt))
|
||||||
node, err := createTestNode()
|
node, err := createTestNode()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -3648,7 +3648,7 @@ func TestSendToRouteSkipTempErrPermanentFailure(t *testing.T) {
|
|||||||
payAmt = lnwire.MilliSatoshi(10000)
|
payAmt = lnwire.MilliSatoshi(10000)
|
||||||
)
|
)
|
||||||
|
|
||||||
testAttempt := makeFailedAttempt(int(payAmt), 0)
|
testAttempt := makeFailedAttempt(t, int(payAmt))
|
||||||
node, err := createTestNode()
|
node, err := createTestNode()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -3733,7 +3733,7 @@ func TestSendToRouteTempFailure(t *testing.T) {
|
|||||||
payAmt = lnwire.MilliSatoshi(10000)
|
payAmt = lnwire.MilliSatoshi(10000)
|
||||||
)
|
)
|
||||||
|
|
||||||
testAttempt := makeFailedAttempt(int(payAmt), 0)
|
testAttempt := makeFailedAttempt(t, int(payAmt))
|
||||||
node, err := createTestNode()
|
node, err := createTestNode()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user