Use alloc for no_std builds
[rust-lightning] / lightning / src / ln / functional_test_utils.rs
index 78fd0644ccb7b1a47123cb77174239fb0c3c32a1..2b276c92898b85b21cf13941a2ae33e40861644d 100644 (file)
@@ -23,7 +23,7 @@ use ln::msgs::{ChannelMessageHandler,RoutingMessageHandler};
 use util::enforcing_trait_impls::EnforcingSigner;
 use util::test_utils;
 use util::test_utils::TestChainMonitor;
-use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
+use util::events::{Event, MessageSendEvent, MessageSendEventsProvider};
 use util::errors::APIError;
 use util::config::UserConfig;
 use util::ser::{ReadableArgs, Writeable, Readable};
@@ -39,10 +39,11 @@ use bitcoin::hash_types::BlockHash;
 
 use bitcoin::secp256k1::key::PublicKey;
 
-use std::cell::RefCell;
+use prelude::*;
+use core::cell::RefCell;
 use std::rc::Rc;
 use std::sync::Mutex;
-use std::mem;
+use core::mem;
 use std::collections::HashMap;
 
 pub const CHAN_CONFIRM_DEPTH: u32 = 10;
@@ -557,7 +558,7 @@ pub fn create_chan_between_nodes_with_value_confirm_second<'a, 'b, 'c>(node_recv
 }
 
 pub fn create_chan_between_nodes_with_value_confirm<'a, 'b, 'c, 'd>(node_a: &'a Node<'b, 'c, 'd>, node_b: &'a Node<'b, 'c, 'd>, tx: &Transaction) -> ((msgs::FundingLocked, msgs::AnnouncementSignatures), [u8; 32]) {
-       let conf_height = std::cmp::max(node_a.best_block_info().1 + 1, node_b.best_block_info().1 + 1);
+       let conf_height = core::cmp::max(node_a.best_block_info().1 + 1, node_b.best_block_info().1 + 1);
        create_chan_between_nodes_with_value_confirm_first(node_a, node_b, tx, conf_height);
        confirm_transaction_at(node_a, tx, conf_height);
        connect_blocks(node_a, CHAN_CONFIRM_DEPTH - 1);
@@ -615,8 +616,22 @@ pub fn create_announced_chan_between_nodes_with_value<'a, 'b, 'c, 'd>(nodes: &'a
 pub fn update_nodes_with_chan_announce<'a, 'b, 'c, 'd>(nodes: &'a Vec<Node<'b, 'c, 'd>>, a: usize, b: usize, ann: &msgs::ChannelAnnouncement, upd_1: &msgs::ChannelUpdate, upd_2: &msgs::ChannelUpdate) {
        nodes[a].node.broadcast_node_announcement([0, 0, 0], [0; 32], Vec::new());
        let a_events = nodes[a].node.get_and_clear_pending_msg_events();
-       assert_eq!(a_events.len(), 1);
-       let a_node_announcement = match a_events[0] {
+       assert!(a_events.len() >= 2);
+
+       // ann should be re-generated by broadcast_node_announcement - check that we have it.
+       let mut found_ann_1 = false;
+       for event in a_events.iter() {
+               match event {
+                       MessageSendEvent::BroadcastChannelAnnouncement { ref msg, .. } => {
+                               if msg == ann { found_ann_1 = true; }
+                       },
+                       MessageSendEvent::BroadcastNodeAnnouncement { .. } => {},
+                       _ => panic!("Unexpected event {:?}", event),
+               }
+       }
+       assert!(found_ann_1);
+
+       let a_node_announcement = match a_events.last().unwrap() {
                MessageSendEvent::BroadcastNodeAnnouncement { ref msg } => {
                        (*msg).clone()
                },
@@ -625,8 +640,22 @@ pub fn update_nodes_with_chan_announce<'a, 'b, 'c, 'd>(nodes: &'a Vec<Node<'b, '
 
        nodes[b].node.broadcast_node_announcement([1, 1, 1], [1; 32], Vec::new());
        let b_events = nodes[b].node.get_and_clear_pending_msg_events();
-       assert_eq!(b_events.len(), 1);
-       let b_node_announcement = match b_events[0] {
+       assert!(b_events.len() >= 2);
+
+       // ann should be re-generated by broadcast_node_announcement - check that we have it.
+       let mut found_ann_2 = false;
+       for event in b_events.iter() {
+               match event {
+                       MessageSendEvent::BroadcastChannelAnnouncement { ref msg, .. } => {
+                               if msg == ann { found_ann_2 = true; }
+                       },
+                       MessageSendEvent::BroadcastNodeAnnouncement { .. } => {},
+                       _ => panic!("Unexpected event"),
+               }
+       }
+       assert!(found_ann_2);
+
+       let b_node_announcement = match b_events.last().unwrap() {
                MessageSendEvent::BroadcastNodeAnnouncement { ref msg } => {
                        (*msg).clone()
                },
@@ -1515,6 +1544,11 @@ macro_rules! handle_chan_reestablish_msgs {
                                None
                        };
 
+                       if let Some(&MessageSendEvent::SendAnnouncementSignatures { ref node_id, msg: _ }) = msg_events.get(idx) {
+                               idx += 1;
+                               assert_eq!(*node_id, $dst_node.node.get_our_node_id());
+                       }
+
                        let mut revoke_and_ack = None;
                        let mut commitment_update = None;
                        let order = if let Some(ev) = msg_events.get(idx) {