e7a457f1ce
Previously the bandwidth hints were only queried once per payment. This did not allow for concurrent payments changing channel balances.
73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package routing
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/lightningnetwork/lnd/channeldb"
|
|
"github.com/lightningnetwork/lnd/lnwire"
|
|
"github.com/lightningnetwork/lnd/routing/route"
|
|
)
|
|
|
|
func TestRequestRoute(t *testing.T) {
|
|
const (
|
|
height = 10
|
|
)
|
|
|
|
findPath := func(g *graphParams, r *RestrictParams,
|
|
cfg *PathFindingConfig, source, target route.Vertex,
|
|
amt lnwire.MilliSatoshi) ([]*channeldb.ChannelEdgePolicy,
|
|
error) {
|
|
|
|
// We expect find path to receive a cltv limit excluding the
|
|
// final cltv delta (including the block padding).
|
|
if *r.CltvLimit != 22-uint32(BlockPadding) {
|
|
t.Fatal("wrong cltv limit")
|
|
}
|
|
|
|
path := []*channeldb.ChannelEdgePolicy{
|
|
{
|
|
Node: &channeldb.LightningNode{},
|
|
},
|
|
}
|
|
|
|
return path, nil
|
|
}
|
|
|
|
sessionSource := &SessionSource{
|
|
SelfNode: &channeldb.LightningNode{},
|
|
MissionControl: &MissionControl{
|
|
cfg: &MissionControlConfig{},
|
|
},
|
|
}
|
|
|
|
session := &paymentSession{
|
|
getBandwidthHints: func() (map[uint64]lnwire.MilliSatoshi,
|
|
error) {
|
|
|
|
return nil, nil
|
|
},
|
|
sessionSource: sessionSource,
|
|
pathFinder: findPath,
|
|
}
|
|
|
|
cltvLimit := uint32(30)
|
|
finalCltvDelta := uint16(8)
|
|
|
|
payment := &LightningPayment{
|
|
CltvLimit: &cltvLimit,
|
|
FinalCLTVDelta: finalCltvDelta,
|
|
}
|
|
|
|
route, err := session.RequestRoute(payment, height, finalCltvDelta)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// We expect an absolute route lock value of height + finalCltvDelta
|
|
// + BlockPadding.
|
|
if route.TotalTimeLock != 18+uint32(BlockPadding) {
|
|
t.Fatalf("unexpected total time lock of %v",
|
|
route.TotalTimeLock)
|
|
}
|
|
}
|