Merge pull request #593 from TheBlueMatt/2020-04-par-fuzz-check
[rust-lightning] / fuzz / src / full_stack.rs
index b3317fc416b1775e7107934cc981eb269836366b..c759094306a8e3df666963d4050c11f3fa55bb82 100644 (file)
@@ -401,7 +401,28 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
                                sha.input(&payment_hash.0[..]);
                                payment_hash.0 = Sha256::from_engine(sha).into_inner();
                                payments_sent += 1;
-                               match channelmanager.send_payment(route, payment_hash, &None) {
+                               match channelmanager.send_payment(&route, payment_hash, &None) {
+                                       Ok(_) => {},
+                                       Err(_) => return,
+                               }
+                       },
+                       15 => {
+                               let value = slice_to_be24(get_slice!(3)) as u64;
+                               let mut route = match router.get_route(&get_pubkey!(), None, &Vec::new(), value, 42) {
+                                       Ok(route) => route,
+                                       Err(_) => return,
+                               };
+                               route.paths.push(route.paths[0].clone());
+                               let mut payment_hash = PaymentHash([0; 32]);
+                               payment_hash.0[0..8].copy_from_slice(&be64_to_array(payments_sent));
+                               let mut sha = Sha256::engine();
+                               sha.input(&payment_hash.0[..]);
+                               payment_hash.0 = Sha256::from_engine(sha).into_inner();
+                               payments_sent += 1;
+                               let mut payment_secret = PaymentSecret([0; 32]);
+                               payment_secret.0[0..8].copy_from_slice(&be64_to_array(payments_sent));
+                               payments_sent += 1;
+                               match channelmanager.send_payment(&route, payment_hash, &Some(payment_secret)) {
                                        Ok(_) => {},
                                        Err(_) => return,
                                }
@@ -513,6 +534,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
                                channels.sort_by(|a, b| { a.channel_id.cmp(&b.channel_id) });
                                channelmanager.force_close_channel(&channels[channel_id].channel_id);
                        },
+                       // 15 is above
                        _ => return,
                }
                loss_detector.handler.process_events();
@@ -539,15 +561,19 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
        }
 }
 
+pub fn full_stack_test<Out: test_logger::Output>(data: &[u8], out: Out) {
+       let logger: Arc<dyn Logger> = Arc::new(test_logger::TestLogger::new("".to_owned(), out));
+       do_test(data, &logger);
+}
+
 #[no_mangle]
 pub extern "C" fn full_stack_run(data: *const u8, datalen: usize) {
-       let logger: Arc<dyn Logger> = Arc::new(test_logger::TestLogger::new("".to_owned()));
+       let logger: Arc<dyn Logger> = Arc::new(test_logger::TestLogger::new("".to_owned(), test_logger::DevNull {}));
        do_test(unsafe { std::slice::from_raw_parts(data, datalen) }, &logger);
 }
 
 #[cfg(test)]
 mod tests {
-       use utils::test_logger;
        use lightning::util::logger::{Logger, Record};
        use std::collections::HashMap;
        use std::sync::{Arc, Mutex};