Skip to content

Commit 04b677c

Browse files
committed
Add test for NodeInfo
1 parent 8bb7c01 commit 04b677c

File tree

1 file changed

+44
-3
lines changed

1 file changed

+44
-3
lines changed

lightning/src/routing/gossip.rs

+44-3
Original file line numberDiff line numberDiff line change
@@ -1109,7 +1109,7 @@ impl MaybeReadable for NodeAnnouncementInfoDeserWrapper {
11091109
fn read<R: io::Read>(reader: &mut R) -> Result<Option<Self>, DecodeError> {
11101110
match ::util::ser::Readable::read(reader) {
11111111
Ok(node_announcement) => Ok(Some(Self(node_announcement))),
1112-
Err(DecodeError::ShortRead) => Ok(None),
1112+
Err(DecodeError::InvalidValue) => Ok(None),
11131113
Err(err) => Err(err),
11141114
}
11151115
}
@@ -1822,7 +1822,7 @@ mod tests {
18221822
use chain;
18231823
use ln::PaymentHash;
18241824
use ln::features::{ChannelFeatures, InitFeatures, NodeFeatures};
1825-
use routing::gossip::{P2PGossipSync, NetworkGraph, NetworkUpdate, NodeAlias, MAX_EXCESS_BYTES_FOR_RELAY, NodeId, RoutingFees, ChannelUpdateInfo, ChannelInfo};
1825+
use routing::gossip::{P2PGossipSync, NetworkGraph, NetworkUpdate, NodeAlias, MAX_EXCESS_BYTES_FOR_RELAY, NodeId, RoutingFees, ChannelUpdateInfo, ChannelInfo, NodeAnnouncementInfo, NodeInfo};
18261826
use ln::msgs::{Init, RoutingMessageHandler, UnsignedNodeAnnouncement, NodeAnnouncement,
18271827
UnsignedChannelAnnouncement, ChannelAnnouncement, UnsignedChannelUpdate, ChannelUpdate,
18281828
ReplyChannelRange, QueryChannelRange, QueryShortChannelIds, MAX_VALUE_MSAT};
@@ -2950,7 +2950,7 @@ mod tests {
29502950
}
29512951

29522952
#[test]
2953-
fn written_channel_info_is_readable() {
2953+
fn channel_info_is_readable() {
29542954
let chanmon_cfgs = ::ln::functional_test_utils::create_chanmon_cfgs(2);
29552955
let node_cfgs = ::ln::functional_test_utils::create_node_cfgs(2, &chanmon_cfgs);
29562956
let node_chanmgrs = ::ln::functional_test_utils::create_node_chanmgrs(2, &node_cfgs, &[None, None, None, None]);
@@ -3043,6 +3043,47 @@ mod tests {
30433043
assert_eq!(read_chan_info.one_to_two, None);
30443044
assert_eq!(read_chan_info.two_to_one, None);
30453045
}
3046+
3047+
#[test]
3048+
fn node_info_is_readable() {
3049+
use std::convert::TryFrom;
3050+
3051+
// 1. Check we can read a valid NodeAnnouncementInfo and fail on an invalid one
3052+
let valid_netaddr = ::ln::msgs::NetAddress::Hostname { hostname: ::util::ser::Hostname::try_from("A".to_string()).unwrap(), port: 1234 };
3053+
let valid_node_ann_info = NodeAnnouncementInfo {
3054+
features: NodeFeatures::known(),
3055+
last_update: 0,
3056+
rgb: [0u8; 3],
3057+
alias: NodeAlias([0u8; 32]),
3058+
addresses: vec![valid_netaddr],
3059+
announcement_message: None,
3060+
};
3061+
3062+
let mut encoded_valid_node_ann_info = Vec::new();
3063+
assert!(valid_node_ann_info.write(&mut encoded_valid_node_ann_info).is_ok());
3064+
let read_valid_node_ann_info: NodeAnnouncementInfo = ::util::ser::Readable::read(&mut encoded_valid_node_ann_info.as_slice()).unwrap();
3065+
assert_eq!(read_valid_node_ann_info, valid_node_ann_info);
3066+
3067+
let encoded_invalid_node_ann_info = hex::decode("3f0009000788a000080a51a20204000000000403000000062000000000000000000000000000000000000000000000000000000000000000000a0505014004d2").unwrap();
3068+
let read_invalid_node_ann_info_res: Result<NodeAnnouncementInfo, ::ln::msgs::DecodeError> = ::util::ser::Readable::read(&mut encoded_invalid_node_ann_info.as_slice());
3069+
assert!(read_invalid_node_ann_info_res.is_err());
3070+
3071+
// 2. Check we can read a NodeInfo anyways, but set the NodeAnnouncementInfo to None if invalid
3072+
let valid_node_info = NodeInfo {
3073+
channels: Vec::new(),
3074+
lowest_inbound_channel_fees: None,
3075+
announcement_info: Some(valid_node_ann_info),
3076+
};
3077+
3078+
let mut encoded_valid_node_info = Vec::new();
3079+
assert!(valid_node_info.write(&mut encoded_valid_node_info).is_ok());
3080+
let read_valid_node_info: NodeInfo = ::util::ser::Readable::read(&mut encoded_valid_node_info.as_slice()).unwrap();
3081+
assert_eq!(read_valid_node_info, valid_node_info);
3082+
3083+
let encoded_invalid_node_info_hex = hex::decode("4402403f0009000788a000080a51a20204000000000403000000062000000000000000000000000000000000000000000000000000000000000000000a0505014004d20400").unwrap();
3084+
let read_invalid_node_info: NodeInfo = ::util::ser::Readable::read(&mut encoded_invalid_node_info_hex.as_slice()).unwrap();
3085+
assert_eq!(read_invalid_node_info.announcement_info, None);
3086+
}
30463087
}
30473088

30483089
#[cfg(all(test, feature = "_bench_unstable"))]

0 commit comments

Comments
 (0)