Increase timeout for flaky onion message tests (#3167)
What changed, and why it matters
This commit only changes test configuration and test code. It increases the timeout used in automated tests for onion message handling from milliseconds to seconds, and adds a way for one specific test to keep using a very short timeout. There is no change to production code, no security fix, and no vulnerability.
No security action needed. Treat as a normal test-stability improvement.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch modifies TestConstants.scala to raise onionMessageConfig.timeout from 200 ms/100 ms to 40 s/30 s respectively, and updates PostmanSpec.scala to import quicklens and tag the existing ‘timeout’ test with a custom ‘ShortTimeout’ tag so it can still run with a 1 ms timeout. The production OnionMessageConfig and runtime behavior are untouched.
Changed components
eclair-core/src/test/scala/fr/acinq/eclair/TestConstants.scalaeclair-core/src/test/scala/fr/acinq/eclair/message/PostmanSpec.scalaInspect captured patch +7 / −5
diff --git a/eclair-core/src/test/scala/fr/acinq/eclair/TestConstants.scala b/eclair-core/src/test/scala/fr/acinq/eclair/TestConstants.scala
index 16b12ea..4f43e3a 100644
--- a/eclair-core/src/test/scala/fr/acinq/eclair/TestConstants.scala
+++ b/eclair-core/src/test/scala/fr/acinq/eclair/TestConstants.scala
@@ -248,7 +248,7 @@ object TestConstants {
onionMessageConfig = OnionMessageConfig(
relayPolicy = RelayAll,
minIntermediateHops = 9,
- timeout = 200 millis,
+ timeout = 40 seconds,
maxAttempts = 2,
),
purgeInvoicesInterval = None,
@@ -439,7 +439,7 @@ object TestConstants {
onionMessageConfig = OnionMessageConfig(
relayPolicy = RelayAll,
minIntermediateHops = 8,
- timeout = 100 millis,
+ timeout = 30 seconds,
maxAttempts = 2,
),
purgeInvoicesInterval = None,
diff --git a/eclair-core/src/test/scala/fr/acinq/eclair/message/PostmanSpec.scala b/eclair-core/src/test/scala/fr/acinq/eclair/message/PostmanSpec.scala
index 72f345d..ff30764 100644
--- a/eclair-core/src/test/scala/fr/acinq/eclair/message/PostmanSpec.scala
+++ b/eclair-core/src/test/scala/fr/acinq/eclair/message/PostmanSpec.scala
@@ -20,6 +20,7 @@ import akka.actor.testkit.typed.scaladsl.{ScalaTestWithActorTestKit, TestProbe}
import akka.actor.typed.ActorRef
import akka.actor.typed.eventstream.EventStream
import akka.actor.typed.scaladsl.adapter.TypedActorRefOps
+import com.softwaremill.quicklens.ModifyPimp
import com.typesafe.config.ConfigFactory
import fr.acinq.bitcoin.scalacompat.Block
import fr.acinq.bitcoin.scalacompat.Crypto.{PrivateKey, PublicKey}
@@ -37,8 +38,8 @@ import fr.acinq.eclair.wire.protocol.OnionMessagePayloadTlv.{InvoiceRequest, Rep
import fr.acinq.eclair.wire.protocol.RouteBlindingEncryptedDataTlv.PathId
import fr.acinq.eclair.wire.protocol.{GenericTlv, MessageOnion, OfferTypes, OnionMessage, OnionMessagePayloadTlv, TlvStream}
import fr.acinq.eclair.{EncodedNodeId, Features, MilliSatoshiLong, NodeParams, RealShortChannelId, ShortChannelId, TestConstants, UInt64, randomKey}
-import org.scalatest.Outcome
import org.scalatest.funsuite.FixtureAnyFunSuiteLike
+import org.scalatest.{Outcome, Tag}
import scodec.bits.HexStringSyntax
import scala.annotation.tailrec
@@ -46,10 +47,11 @@ import scala.concurrent.duration.DurationInt
class PostmanSpec extends ScalaTestWithActorTestKit(ConfigFactory.load("application")) with FixtureAnyFunSuiteLike {
+ private val ShortTimeout = "short timeout"
case class FixtureParam(postman: ActorRef[Command], nodeParams: NodeParams, messageSender: TestProbe[OnionMessageResponse], switchboard: TestProbe[Any], offerManager: TestProbe[RequestInvoice], router: TestProbe[Router.PostmanRequest])
override def withFixture(test: OneArgTest): Outcome = {
- val nodeParams = TestConstants.Alice.nodeParams
+ val nodeParams = if (test.tags.contains(ShortTimeout)) TestConstants.Alice.nodeParams.modify(_.onionMessageConfig.timeout).setTo(1 millis) else TestConstants.Alice.nodeParams
val messageSender = TestProbe[OnionMessageResponse]("messageSender")
val switchboard = TestProbe[Any]("switchboard")
val offerManager = TestProbe[RequestInvoice]("offerManager")
@@ -131,7 +133,7 @@ class PostmanSpec extends ScalaTestWithActorTestKit(ConfigFactory.load("applicat
messageSender.expectNoMessage(10 millis)
}
- test("timeout") { f =>
+ test("timeout", Tag(ShortTimeout)) { f =>
import f._
val recipientKey = randomKey()
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.