Merge pull request #646 from naumenkogs/2020-06-router-mpp
[rust-lightning] / fuzz / src / router.rs
index ef7669f1eafd7f477182452fb9006610bd95f2e0..fa1cceb8a16487c45dcd468d4e47b7a13eda047a 100644 (file)
@@ -11,8 +11,6 @@ use bitcoin::blockdata::script::Builder;
 use bitcoin::blockdata::transaction::TxOut;
 use bitcoin::hash_types::BlockHash;
 
-use bitcoin::secp256k1;
-
 use lightning::chain;
 use lightning::ln::channelmanager::ChannelDetails;
 use lightning::ln::features::InitFeatures;
@@ -23,6 +21,8 @@ use lightning::util::ser::Readable;
 use lightning::routing::network_graph::{NetworkGraph, RoutingFees};
 
 use bitcoin::secp256k1::key::PublicKey;
+use bitcoin::network::constants::Network;
+use bitcoin::blockdata::constants::genesis_block;
 
 use utils::test_logger;
 
@@ -120,24 +120,27 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
                ($MsgType: path, $len: expr) => {{
                        let mut reader = ::std::io::Cursor::new(get_slice!($len));
                        match <$MsgType>::read(&mut reader) {
-                               Ok(msg) => msg,
+                               Ok(msg) => {
+                                       assert_eq!(reader.position(), $len as u64);
+                                       msg
+                               },
                                Err(e) => match e {
                                        msgs::DecodeError::UnknownVersion => return,
                                        msgs::DecodeError::UnknownRequiredFeature => return,
                                        msgs::DecodeError::InvalidValue => return,
                                        msgs::DecodeError::BadLengthDescriptor => return,
                                        msgs::DecodeError::ShortRead => panic!("We picked the length..."),
-                                       msgs::DecodeError::Io(e) => panic!(format!("{}", e)),
+                                       msgs::DecodeError::Io(e) => panic!(format!("{:?}", e)),
                                }
                        }
                }}
        }
 
        macro_rules! decode_msg_with_len16 {
-               ($MsgType: path, $begin_len: expr, $excess: expr) => {
+               ($MsgType: path, $excess: expr) => {
                        {
-                               let extra_len = slice_to_be16(&get_slice_nonadvancing!($begin_len as usize + 2)[$begin_len..$begin_len + 2]);
-                               decode_msg!($MsgType, $begin_len as usize + 2 + (extra_len as usize) + $excess)
+                               let extra_len = slice_to_be16(get_slice_nonadvancing!(2));
+                               decode_msg!($MsgType, 2 + (extra_len as usize) + $excess)
                        }
                }
        }
@@ -154,7 +157,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
        let logger: Arc<dyn Logger> = Arc::new(test_logger::TestLogger::new("".to_owned(), out));
 
        let our_pubkey = get_pubkey!();
-       let mut net_graph = NetworkGraph::new();
+       let mut net_graph = NetworkGraph::new(genesis_block(Network::Bitcoin).header.block_hash());
 
        let mut node_pks = HashSet::new();
        let mut scid = 42;
@@ -162,30 +165,29 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
        loop {
                match get_slice!(1)[0] {
                        0 => {
-                               let start_len = slice_to_be16(&get_slice_nonadvancing!(64 + 2)[64..64 + 2]) as usize;
-                               let addr_len = slice_to_be16(&get_slice_nonadvancing!(64+start_len+2 + 74)[64+start_len+2 + 72..64+start_len+2 + 74]);
+                               let start_len = slice_to_be16(&get_slice_nonadvancing!(2)[0..2]) as usize;
+                               let addr_len = slice_to_be16(&get_slice_nonadvancing!(start_len+2 + 74)[start_len+2 + 72..start_len+2 + 74]);
                                if addr_len > (37+1)*4 {
                                        return;
                                }
-                               let msg = decode_msg_with_len16!(msgs::NodeAnnouncement, 64, 288);
-                               node_pks.insert(msg.contents.node_id);
-                               let _ = net_graph.update_node_from_announcement::<secp256k1::VerifyOnly>(&msg, None);
+                               let msg = decode_msg_with_len16!(msgs::UnsignedNodeAnnouncement, 288);
+                               node_pks.insert(msg.node_id);
+                               let _ = net_graph.update_node_from_unsigned_announcement(&msg);
                        },
                        1 => {
-                               let msg = decode_msg_with_len16!(msgs::ChannelAnnouncement, 64*4, 32+8+33*4);
-                               node_pks.insert(msg.contents.node_id_1);
-                               node_pks.insert(msg.contents.node_id_2);
-                               let _ = net_graph.update_channel_from_announcement::<secp256k1::VerifyOnly>(&msg, None, None);
+                               let msg = decode_msg_with_len16!(msgs::UnsignedChannelAnnouncement, 32+8+33*4);
+                               node_pks.insert(msg.node_id_1);
+                               node_pks.insert(msg.node_id_2);
+                               let _ = net_graph.update_channel_from_unsigned_announcement::<&FuzzChainSource>(&msg, &None);
                        },
                        2 => {
-                               let msg = decode_msg_with_len16!(msgs::ChannelAnnouncement, 64*4, 32+8+33*4);
-                               node_pks.insert(msg.contents.node_id_1);
-                               node_pks.insert(msg.contents.node_id_2);
-                               let val = slice_to_be64(get_slice!(8));
-                               let _ = net_graph.update_channel_from_announcement::<secp256k1::VerifyOnly>(&msg, Some(val), None);
+                               let msg = decode_msg_with_len16!(msgs::UnsignedChannelAnnouncement, 32+8+33*4);
+                               node_pks.insert(msg.node_id_1);
+                               node_pks.insert(msg.node_id_2);
+                               let _ = net_graph.update_channel_from_unsigned_announcement(&msg, &Some(&FuzzChainSource { input: Arc::clone(&input) }));
                        },
                        3 => {
-                               let _ = net_graph.update_channel(&decode_msg!(msgs::ChannelUpdate, 136), None);
+                               let _ = net_graph.update_channel_unsigned(&decode_msg!(msgs::UnsignedChannelUpdate, 72));
                        },
                        4 => {
                                let short_channel_id = slice_to_be64(get_slice!(8));
@@ -229,7 +231,8 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
                                                                proportional_millionths: slice_to_be32(get_slice!(4)),
                                                        },
                                                        cltv_expiry_delta: slice_to_be16(get_slice!(2)),
-                                                       htlc_minimum_msat: slice_to_be64(get_slice!(8)),
+                                                       htlc_minimum_msat: Some(slice_to_be64(get_slice!(8))),
+                                                       htlc_maximum_msat: None,
                                                });
                                        }
                                }