diff --git a/eclair-core/src/test/scala/fr/acinq/eclair/wire/CommandCodecsSpec.scala b/eclair-core/src/test/scala/fr/acinq/eclair/wire/CommandCodecsSpec.scala index 7d8a7fc31..7d82bd95b 100644 --- a/eclair-core/src/test/scala/fr/acinq/eclair/wire/CommandCodecsSpec.scala +++ b/eclair-core/src/test/scala/fr/acinq/eclair/wire/CommandCodecsSpec.scala @@ -17,8 +17,14 @@ package fr.acinq.eclair.wire import fr.acinq.eclair.channel._ +import fr.acinq.eclair.wire.CommonCodecs.{bytes32, varsizebinarydata} +import fr.acinq.eclair.wire.FailureMessageCodecs.failureMessageCodec import fr.acinq.eclair.{randomBytes, randomBytes32} import org.scalatest.funsuite.AnyFunSuite +import scodec.DecodeResult +import scodec.bits.BitVector +import scodec.codecs._ +import shapeless.HNil /** * Created by PM on 31/05/2016. @@ -40,4 +46,32 @@ class CommandCodecsSpec extends AnyFunSuite { assert(msg === decoded.value) } } + + test("backward compatibility") { + + val data32 = randomBytes32 + val data123 = randomBytes(123) + + val legacyCmdFulfillCodec = + (("id" | int64) :: + ("r" | bytes32) :: + ("commit" | provide(false))) + assert(CommandCodecs.cmdFulfillCodec.decode(legacyCmdFulfillCodec.encode(42 :: data32 :: true :: HNil).require).require === + DecodeResult(CMD_FULFILL_HTLC(42, data32, commit = false, None), BitVector.empty)) + + val legacyCmdFailCodec = + (("id" | int64) :: + ("reason" | either(bool, varsizebinarydata, failureMessageCodec)) :: + ("commit" | provide(false))) + assert(CommandCodecs.cmdFailCodec.decode(legacyCmdFailCodec.encode(42 :: Left(data123) :: true :: HNil).require).require === + DecodeResult(CMD_FAIL_HTLC(42, Left(data123), commit = false, None), BitVector.empty)) + + val legacyCmdFailMalformedCodec = + (("id" | int64) :: + ("onionHash" | bytes32) :: + ("failureCode" | uint16) :: + ("commit" | provide(false))) + assert(CommandCodecs.cmdFailMalformedCodec.decode(legacyCmdFailMalformedCodec.encode(42 :: data32 :: 456 :: true :: HNil).require).require === + DecodeResult(CMD_FAIL_MALFORMED_HTLC(42, data32, 456, commit = false, None), BitVector.empty)) + } } diff --git a/eclair-core/src/test/scala/fr/acinq/eclair/wire/CommonCodecsSpec.scala b/eclair-core/src/test/scala/fr/acinq/eclair/wire/CommonCodecsSpec.scala index 285158483..0af72f2d7 100644 --- a/eclair-core/src/test/scala/fr/acinq/eclair/wire/CommonCodecsSpec.scala +++ b/eclair-core/src/test/scala/fr/acinq/eclair/wire/CommonCodecsSpec.scala @@ -20,12 +20,16 @@ import java.net.{Inet4Address, Inet6Address, InetAddress} import com.google.common.net.InetAddresses import fr.acinq.bitcoin.ByteVector32 +import fr.acinq.bitcoin._ import fr.acinq.bitcoin.Crypto.PrivateKey +import fr.acinq.eclair.blockchain.fee.FeeratePerKw import fr.acinq.eclair.crypto.Hmac256 import fr.acinq.eclair.wire.CommonCodecs._ import fr.acinq.eclair.{UInt64, randomBytes32} import org.scalatest.funsuite.AnyFunSuite +import scodec.DecodeResult import scodec.bits.{BitVector, HexStringSyntax} +import scodec.codecs.uint32 /** * Created by t-bast on 20/06/2019. @@ -251,4 +255,10 @@ class CommonCodecsSpec extends AnyFunSuite { } } + test("backward compatibility on feerate codec") { + val value = 123456 + val feerate = FeeratePerKw(value sat) + assert(feeratePerKw.decode(uint32.encode(value).require).require === DecodeResult(feerate, BitVector.empty)) + } + }