lnd/routing/bandwidth_test.go
carla 990dda4b18
multi: thread bandwidth check amount down to MayAddOutgoingHtlc
Pass htlc amount down to the channel so that we don't need to rely
on minHtlc (and pad it when the channel sets a 0 min htlc). Update
test to just check some sane values since we're no longer relying
on minHtlc amount at all.
2021-10-19 09:50:51 +02:00

129 lines
2.8 KiB
Go

package routing
import (
"testing"
"github.com/btcsuite/btcutil"
"github.com/go-errors/errors"
"github.com/lightningnetwork/lnd/htlcswitch"
"github.com/lightningnetwork/lnd/lnwire"
"github.com/stretchr/testify/require"
)
// TestBandwidthManager tests getting of bandwidth hints from a bandwidth
// manager.
func TestBandwidthManager(t *testing.T) {
var (
chan1ID uint64 = 101
chan2ID uint64 = 102
chanCapacity btcutil.Amount = 100000
)
testCases := []struct {
name string
channelID uint64
linkQuery getLinkQuery
expectedBandwidth lnwire.MilliSatoshi
expectFound bool
}{
{
name: "channel not ours",
channelID: chan2ID,
// Set a link query that will fail our test since we
// don't expect to query the switch for a channel that
// is not ours.
linkQuery: func(id lnwire.ShortChannelID) (
htlcswitch.ChannelLink, error) {
require.Fail(t, "link query unexpected for: "+
"%v", id)
return nil, nil
},
expectedBandwidth: 0,
expectFound: false,
},
{
name: "channel ours, link not online",
channelID: chan1ID,
linkQuery: func(lnwire.ShortChannelID) (
htlcswitch.ChannelLink, error) {
return nil, htlcswitch.ErrChannelLinkNotFound
},
expectedBandwidth: 0,
expectFound: true,
},
{
name: "channel ours, link not eligible",
channelID: chan1ID,
linkQuery: func(lnwire.ShortChannelID) (
htlcswitch.ChannelLink, error) {
return &mockLink{
ineligible: true,
}, nil
},
expectedBandwidth: 0,
expectFound: true,
},
{
name: "channel ours, link can't add htlc",
channelID: chan1ID,
linkQuery: func(lnwire.ShortChannelID) (
htlcswitch.ChannelLink, error) {
return &mockLink{
mayAddOutgoingErr: errors.New(
"can't add htlc",
),
}, nil
},
expectedBandwidth: 0,
expectFound: true,
},
{
name: "channel ours, bandwidth available",
channelID: chan1ID,
linkQuery: func(lnwire.ShortChannelID) (
htlcswitch.ChannelLink, error) {
return &mockLink{
bandwidth: 321,
}, nil
},
expectedBandwidth: 321,
expectFound: true,
},
}
for _, testCase := range testCases {
testCase := testCase
t.Run(testCase.name, func(t *testing.T) {
g := newMockGraph(t)
sourceNode := newMockNode(sourceNodeID)
targetNode := newMockNode(targetNodeID)
g.addNode(sourceNode)
g.addNode(targetNode)
g.addChannel(
chan1ID, sourceNodeID, targetNodeID,
chanCapacity,
)
m, err := newBandwidthManager(
g, sourceNode.pubkey, testCase.linkQuery,
)
require.NoError(t, err)
bandwidth, found := m.availableChanBandwidth(
testCase.channelID, 10,
)
require.Equal(t, testCase.expectedBandwidth, bandwidth)
require.Equal(t, testCase.expectFound, found)
})
}
}