@@ -93,7 +93,7 @@ func testSendOnion(ht *lntest.HarnessTest) {
9393 HopPubkeys : onionResp .HopPubkeys ,
9494 }
9595 trackResp := alice .RPC .TrackOnion (trackReq )
96- require .Equal (ht , invoices [0 ].RPreimage , trackResp .Preimage )
96+ require .Equal (ht , invoices [0 ].RPreimage , trackResp .GetPreimage () )
9797
9898 // The invoice should show as settled for Dave.
9999 ht .AssertInvoiceSettled (dave , invoices [0 ].PaymentAddr )
@@ -200,7 +200,7 @@ func testSendOnionTwice(ht *lntest.HarnessTest) {
200200 HopPubkeys : onionResp .HopPubkeys ,
201201 }
202202 trackResp := alice .RPC .TrackOnion (trackReq )
203- require .Equal (ht , preimage [:], trackResp .Preimage )
203+ require .Equal (ht , preimage [:], trackResp .GetPreimage () )
204204
205205 // Now that the original HTLC attempt has settled, we'll send the same
206206 // onion again with the same attempt ID.
@@ -275,9 +275,6 @@ func testTrackOnion(ht *lntest.HarnessTest) {
275275 require .True (ht , resp .Success , "expected successful onion send" )
276276 require .Empty (ht , resp .ErrorMessage , "unexpected failure to send onion" )
277277
278- serverErrorStr := ""
279- clientErrorStr := ""
280-
281278 // Track the payment providing all necessary information to delegate
282279 // error decryption to the server. We expect this to fail as Dave is not
283280 // expecting payment.
@@ -288,10 +285,11 @@ func testTrackOnion(ht *lntest.HarnessTest) {
288285 HopPubkeys : onionResp .HopPubkeys ,
289286 }
290287 trackResp := alice .RPC .TrackOnion (trackReq )
291- require . NotEmpty ( ht , trackResp .ErrorMessage ,
292- "expected onion tracking error" )
288+ serverFailure := trackResp .GetFailureDetails ()
289+ require . NotNil ( ht , serverFailure , "expected onion tracking error" )
293290
294- serverErrorStr = trackResp .ErrorMessage
291+ serverFwdFailure := serverFailure .GetForwardingFailure ()
292+ require .NotNil (ht , serverFwdFailure , "expected forwarding failure" )
295293
296294 // Now we'll track the same payment attempt, but we'll specify that
297295 // we want to handle the error decryption ourselves client side.
@@ -300,16 +298,18 @@ func testTrackOnion(ht *lntest.HarnessTest) {
300298 PaymentHash : paymentHash ,
301299 }
302300 trackResp = alice .RPC .TrackOnion (trackReq )
303- require .NotNil (ht , trackResp .EncryptedError , "expected encrypted error" )
301+ clientFailure := trackResp .GetFailureDetails ()
302+ require .NotNil (ht , clientFailure , "expected client tracking error" )
303+
304+ encryptedErrorBytes := clientFailure .GetEncryptedErrorData ()
305+ require .NotNil (ht , encryptedErrorBytes , "expected encrypted error" )
304306
305307 // Decrypt and inspect the error from the TrackOnion RPC response.
306308 sessionKey , _ := btcec .PrivKeyFromBytes (onionResp .SessionKey )
307309 var pubKeys []* btcec.PublicKey
308310 for _ , keyBytes := range onionResp .HopPubkeys {
309311 pubKey , err := btcec .ParsePubKey (keyBytes )
310- if err != nil {
311- ht .Fatalf ("Failed to parse public key: %v" , err )
312- }
312+ require .NoError (ht , err , "Failed to parse public key" )
313313 pubKeys = append (pubKeys , pubKey )
314314 }
315315
@@ -323,14 +323,19 @@ func testTrackOnion(ht *lntest.HarnessTest) {
323323 }
324324
325325 // Simulate an RPC client decrypting the onion error.
326- encryptedError := lnwire .OpaqueReason (trackResp .EncryptedError )
327- forwardingError , err := errorDecryptor .DecryptError (encryptedError )
328- require .Nil (ht , err , "unable to decrypt error" )
329-
330- clientErrorStr = forwardingError .Error ()
326+ encryptedError := lnwire .OpaqueReason (encryptedErrorBytes )
327+ clientFwdErr , err := errorDecryptor .DecryptError (encryptedError )
328+ require .NoError (ht , err , "unable to decrypt error" )
329+
330+ // Finally, assert that the structured forwarding failure is the same
331+ // whether it was decrypted on the server or on the client.
332+ serverFwdErr , err := switchrpc .UnmarshallForwardingError (
333+ serverFwdFailure ,
334+ )
335+ require .NoError (ht , err , "unable to decode server forwarding failure" )
331336
332- serverFwdErr , err := switchrpc . ParseForwardingError ( serverErrorStr )
333- require . Nil ( ht , err , "expected to parse forwarding error from server " )
334- require .Equal (ht , serverFwdErr .Error (), clientErrorStr , "expect error " +
335- " message to match whether handled by client or server " )
337+ require . Equal ( ht , serverFwdFailure . FailureSourceIndex ,
338+ uint32 ( clientFwdErr . FailureSourceIdx ), "source index mismatch " )
339+ require .Equal (ht , serverFwdErr .WireMessage (),
340+ clientFwdErr . WireMessage (), "wire message mismatch " )
336341}
0 commit comments