Skip to content

Commit 8c49f77

Browse files
authored
Fix payment handler tests (#1882)
The parallelization introduced with #1880 has created race conditions in tests.
1 parent b4183ed commit 8c49f77

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

eclair-core/src/test/scala/fr/acinq/eclair/payment/MultiPartHandlerSpec.scala

+13-11
Original file line numberDiff line numberDiff line change
@@ -367,8 +367,10 @@ class MultiPartHandlerSpec extends TestKitBaseClass with FixtureAnyFunSuiteLike
367367
val add2 = UpdateAddHtlc(ByteVector32.One, 1, 1600 msat, pr2.paymentHash, f.defaultExpiry, TestConstants.emptyOnionPacket)
368368
f.sender.send(handler, IncomingPacket.FinalPacket(add2, Onion.createMultiPartPayload(add2.amountMsat, 2000 msat, add2.cltvExpiry, pr2.paymentSecret.get)))
369369

370-
f.sender.send(handler, GetPendingPayments)
371-
assert(f.sender.expectMsgType[PendingPayments].paymentHashes.nonEmpty)
370+
awaitCond {
371+
f.sender.send(handler, GetPendingPayments)
372+
f.sender.expectMsgType[PendingPayments].paymentHashes.nonEmpty
373+
}
372374

373375
val commands = f.register.expectMsgType[Register.Forward[CMD_FAIL_HTLC]] :: f.register.expectMsgType[Register.Forward[CMD_FAIL_HTLC]] :: Nil
374376
assert(commands.toSet === Set(
@@ -393,7 +395,8 @@ class MultiPartHandlerSpec extends TestKitBaseClass with FixtureAnyFunSuiteLike
393395
val nodeParams = Alice.nodeParams.copy(multiPartPaymentExpiry = 500 millis, features = featuresWithMpp)
394396
val handler = TestActorRef[PaymentHandler](PaymentHandler.props(nodeParams, f.register.ref))
395397

396-
f.sender.send(handler, ReceivePayment(Some(1000 msat), "1 fast coffee"))
398+
val preimage = randomBytes32()
399+
f.sender.send(handler, ReceivePayment(Some(1000 msat), "1 fast coffee", paymentPreimage_opt = Some(preimage)))
397400
val pr = f.sender.expectMsgType[PaymentRequest]
398401

399402
val add1 = UpdateAddHtlc(ByteVector32.One, 0, 800 msat, pr.paymentHash, f.defaultExpiry, TestConstants.emptyOnionPacket)
@@ -404,15 +407,14 @@ class MultiPartHandlerSpec extends TestKitBaseClass with FixtureAnyFunSuiteLike
404407
val add3 = add2.copy(id = 43)
405408
f.sender.send(handler, IncomingPacket.FinalPacket(add3, Onion.createMultiPartPayload(add3.amountMsat, 1000 msat, add3.cltvExpiry, pr.paymentSecret.get)))
406409

407-
f.register.expectMsg(Register.Forward(ActorRef.noSender, add2.channelId, CMD_FAIL_HTLC(add2.id, Right(IncorrectOrUnknownPaymentDetails(1000 msat, nodeParams.currentBlockHeight)), commit = true)))
408-
val cmd1 = f.register.expectMsgType[Register.Forward[CMD_FULFILL_HTLC]]
409-
assert(cmd1.message.id === add1.id)
410-
assert(cmd1.channelId === add1.channelId)
411-
assert(Crypto.sha256(cmd1.message.r) === pr.paymentHash)
412-
f.register.expectMsg(Register.Forward(ActorRef.noSender, add3.channelId, CMD_FULFILL_HTLC(add3.id, cmd1.message.r, commit = true)))
410+
f.register.expectMsgAllOf(
411+
Register.Forward(ActorRef.noSender, add2.channelId, CMD_FAIL_HTLC(add2.id, Right(IncorrectOrUnknownPaymentDetails(1000 msat, nodeParams.currentBlockHeight)), commit = true)),
412+
Register.Forward(ActorRef.noSender, add1.channelId, CMD_FULFILL_HTLC(add1.id, preimage, commit = true)),
413+
Register.Forward(ActorRef.noSender, add3.channelId, CMD_FULFILL_HTLC(add3.id, preimage, commit = true))
414+
)
413415

414416
val paymentReceived = f.eventListener.expectMsgType[PaymentReceived]
415-
assert(paymentReceived.copy(parts = paymentReceived.parts.map(_.copy(timestamp = 0))) === PaymentReceived(pr.paymentHash, PartialPayment(800 msat, ByteVector32.One, 0) :: PartialPayment(200 msat, ByteVector32.Zeroes, 0) :: Nil))
417+
assert(paymentReceived.parts.map(_.copy(timestamp = 0)).toSet === Set(PartialPayment(800 msat, ByteVector32.One, 0), PartialPayment(200 msat, ByteVector32.Zeroes, 0)))
416418
val received = nodeParams.db.payments.getIncomingPayment(pr.paymentHash)
417419
assert(received.isDefined && received.get.status.isInstanceOf[IncomingPaymentStatus.Received])
418420
assert(received.get.status.asInstanceOf[IncomingPaymentStatus.Received].amount === 1000.msat)
@@ -423,7 +425,7 @@ class MultiPartHandlerSpec extends TestKitBaseClass with FixtureAnyFunSuiteLike
423425

424426
// Extraneous HTLCs should be fulfilled.
425427
f.sender.send(handler, MultiPartPaymentFSM.ExtraPaymentReceived(pr.paymentHash, HtlcPart(1000 msat, UpdateAddHtlc(ByteVector32.One, 44, 200 msat, pr.paymentHash, add1.cltvExpiry, add1.onionRoutingPacket)), None))
426-
f.register.expectMsg(Register.Forward(ActorRef.noSender, ByteVector32.One, CMD_FULFILL_HTLC(44, cmd1.message.r, commit = true)))
428+
f.register.expectMsg(Register.Forward(ActorRef.noSender, ByteVector32.One, CMD_FULFILL_HTLC(44, preimage, commit = true)))
427429
assert(f.eventListener.expectMsgType[PaymentReceived].amount === 200.msat)
428430
val received2 = nodeParams.db.payments.getIncomingPayment(pr.paymentHash)
429431
assert(received2.get.status.asInstanceOf[IncomingPaymentStatus.Received].amount === 1200.msat)

0 commit comments

Comments
 (0)