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