Skip to content

Commit fab6936

Browse files
authored
Merge pull request #842 from GeorgeTsagk/custom-channel-liquidity-itest
Add custom channels liquidity edge cases itest
2 parents 1c2cdc1 + 7f75248 commit fab6936

File tree

5 files changed

+268
-25
lines changed

5 files changed

+268
-25
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ require (
2020
github.com/lightninglabs/loop/swapserverrpc v1.0.8
2121
github.com/lightninglabs/pool v0.6.5-beta.0.20240604070222-e121aadb3289
2222
github.com/lightninglabs/pool/auctioneerrpc v1.1.2
23-
github.com/lightninglabs/taproot-assets v0.4.2-0.20240824000229-881ecafbeae1
24-
github.com/lightningnetwork/lnd v0.18.0-beta.rc4.0.20240730143253-1b353b0bfd58
23+
github.com/lightninglabs/taproot-assets v0.4.2-0.20240919134641-81dd00278f8a
24+
github.com/lightningnetwork/lnd v0.18.0-beta.rc4.0.20240919091721-70580403898e
2525
github.com/lightningnetwork/lnd/cert v1.2.2
2626
github.com/lightningnetwork/lnd/fn v1.1.0
2727
github.com/lightningnetwork/lnd/kvdb v1.4.8

go.sum

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1175,12 +1175,12 @@ github.com/lightninglabs/pool/auctioneerrpc v1.1.2 h1:Dbg+9Z9jXnhimR27EN37foc4aB
11751175
github.com/lightninglabs/pool/auctioneerrpc v1.1.2/go.mod h1:1wKDzN2zEP8srOi0B9iySlEsPdoPhw6oo3Vbm1v4Mhw=
11761176
github.com/lightninglabs/protobuf-go-hex-display v1.30.0-hex-display h1:pRdza2wleRN1L2fJXd6ZoQ9ZegVFTAb2bOQfruJPKcY=
11771177
github.com/lightninglabs/protobuf-go-hex-display v1.30.0-hex-display/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
1178-
github.com/lightninglabs/taproot-assets v0.4.2-0.20240824000229-881ecafbeae1 h1:2yncq2U2xvEUPjYEP5dGazJGj83Y+gr0di/aQVmXPs8=
1179-
github.com/lightninglabs/taproot-assets v0.4.2-0.20240824000229-881ecafbeae1/go.mod h1:PMlRq9aKXaxs6PMeLnj3y3YnofrylNvEOTxvegTbhSc=
1178+
github.com/lightninglabs/taproot-assets v0.4.2-0.20240919134641-81dd00278f8a h1:EmHMf2/cgkXhj+cn6jWMi+or+2AlXmQ7Qwjfj2umZZg=
1179+
github.com/lightninglabs/taproot-assets v0.4.2-0.20240919134641-81dd00278f8a/go.mod h1:B6wbs1rSTBTJwTilsKt7p/WravtKqRvJI0ICDwvcdNQ=
11801180
github.com/lightningnetwork/lightning-onion v1.2.1-0.20230823005744-06182b1d7d2f h1:Pua7+5TcFEJXIIZ1I2YAUapmbcttmLj4TTi786bIi3s=
11811181
github.com/lightningnetwork/lightning-onion v1.2.1-0.20230823005744-06182b1d7d2f/go.mod h1:c0kvRShutpj3l6B9WtTsNTBUtjSmjZXbJd9ZBRQOSKI=
1182-
github.com/lightningnetwork/lnd v0.18.0-beta.rc4.0.20240730143253-1b353b0bfd58 h1:qmJAHLGfpeYIl1qUKyQViOjNAVRqF4afKuORzeIAwjA=
1183-
github.com/lightningnetwork/lnd v0.18.0-beta.rc4.0.20240730143253-1b353b0bfd58/go.mod h1:0gen58n0DVnqJJqCMN3AXNtqWRT0KltQanlvehnhCq0=
1182+
github.com/lightningnetwork/lnd v0.18.0-beta.rc4.0.20240919091721-70580403898e h1:Weu9TWNEIpC4XLbcUoSFK3Pv2aUSwn7NlYZKdsm8wUU=
1183+
github.com/lightningnetwork/lnd v0.18.0-beta.rc4.0.20240919091721-70580403898e/go.mod h1:/Uh0qCiU/oQls68spxpmP0kRjX/uGkLzt7P/uPpDofE=
11841184
github.com/lightningnetwork/lnd/cert v1.2.2 h1:71YK6hogeJtxSxw2teq3eGeuy4rHGKcFf0d0Uy4qBjI=
11851185
github.com/lightningnetwork/lnd/cert v1.2.2/go.mod h1:jQmFn/Ez4zhDgq2hnYSw8r35bqGVxViXhX6Cd7HXM6U=
11861186
github.com/lightningnetwork/lnd/clock v1.1.1 h1:OfR3/zcJd2RhH0RU+zX/77c0ZiOnIMsDIBjgjWdZgA0=
@@ -2269,6 +2269,8 @@ modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
22692269
modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8=
22702270
nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g=
22712271
nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
2272+
pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw=
2273+
pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
22722274
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
22732275
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
22742276
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=

itest/assets_test.go

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"fmt"
1010
"os"
1111
"testing"
12+
"time"
1213

1314
"github.com/btcsuite/btcd/btcec/v2"
1415
"github.com/btcsuite/btcd/btcec/v2/schnorr"
@@ -45,6 +46,9 @@ import (
4546
"gopkg.in/macaroon.v2"
4647
)
4748

49+
// PaymentTimeout is the default payment timeout we use in our tests.
50+
const PaymentTimeout = 6 * time.Second
51+
4852
// createTestAssetNetwork sends asset funds from Charlie to Dave and Erin, so
4953
// they can fund asset channels with Yara and Fabia, respectively. So the asset
5054
// channels created are Charlie->Dave, Dave->Yara, Erin->Fabia. The channels
@@ -429,9 +433,10 @@ func assertPendingChannels(t *testing.T, node *HarnessNode, assetID []byte,
429433

430434
require.NotZero(t, pendingJSON.Assets[0].Capacity)
431435

432-
pendingLocalBalance, pendingRemoteBalance := getAssetChannelBalance(
433-
t, node, assetID, true,
434-
)
436+
pendingLocalBalance, pendingRemoteBalance, _, _ :=
437+
getAssetChannelBalance(
438+
t, node, assetID, true,
439+
)
435440
require.EqualValues(t, localSum, pendingLocalBalance)
436441
require.EqualValues(t, remoteSum, pendingRemoteBalance)
437442
}
@@ -542,7 +547,7 @@ func getChannelCustomData(src, dst *HarnessNode) (*rfqmsg.JsonAssetChanInfo,
542547
}
543548

544549
func getAssetChannelBalance(t *testing.T, node *HarnessNode, assetID []byte,
545-
pending bool) (uint64, uint64) {
550+
pending bool) (uint64, uint64, uint64, uint64) {
546551

547552
ctxb := context.Background()
548553
ctxt, cancel := context.WithTimeout(ctxb, defaultTimeout)
@@ -572,11 +577,14 @@ func getAssetChannelBalance(t *testing.T, node *HarnessNode, assetID []byte,
572577
remoteSum += balances[assetIDString].RemoteBalance
573578
}
574579

575-
return localSum, remoteSum
580+
return localSum, remoteSum, balance.LocalBalance.Sat,
581+
balance.RemoteBalance.Sat
576582
}
577583

578584
func sendAssetKeySendPayment(t *testing.T, src, dst *HarnessNode, amt uint64,
579-
assetID []byte, btcAmt fn.Option[int64]) {
585+
assetID []byte, btcAmt fn.Option[int64],
586+
expectedStatus lnrpc.Payment_PaymentStatus,
587+
failReason fn.Option[lnrpc.PaymentFailureReason]) {
580588

581589
ctxb := context.Background()
582590
ctxt, cancel := context.WithTimeout(ctxb, defaultTimeout)
@@ -601,7 +609,7 @@ func sendAssetKeySendPayment(t *testing.T, src, dst *HarnessNode, amt uint64,
601609
Amt: btcAmt.UnwrapOr(500),
602610
DestCustomRecords: customRecords,
603611
PaymentHash: hash[:],
604-
TimeoutSeconds: 3,
612+
TimeoutSeconds: int32(PaymentTimeout.Seconds()),
605613
}
606614

607615
stream, err := srcTapd.SendPayment(ctxt, &tchrpc.SendPaymentRequest{
@@ -613,7 +621,12 @@ func sendAssetKeySendPayment(t *testing.T, src, dst *HarnessNode, amt uint64,
613621

614622
result, err := getAssetPaymentResult(stream)
615623
require.NoError(t, err)
616-
require.Equal(t, lnrpc.Payment_SUCCEEDED, result.Status)
624+
require.Equal(t, expectedStatus, result.Status)
625+
626+
expectedReason := failReason.UnwrapOr(
627+
lnrpc.PaymentFailureReason_FAILURE_REASON_NONE,
628+
)
629+
require.Equal(t, result.FailureReason, expectedReason)
617630
}
618631

619632
func sendKeySendPayment(t *testing.T, src, dst *HarnessNode,
@@ -640,7 +653,7 @@ func sendKeySendPayment(t *testing.T, src, dst *HarnessNode,
640653
Amt: int64(amt),
641654
DestCustomRecords: customRecords,
642655
PaymentHash: hash[:],
643-
TimeoutSeconds: 3,
656+
TimeoutSeconds: int32(PaymentTimeout.Seconds()),
644657
}
645658

646659
stream, err := src.RouterClient.SendPaymentV2(ctxt, req)
@@ -698,7 +711,7 @@ func payInvoiceWithSatoshi(t *testing.T, payer *HarnessNode,
698711

699712
sendReq := &routerrpc.SendPaymentRequest{
700713
PaymentRequest: invoice.PaymentRequest,
701-
TimeoutSeconds: 2,
714+
TimeoutSeconds: int32(PaymentTimeout.Seconds()),
702715
MaxShardSizeMsat: 80_000_000,
703716
FeeLimitMsat: 1_000_000,
704717
}
@@ -727,7 +740,7 @@ func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
727740

728741
sendReq := &routerrpc.SendPaymentRequest{
729742
PaymentRequest: invoice.PaymentRequest,
730-
TimeoutSeconds: 2,
743+
TimeoutSeconds: int32(PaymentTimeout.Seconds()),
731744
FeeLimitMsat: 1_000_000,
732745
}
733746

@@ -1422,10 +1435,15 @@ func logBalance(t *testing.T, nodes []*HarnessNode, assetID []byte,
14221435

14231436
t.Helper()
14241437

1438+
time.Sleep(time.Millisecond * 250)
1439+
14251440
for _, node := range nodes {
1426-
local, remote := getAssetChannelBalance(t, node, assetID, false)
1427-
t.Logf("%-7s balance: local=%-9d remote=%-9d (%v)",
1428-
node.Cfg.Name, local, remote, occasion)
1441+
local, remote, localSat, remoteSat :=
1442+
getAssetChannelBalance(t, node, assetID, false)
1443+
1444+
t.Logf("%-7s balance: local=%-9d remote=%-9d, localSat=%-9d, "+
1445+
"remoteSat=%-9d (%v)", node.Cfg.Name, local, remote,
1446+
localSat, remoteSat, occasion)
14291447
}
14301448
}
14311449

0 commit comments

Comments
 (0)