resolve PeerInfo deserialize error (#168)

This commit is contained in:
quake wang
2018-04-18 17:39:42 +09:00
committed by Pierre Krieger
parent 96747441fc
commit 590bc91d59
3 changed files with 46 additions and 1 deletions

View File

@ -16,3 +16,4 @@ serde_derive = "1.0"
[dev-dependencies] [dev-dependencies]
multihash = "0.7.0" multihash = "0.7.0"
tempfile = "2.2" tempfile = "2.2"
serde_json = "1.0"

View File

@ -142,4 +142,27 @@ mod tests {
{::json_peerstore::JsonPeerstore::new(temp_file.path()).unwrap()} {::json_peerstore::JsonPeerstore::new(temp_file.path()).unwrap()}
{let temp_file = self::tempfile::NamedTempFile::new().unwrap()} {let temp_file = self::tempfile::NamedTempFile::new().unwrap()}
); );
#[test]
fn reload() {
let temp_file = self::tempfile::NamedTempFile::new().unwrap();
let peer_store = ::json_peerstore::JsonPeerstore::new(temp_file.path()).unwrap();
let peer_id = PeerId::from_public_key(&[1, 2, 3]);
let addr = "/ip4/0.0.0.0/tcp/0".parse::<Multiaddr>().unwrap();
peer_store
.peer_or_create(&peer_id)
.add_addr(addr.clone(), Duration::from_millis(5000));
peer_store.flush().unwrap();
drop(peer_store);
let peer_store = ::json_peerstore::JsonPeerstore::new(temp_file.path()).unwrap();
let addrs = peer_store
.peer(&peer_id)
.unwrap()
.addrs()
.collect::<Vec<_>>();
assert_eq!(addrs, &[addr]);
}
} }

View File

@ -116,7 +116,7 @@ impl Serialize for PeerInfo {
&self.addrs &self.addrs
.iter() .iter()
.map(|&(ref addr, ref expires)| { .map(|&(ref addr, ref expires)| {
let addr = addr.to_bytes(); let addr = addr.to_string();
let from_epoch = expires.duration_since(UNIX_EPOCH) let from_epoch = expires.duration_since(UNIX_EPOCH)
// This `unwrap_or` case happens if the user has their system time set to // This `unwrap_or` case happens if the user has their system time set to
// before EPOCH. Times-to-live will be be longer than expected, but it's a very // before EPOCH. Times-to-live will be be longer than expected, but it's a very
@ -177,3 +177,24 @@ impl PartialOrd for PeerInfo {
None None
} }
} }
#[cfg(test)]
mod tests {
extern crate serde_json;
use super::*;
#[test]
fn ser_and_deser() {
let peer_info = PeerInfo {
addrs: vec![
(
"/ip4/0.0.0.0/tcp/0".parse::<Multiaddr>().unwrap(),
UNIX_EPOCH,
),
],
};
let serialized = serde_json::to_string(&peer_info).unwrap();
let deserialized: PeerInfo = serde_json::from_str(&serialized).unwrap();
assert_eq!(peer_info, deserialized);
}
}