@@ -56,6 +56,10 @@ const (
5656 DefaultPushSat int64 = 1062
5757)
5858
59+ var (
60+ NoRfqIDOpt = fn .None [rfqmsg.ID ]()
61+ )
62+
5963// createTestAssetNetwork sends asset funds from Charlie to Dave and Erin, so
6064// they can fund asset channels with Yara and Fabia, respectively. So the asset
6165// 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,
714718
715719 result , err := getAssetPaymentResult (stream , false )
716720 require .NoError (t , err )
721+ if result .Status == lnrpc .Payment_FAILED {
722+ t .Logf ("Failure reason: %v" , result .FailureReason )
723+ }
717724 require .Equal (t , expectedStatus , result .Status )
718725
719726 expectedReason := failReason .UnwrapOr (
@@ -772,7 +779,9 @@ func createAndPayNormalInvoiceWithBtc(t *testing.T, src, dst *HarnessNode,
772779 })
773780 require .NoError (t , err )
774781
775- payInvoiceWithSatoshi (t , src , invoiceResp , lnrpc .Payment_SUCCEEDED )
782+ payInvoiceWithSatoshi (
783+ t , src , invoiceResp , lnrpc .Payment_SUCCEEDED , false ,
784+ )
776785}
777786
778787func createAndPayNormalInvoice (t * testing.T , src , rfqPeer , dst * HarnessNode ,
@@ -792,15 +801,15 @@ func createAndPayNormalInvoice(t *testing.T, src, rfqPeer, dst *HarnessNode,
792801
793802 numUnits , _ := payInvoiceWithAssets (
794803 t , src , rfqPeer , invoiceResp .PaymentRequest , assetID , smallShards ,
795- fn .None [lnrpc.Payment_PaymentStatus ](),
804+ fn .None [lnrpc.Payment_PaymentStatus ](), NoRfqIDOpt ,
796805 )
797806
798807 return numUnits
799808}
800809
801810func payInvoiceWithSatoshi (t * testing.T , payer * HarnessNode ,
802811 invoice * lnrpc.AddInvoiceResponse ,
803- expectedStatus lnrpc.Payment_PaymentStatus ) {
812+ expectedStatus lnrpc.Payment_PaymentStatus , expectTimeout bool ) {
804813
805814 ctxb := context .Background ()
806815 ctxt , cancel := context .WithTimeout (ctxb , defaultTimeout )
@@ -816,8 +825,12 @@ func payInvoiceWithSatoshi(t *testing.T, payer *HarnessNode,
816825 require .NoError (t , err )
817826
818827 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+ }
821834}
822835
823836func payInvoiceWithSatoshiLastHop (t * testing.T , payer * HarnessNode ,
@@ -858,7 +871,8 @@ func payInvoiceWithSatoshiLastHop(t *testing.T, payer *HarnessNode,
858871
859872func payInvoiceWithAssets (t * testing.T , payer , rfqPeer * HarnessNode ,
860873 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 ,
862876 rfqmath.BigIntFixedPoint ) {
863877
864878 ctxb := context .Background ()
@@ -882,44 +896,62 @@ func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
882896 sendReq .MaxShardSizeMsat = 80_000_000
883897 }
884898
899+ var rfqBytes []byte
900+ manualRfq .WhenSome (func (i rfqmsg.ID ) {
901+ rfqBytes = make ([]byte , len (i [:]))
902+ copy (rfqBytes , i [:])
903+ })
904+
885905 stream , err := payerTapd .SendPayment (ctxt , & tchrpc.SendPaymentRequest {
886906 AssetId : assetID ,
887907 PeerPubkey : rfqPeer .PubKey [:],
888908 PaymentRequest : sendReq ,
909+ RfqId : rfqBytes ,
889910 })
890911 require .NoError (t , err )
891912
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+ )
898917
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 )
901925
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 )
905928
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
907934
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+ }
915945
916946 expectedStatus := expectedPayStatus .UnwrapOr (lnrpc .Payment_SUCCEEDED )
917947
918- result , err := getAssetPaymentResult (stream , expectedPayStatus .IsSome ())
948+ result , err := getAssetPaymentResult (
949+ stream , expectedStatus == lnrpc .Payment_IN_FLIGHT ,
950+ )
919951 require .NoError (t , err )
920952 require .Equal (t , expectedStatus , result .Status )
921953
922- return numUnits , * rate
954+ return numUnits , rateVal
923955}
924956
925957func createAssetInvoice (t * testing.T , dstRfqPeer , dst * HarnessNode ,
0 commit comments