mirror of
https://github.com/ACINQ/eclair.git
synced 2025-02-22 22:25:26 +01:00
Add json serializers for NodeAddress
and Direction
(#570)
* Enable and fix failing test (#565) * Add json serializers for `NodeAddress` type (#565) * Add json serializers for `Direction` type (#565)
This commit is contained in:
parent
410e005703
commit
64afc38709
3 changed files with 47 additions and 10 deletions
|
@ -24,8 +24,9 @@ import fr.acinq.bitcoin.{BinaryData, OutPoint, Transaction}
|
|||
import fr.acinq.eclair.channel.State
|
||||
import fr.acinq.eclair.crypto.ShaChain
|
||||
import fr.acinq.eclair.router.RouteResponse
|
||||
import fr.acinq.eclair.transactions.Direction
|
||||
import fr.acinq.eclair.transactions.Transactions.{InputInfo, TransactionWithInputInfo}
|
||||
import fr.acinq.eclair.wire.{Color, FailureMessage}
|
||||
import fr.acinq.eclair.wire._
|
||||
import fr.acinq.eclair.{ShortChannelId, UInt64}
|
||||
import org.json4s.JsonAST._
|
||||
import org.json4s.{CustomKeySerializer, CustomSerializer}
|
||||
|
@ -115,3 +116,15 @@ class ThrowableSerializer extends CustomSerializer[Throwable](format => ({ null
|
|||
class FailureMessageSerializer extends CustomSerializer[FailureMessage](format => ({ null }, {
|
||||
case m: FailureMessage => JString(m.message)
|
||||
}))
|
||||
|
||||
class NodeAddressSerializer extends CustomSerializer[NodeAddress](format => ({ null},{
|
||||
case IPv4(a, p) => JString(HostAndPort.fromParts(a.getHostAddress, p).toString)
|
||||
case IPv6(a, p) => JString(HostAndPort.fromParts(a.getHostAddress, p).toString)
|
||||
case Tor2(b, p) => JString(s"${b.toString}:$p")
|
||||
case Tor3(b, p) => JString(s"${b.toString}:$p")
|
||||
}))
|
||||
|
||||
class DirectionSerializer extends CustomSerializer[Direction](format => ({ null },{
|
||||
case d: Direction => JString(d.toString)
|
||||
}))
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ trait Service extends Logging {
|
|||
def scheduler: Scheduler
|
||||
|
||||
implicit val serialization = jackson.Serialization
|
||||
implicit val formats = org.json4s.DefaultFormats + new BinaryDataSerializer + new UInt64Serializer + new ShortChannelIdSerializer + new StateSerializer + new ShaChainSerializer + new PublicKeySerializer + new PrivateKeySerializer + new ScalarSerializer + new PointSerializer + new TransactionSerializer + new TransactionWithInputInfoSerializer + new InetSocketAddressSerializer + new OutPointSerializer + new OutPointKeySerializer + new InputInfoSerializer + new ColorSerializer + new RouteResponseSerializer + new ThrowableSerializer + new FailureMessageSerializer
|
||||
implicit val formats = org.json4s.DefaultFormats + new BinaryDataSerializer + new UInt64Serializer + new ShortChannelIdSerializer + new StateSerializer + new ShaChainSerializer + new PublicKeySerializer + new PrivateKeySerializer + new ScalarSerializer + new PointSerializer + new TransactionSerializer + new TransactionWithInputInfoSerializer + new InetSocketAddressSerializer + new OutPointSerializer + new OutPointKeySerializer + new InputInfoSerializer + new ColorSerializer + new RouteResponseSerializer + new ThrowableSerializer + new FailureMessageSerializer + new NodeAddressSerializer + new DirectionSerializer
|
||||
implicit val timeout = Timeout(60 seconds)
|
||||
implicit val shouldWritePretty: ShouldWritePretty = ShouldWritePretty.True
|
||||
|
||||
|
|
|
@ -16,17 +16,27 @@
|
|||
|
||||
package fr.acinq.eclair.api
|
||||
|
||||
import fr.acinq.bitcoin.{BinaryData, OutPoint}
|
||||
import org.json4s.Formats
|
||||
import org.json4s.jackson.Serialization
|
||||
import org.scalatest.FunSuite
|
||||
import java.net.{InetAddress, InetSocketAddress}
|
||||
|
||||
class JsonSerializersSpec extends FunSuite {
|
||||
import fr.acinq.bitcoin.{BinaryData, OutPoint}
|
||||
import fr.acinq.eclair.transactions.{IN, OUT}
|
||||
import fr.acinq.eclair.wire.NodeAddress
|
||||
import org.json4s.jackson.Serialization
|
||||
import org.junit.runner.RunWith
|
||||
import org.scalatest.junit.JUnitRunner
|
||||
import org.scalatest.{FunSuite, Matchers}
|
||||
|
||||
@RunWith(classOf[JUnitRunner])
|
||||
class JsonSerializersSpec extends FunSuite with Matchers {
|
||||
|
||||
test("deserialize Map[OutPoint, BinaryData]") {
|
||||
val output1 = OutPoint("11418a2d282a40461966e4f578e1fdf633ad15c1b7fb3e771d14361127233be1", 0)
|
||||
val output2 = OutPoint("3d62bd4f71dc63798418e59efbc7532380c900b5e79db3a5521374b161dd0e33", 1)
|
||||
|
||||
|
||||
val map = Map(
|
||||
OutPoint("11418a2d282a40461966e4f578e1fdf633ad15c1b7fb3e771d14361127233be1", 0) -> BinaryData("dead"),
|
||||
OutPoint("3d62bd4f71dc63798418e59efbc7532380c900b5e79db3a5521374b161dd0e33", 1) -> BinaryData("beef")
|
||||
output1 -> BinaryData("dead"),
|
||||
output2 -> BinaryData("beef")
|
||||
)
|
||||
|
||||
// it won't work with the default key serializer
|
||||
|
@ -37,6 +47,20 @@ class JsonSerializersSpec extends FunSuite {
|
|||
|
||||
// but it works with our custom key serializer
|
||||
val json = Serialization.write(map)(org.json4s.DefaultFormats + new BinaryDataSerializer + new OutPointKeySerializer)
|
||||
assert(json === """{"11418a2d282a40461966e4f578e1fdf633ad15c1b7fb3e771d14361127233be1:0":"dead","3d62bd4f71dc63798418e59efbc7532380c900b5e79db3a5521374b161dd0e33:1":"beef"}""")
|
||||
assert(json === s"""{"${output1.txid}:0":"dead","${output2.txid}:1":"beef"}""")
|
||||
}
|
||||
|
||||
test("NodeAddress serialization") {
|
||||
val ipv4 = NodeAddress(new InetSocketAddress(InetAddress.getByAddress(Array(10, 0, 0, 1)), 8888))
|
||||
val ipv6LocalHost = NodeAddress(new InetSocketAddress(InetAddress.getByAddress(Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)), 9735))
|
||||
|
||||
Serialization.write(ipv4)(org.json4s.DefaultFormats + new NodeAddressSerializer) shouldBe s""""10.0.0.1:8888""""
|
||||
Serialization.write(ipv6LocalHost)(org.json4s.DefaultFormats + new NodeAddressSerializer) shouldBe s""""[0:0:0:0:0:0:0:1]:9735""""
|
||||
}
|
||||
|
||||
test("Direction serialization") {
|
||||
Serialization.write(IN)(org.json4s.DefaultFormats + new DirectionSerializer) shouldBe s""""IN""""
|
||||
Serialization.write(OUT)(org.json4s.DefaultFormats + new DirectionSerializer) shouldBe s""""OUT""""
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue