Skip to content

Commit b20a26a

Browse files
committed
Better JSON handling in test
1 parent e15ae71 commit b20a26a

File tree

1 file changed

+15
-16
lines changed

1 file changed

+15
-16
lines changed

eclair-core/src/test/scala/fr/acinq/eclair/crypto/SphinxSpec.scala

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ import fr.acinq.eclair.crypto.Sphinx.RouteBlinding.{BlindedRoute, BlindedRouteDe
2222
import fr.acinq.eclair.wire.protocol
2323
import fr.acinq.eclair.wire.protocol._
2424
import fr.acinq.eclair.{BlockHeight, CltvExpiry, CltvExpiryDelta, MilliSatoshiLong, ShortChannelId, UInt64, randomBytes, randomKey}
25-
import fr.acinq.eclair.{CltvExpiry, CltvExpiryDelta, MilliSatoshiLong, ShortChannelId, UInt64, randomBytes, randomKey}
26-
import org.json4s.JsonAST._
25+
import org.json4s.DefaultFormats
2726
import org.json4s.jackson.JsonMethods
2827
import org.scalatest.funsuite.AnyFunSuite
2928
import scodec.bits._
@@ -453,22 +452,22 @@ class SphinxSpec extends AnyFunSuite {
453452
assert(decryptionError == expected)
454453
}
455454

455+
case class TestVector(encodedFailureMessage: String, hops: Seq[TestHop])
456+
case class TestHop(sharedSecret: String, encryptedMessage: String)
457+
implicit val formats: DefaultFormats.type = DefaultFormats
458+
456459
test("attributable error test vector") {
457460
val src = Source.fromFile(new File(getClass.getResource(s"/attributable_error.json").getFile))
458-
try {
459-
val testVector = JsonMethods.parse(src.mkString).asInstanceOf[JObject].values
460-
val encodedFailureMessage = ByteVector.fromValidHex(testVector("encodedFailureMessage").asInstanceOf[String])
461-
val expected = FailureMessageCodecs.failureOnionPayload(0).decode(encodedFailureMessage.bits).require.value
462-
val hops = testVector("hops").asInstanceOf[List[Map[String, String]]]
463-
val sharedSecrets = hops.map(hop => ByteVector32(ByteVector.fromValidHex(hop("sharedSecret")))).reverse
464-
val encryptedMessage = hops.map(hop => ByteVector.fromValidHex(hop("encryptedMessage"))).last
465-
val nodeIds = (1 to 5).map(_ => randomKey().publicKey)
466-
val Right(DecryptedFailurePacket(originNode, failureMessage)) = AttributableErrorPacket.decrypt(encryptedMessage, sharedSecrets.zip(nodeIds))
467-
assert(originNode == nodeIds.last)
468-
assert(failureMessage == expected)
469-
} finally {
470-
src.close()
471-
}
461+
val testVector = JsonMethods.parse(src.mkString).extract[TestVector]
462+
src.close()
463+
val encodedFailureMessage = ByteVector.fromValidHex(testVector.encodedFailureMessage)
464+
val expected = FailureMessageCodecs.failureOnionPayload(0).decode(encodedFailureMessage.bits).require.value
465+
val sharedSecrets = testVector.hops.map(hop => ByteVector32(ByteVector.fromValidHex(hop.sharedSecret))).reverse
466+
val encryptedMessage = testVector.hops.map(hop => ByteVector.fromValidHex(hop.encryptedMessage)).last
467+
val nodeIds = (1 to testVector.hops.length).map(_ => randomKey().publicKey)
468+
val Right(DecryptedFailurePacket(originNode, failureMessage)) = AttributableErrorPacket.decrypt(encryptedMessage, sharedSecrets.zip(nodeIds))
469+
assert(originNode == nodeIds.last)
470+
assert(failureMessage == expected)
472471
}
473472

474473
test("create blinded route (reference test vector)") {

0 commit comments

Comments
 (0)