Add fuzz targets for Writeable messages/migrate fuzz test
[rust-lightning] / fuzz / fuzz_targets / msg_targets / utils.rs
1 #![macro_use]
2
3 #[macro_export]
4 macro_rules! test_msg {
5         ($MsgType: path, $data: ident) => {
6                 {
7                         use lightning::util::ser::{Writer, Reader, Writeable, Readable};
8                         let mut r = Reader::new(::std::io::Cursor::new($data));
9                         if let Ok(msg) = <$MsgType as Readable<::std::io::Cursor<&[u8]>>>::read(&mut r) {
10                                 let p = r.get_ref().position() as usize;
11                                 let mut w = Writer::new(::std::io::Cursor::new(vec![]));
12                                 msg.write(&mut w).unwrap();
13
14                                 let buf = w.into_inner().into_inner();
15                                 assert_eq!(buf.len(), p);
16                                 assert_eq!(&r.into_inner().into_inner()[..p], &buf[..p]);
17                         }
18                 }
19         }
20 }
21
22 #[macro_export]
23 macro_rules! test_msg_simple {
24         ($MsgType: path, $data: ident) => {
25                 {
26                         use lightning::util::ser::{Writer, Reader, Writeable, Readable};
27                         let mut r = Reader::new(::std::io::Cursor::new($data));
28                         if let Ok(msg) = <$MsgType as Readable<::std::io::Cursor<&[u8]>>>::read(&mut r) {
29                                 msg.write(&mut Writer::new(::std::io::Cursor::new(vec![]))).unwrap();
30                         }
31                 }
32         }
33 }
34
35 #[macro_export]
36 macro_rules! test_msg_exact {
37         ($MsgType: path, $data: ident) => {
38                 {
39                         use lightning::util::ser::{Writer, Reader, Writeable, Readable};
40                         let mut r = Reader::new(::std::io::Cursor::new($data));
41                         if let Ok(msg) = <$MsgType as Readable<::std::io::Cursor<&[u8]>>>::read(&mut r) {
42                                 let mut w = Writer::new(::std::io::Cursor::new(vec![]));
43                                 msg.write(&mut w).unwrap();
44
45                                 let buf = w.into_inner().into_inner();
46                                 assert_eq!(&r.into_inner().into_inner()[..], &buf[..]);
47                         }
48                 }
49         }
50 }
51
52 #[macro_export]
53 macro_rules! test_msg_hole {
54         ($MsgType: path, $data: ident, $hole: expr, $hole_len: expr) => {
55                 {
56                         use lightning::util::ser::{Writer, Reader, Writeable, Readable};
57                         let mut r = Reader::new(::std::io::Cursor::new($data));
58                         if let Ok(msg) = <$MsgType as Readable<::std::io::Cursor<&[u8]>>>::read(&mut r) {
59                                 let mut w = Writer::new(::std::io::Cursor::new(vec![]));
60                                 msg.write(&mut w).unwrap();
61                                 let p = w.get_ref().position() as usize;
62
63                                 let buf = w.into_inner().into_inner();
64                                 assert_eq!(buf.len(),p);
65                                 assert_eq!(&r.get_ref().get_ref()[..$hole], &buf[..$hole]);
66                                 assert_eq!(&r.get_ref().get_ref()[$hole+$hole_len..p], &buf[$hole+$hole_len..]);
67                         }
68                 }
69         }
70 }