### Question:
PongPacketData implements PacketData { public static PongPacketData readFrom(final RLPInput in) { in.enterList(); final Endpoint to = Endpoint.decodeStandalone(in); final Bytes hash = in.readBytes(); final long expiration = in.readLongScalar(); in.leaveListLenient(); return new PongPacketData(to, hash, expiration); } private  PongPacketData(final Endpoint to, final Bytes pingHash, final long expiration); static PongPacketData create(final Endpoint to, final Bytes pingHash); static PongPacketData readFrom(final RLPInput in); @Override void writeTo(final RLPOutput out); @Override String toString(); Endpoint getTo(); Bytes getPingHash(); long getExpiration();  }### Answer:
@Test public void readFrom() { final long time = System.currentTimeMillis(); final Endpoint to = new Endpoint("127.0.0.2", 30303, Optional.empty()); final Bytes32 hash = Bytes32.fromHexStringLenient("0x1234"); BytesValueRLPOutput out = new BytesValueRLPOutput(); out.startList(); to.encodeStandalone(out); out.writeBytes(hash); out.writeLongScalar(time); out.endList(); final Bytes encoded = out.encoded(); final PongPacketData deserialized = PongPacketData.readFrom(RLP.input(encoded)); assertThat(deserialized.getTo()).isEqualTo(to); assertThat(deserialized.getPingHash()).isEqualTo(hash); assertThat(deserialized.getExpiration()).isEqualTo(time); }