Onion message payload for BOLT 12 Offers
[rust-lightning] / lightning / src / onion_message / functional_tests.rs
index e7cf4e87d9f952703c1273c00de14800ea6e6f2e..96e0c44b2ce8f31f77d1c5fcd936998b229be1eb 100644 (file)
@@ -110,7 +110,7 @@ fn create_nodes(num_messengers: u8) -> Vec<MessengerNode> {
                let i = idx as usize;
                let mut features = InitFeatures::empty();
                features.set_onion_messages_optional();
-               let init_msg = msgs::Init { features, remote_network_address: None };
+               let init_msg = msgs::Init { features, networks: None, remote_network_address: None };
                nodes[i].messenger.peer_connected(&nodes[i + 1].get_node_pk(), &init_msg.clone(), true).unwrap();
                nodes[i + 1].messenger.peer_connected(&nodes[i].get_node_pk(), &init_msg.clone(), false).unwrap();
        }
@@ -284,3 +284,20 @@ fn peer_buffer_full() {
        let err = nodes[0].messenger.send_onion_message(&[], Destination::Node(nodes[1].get_node_pk()), OnionMessageContents::Custom(test_msg), None).unwrap_err();
        assert_eq!(err, SendError::BufferFull);
 }
+
+#[test]
+fn many_hops() {
+       // Check we can send over a route with many hops. This will exercise our logic for onion messages
+       // of size [`crate::onion_message::packet::BIG_PACKET_HOP_DATA_LEN`].
+       let num_nodes: usize = 25;
+       let nodes = create_nodes(num_nodes as u8);
+       let test_msg = OnionMessageContents::Custom(TestCustomMessage {});
+
+       let mut intermediates = vec![];
+       for i in 1..(num_nodes-1) {
+               intermediates.push(nodes[i].get_node_pk());
+       }
+
+       nodes[0].messenger.send_onion_message(&intermediates, Destination::Node(nodes[num_nodes-1].get_node_pk()), test_msg, None).unwrap();
+       pass_along_path(&nodes);
+}