@@ -56,6 +56,10 @@ const (
56
56
DefaultPushSat int64 = 1062
57
57
)
58
58
59
+ var (
60
+ NoRfqIDOpt = fn .None [rfqmsg.ID ]()
61
+ )
62
+
59
63
// createTestAssetNetwork sends asset funds from Charlie to Dave and Erin, so
60
64
// they can fund asset channels with Yara and Fabia, respectively. So the asset
61
65
// channels created are Charlie->Dave, Dave->Yara, Erin->Fabia. The channels
@@ -714,6 +718,9 @@ func sendAssetKeySendPayment(t *testing.T, src, dst *HarnessNode, amt uint64,
714
718
715
719
result , err := getAssetPaymentResult (stream , false )
716
720
require .NoError (t , err )
721
+ if result .Status == lnrpc .Payment_FAILED {
722
+ t .Logf ("Failure reason: %v" , result .FailureReason )
723
+ }
717
724
require .Equal (t , expectedStatus , result .Status )
718
725
719
726
expectedReason := failReason .UnwrapOr (
@@ -772,7 +779,9 @@ func createAndPayNormalInvoiceWithBtc(t *testing.T, src, dst *HarnessNode,
772
779
})
773
780
require .NoError (t , err )
774
781
775
- payInvoiceWithSatoshi (t , src , invoiceResp , lnrpc .Payment_SUCCEEDED )
782
+ payInvoiceWithSatoshi (
783
+ t , src , invoiceResp , lnrpc .Payment_SUCCEEDED , false ,
784
+ )
776
785
}
777
786
778
787
func createAndPayNormalInvoice (t * testing.T , src , rfqPeer , dst * HarnessNode ,
@@ -792,15 +801,15 @@ func createAndPayNormalInvoice(t *testing.T, src, rfqPeer, dst *HarnessNode,
792
801
793
802
numUnits , _ := payInvoiceWithAssets (
794
803
t , src , rfqPeer , invoiceResp .PaymentRequest , assetID , smallShards ,
795
- fn .None [lnrpc.Payment_PaymentStatus ](),
804
+ fn .None [lnrpc.Payment_PaymentStatus ](), NoRfqIDOpt ,
796
805
)
797
806
798
807
return numUnits
799
808
}
800
809
801
810
func payInvoiceWithSatoshi (t * testing.T , payer * HarnessNode ,
802
811
invoice * lnrpc.AddInvoiceResponse ,
803
- expectedStatus lnrpc.Payment_PaymentStatus ) {
812
+ expectedStatus lnrpc.Payment_PaymentStatus , expectTimeout bool ) {
804
813
805
814
ctxb := context .Background ()
806
815
ctxt , cancel := context .WithTimeout (ctxb , defaultTimeout )
@@ -816,8 +825,12 @@ func payInvoiceWithSatoshi(t *testing.T, payer *HarnessNode,
816
825
require .NoError (t , err )
817
826
818
827
result , err := getPaymentResult (stream )
819
- require .NoError (t , err )
820
- require .Equal (t , expectedStatus , result .Status )
828
+ if expectTimeout {
829
+ require .ErrorContains (t , err , "context deadline exceeded" )
830
+ } else {
831
+ require .NoError (t , err )
832
+ require .Equal (t , expectedStatus , result .Status )
833
+ }
821
834
}
822
835
823
836
func payInvoiceWithSatoshiLastHop (t * testing.T , payer * HarnessNode ,
@@ -858,7 +871,8 @@ func payInvoiceWithSatoshiLastHop(t *testing.T, payer *HarnessNode,
858
871
859
872
func payInvoiceWithAssets (t * testing.T , payer , rfqPeer * HarnessNode ,
860
873
payReq string , assetID []byte , smallShards bool ,
861
- expectedPayStatus fn.Option [lnrpc.Payment_PaymentStatus ]) (uint64 ,
874
+ expectedPayStatus fn.Option [lnrpc.Payment_PaymentStatus ],
875
+ manualRfq fn.Option [rfqmsg.ID ]) (uint64 ,
862
876
rfqmath.BigIntFixedPoint ) {
863
877
864
878
ctxb := context .Background ()
@@ -882,44 +896,62 @@ func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
882
896
sendReq .MaxShardSizeMsat = 80_000_000
883
897
}
884
898
899
+ var rfqBytes []byte
900
+ manualRfq .WhenSome (func (i rfqmsg.ID ) {
901
+ rfqBytes = make ([]byte , len (i [:]))
902
+ copy (rfqBytes , i [:])
903
+ })
904
+
885
905
stream , err := payerTapd .SendPayment (ctxt , & tchrpc.SendPaymentRequest {
886
906
AssetId : assetID ,
887
907
PeerPubkey : rfqPeer .PubKey [:],
888
908
PaymentRequest : sendReq ,
909
+ RfqId : rfqBytes ,
889
910
})
890
911
require .NoError (t , err )
891
912
892
- // We want to receive the accepted quote message first, so we know how
893
- // many assets we're going to pay.
894
- quoteMsg , err := stream .Recv ()
895
- require .NoError (t , err )
896
- acceptedQuote := quoteMsg .GetAcceptedSellOrder ()
897
- require .NotNil (t , acceptedQuote )
913
+ var (
914
+ numUnits uint64
915
+ rateVal rfqmath.FixedPoint [rfqmath.BigInt ]
916
+ )
898
917
899
- peerPubKey := acceptedQuote .Peer
900
- require .Equal (t , peerPubKey , rfqPeer .PubKeyStr )
918
+ if manualRfq .IsNone () {
919
+ // We want to receive the accepted quote message first, so we know how
920
+ // many assets we're going to pay.
921
+ quoteMsg , err := stream .Recv ()
922
+ require .NoError (t , err )
923
+ acceptedQuote := quoteMsg .GetAcceptedSellOrder ()
924
+ require .NotNil (t , acceptedQuote )
901
925
902
- rpcRate := acceptedQuote .BidAssetRate
903
- rate , err := rfqrpc .UnmarshalFixedPoint (rpcRate )
904
- require .NoError (t , err )
926
+ peerPubKey := acceptedQuote .Peer
927
+ require .Equal (t , peerPubKey , rfqPeer .PubKeyStr )
905
928
906
- t .Logf ("Got quote for %v asset units per BTC" , rate )
929
+ rpcRate := acceptedQuote .BidAssetRate
930
+ rate , err := rfqrpc .UnmarshalFixedPoint (rpcRate )
931
+ require .NoError (t , err )
932
+
933
+ rateVal = * rate
907
934
908
- amountMsat := lnwire .MilliSatoshi (decodedInvoice .NumMsat )
909
- milliSatsFP := rfqmath .MilliSatoshiToUnits (amountMsat , * rate )
910
- numUnits := milliSatsFP .ScaleTo (0 ).ToUint64 ()
911
- msatPerUnit := float64 (decodedInvoice .NumMsat ) / float64 (numUnits )
912
- t .Logf ("Got quote for %v asset units at %3f msat/unit from peer %s " +
913
- "with SCID %d" , numUnits , msatPerUnit , peerPubKey ,
914
- acceptedQuote .Scid )
935
+ t .Logf ("Got quote for %v asset units per BTC" , rate )
936
+
937
+ amountMsat := lnwire .MilliSatoshi (decodedInvoice .NumMsat )
938
+ milliSatsFP := rfqmath .MilliSatoshiToUnits (amountMsat , * rate )
939
+ numUnits = milliSatsFP .ScaleTo (0 ).ToUint64 ()
940
+ msatPerUnit := float64 (decodedInvoice .NumMsat ) / float64 (numUnits )
941
+ t .Logf ("Got quote for %v asset units at %3f msat/unit from peer %s " +
942
+ "with SCID %d" , numUnits , msatPerUnit , peerPubKey ,
943
+ acceptedQuote .Scid )
944
+ }
915
945
916
946
expectedStatus := expectedPayStatus .UnwrapOr (lnrpc .Payment_SUCCEEDED )
917
947
918
- result , err := getAssetPaymentResult (stream , expectedPayStatus .IsSome ())
948
+ result , err := getAssetPaymentResult (
949
+ stream , expectedStatus == lnrpc .Payment_IN_FLIGHT ,
950
+ )
919
951
require .NoError (t , err )
920
952
require .Equal (t , expectedStatus , result .Status )
921
953
922
- return numUnits , * rate
954
+ return numUnits , rateVal
923
955
}
924
956
925
957
func createAssetInvoice (t * testing.T , dstRfqPeer , dst * HarnessNode ,
0 commit comments