mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-10-11 01:12:45 +02:00
tlv+record+routing: add payload size calculation
This commit is contained in:
@@ -2,12 +2,20 @@ package route
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/hex"
|
||||
"testing"
|
||||
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
"github.com/lightningnetwork/lnd/record"
|
||||
)
|
||||
|
||||
var (
|
||||
testPrivKeyBytes, _ = hex.DecodeString("e126f68f7eafcc8b74f54d269fe206be715000f94dac067d1c04a8ca3b2db734")
|
||||
_, testPubKey = btcec.PrivKeyFromBytes(btcec.S256(), testPrivKeyBytes)
|
||||
testPubKeyBytes, _ = NewVertexFromBytes(testPubKey.SerializeCompressed())
|
||||
)
|
||||
|
||||
// TestRouteTotalFees checks that a route reports the expected total fee.
|
||||
func TestRouteTotalFees(t *testing.T) {
|
||||
t.Parallel()
|
||||
@@ -56,7 +64,6 @@ func TestRouteTotalFees(t *testing.T) {
|
||||
if r.TotalFees() != fee {
|
||||
t.Fatalf("expected %v fees, got %v", fee, r.TotalFees())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -93,3 +100,57 @@ func TestMPPHop(t *testing.T) {
|
||||
t.Fatalf("expected err: %v, got: %v", nil, err)
|
||||
}
|
||||
}
|
||||
|
||||
// TestPayloadSize tests the payload size calculation that is provided by Hop
|
||||
// structs.
|
||||
func TestPayloadSize(t *testing.T) {
|
||||
hops := []*Hop{
|
||||
{
|
||||
PubKeyBytes: testPubKeyBytes,
|
||||
AmtToForward: 1000,
|
||||
OutgoingTimeLock: 600000,
|
||||
ChannelID: 3432483437438,
|
||||
LegacyPayload: true,
|
||||
},
|
||||
{
|
||||
PubKeyBytes: testPubKeyBytes,
|
||||
AmtToForward: 1200,
|
||||
OutgoingTimeLock: 700000,
|
||||
ChannelID: 63584534844,
|
||||
},
|
||||
{
|
||||
PubKeyBytes: testPubKeyBytes,
|
||||
AmtToForward: 1200,
|
||||
OutgoingTimeLock: 700000,
|
||||
MPP: record.NewMPP(500, [32]byte{}),
|
||||
CustomRecords: map[uint64][]byte{
|
||||
100000: {1, 2, 3},
|
||||
1000000: {4, 5},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
rt := Route{
|
||||
Hops: hops,
|
||||
}
|
||||
path, err := rt.ToSphinxPath()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
for i, onionHop := range path[:path.TrueRouteLength()] {
|
||||
hop := hops[i]
|
||||
var nextChan uint64
|
||||
if i < len(hops)-1 {
|
||||
nextChan = hops[i+1].ChannelID
|
||||
}
|
||||
|
||||
expected := uint64(onionHop.HopPayload.NumBytes())
|
||||
actual := hop.PayloadSize(nextChan)
|
||||
if expected != actual {
|
||||
t.Fatalf("unexpected payload size at hop %v: "+
|
||||
"expected %v, got %v",
|
||||
i, expected, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user