From 2305310ef81b2d9c33f431cf89ff38d050255d22 Mon Sep 17 00:00:00 2001 From: chirag-bgh <76247491+chirag-bgh@users.noreply.github.com> Date: Thu, 25 May 2023 16:24:54 +0530 Subject: [PATCH] perf/test: run malformed header test separately (#2750) Co-authored-by: Matthias Seitz --- crates/storage/codecs/derive/src/arbitrary.rs | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/crates/storage/codecs/derive/src/arbitrary.rs b/crates/storage/codecs/derive/src/arbitrary.rs index 058fa2e55..f883379f0 100644 --- a/crates/storage/codecs/derive/src/arbitrary.rs +++ b/crates/storage/codecs/derive/src/arbitrary.rs @@ -16,6 +16,7 @@ pub fn maybe_generate_tests(args: TokenStream, ast: &DeriveInput) -> TokenStream let mut traits = vec![]; let mut roundtrips = vec![]; + let mut additional_tests = vec![]; for arg in args { if arg.to_string() == "compact" { @@ -23,10 +24,8 @@ pub fn maybe_generate_tests(args: TokenStream, ast: &DeriveInput) -> TokenStream roundtrips.push(quote! { { let mut buf = vec![]; - let len = field.clone().to_compact(&mut buf); let (decoded, _) = super::#type_ident::from_compact(&buf, len); - assert!(field == decoded); } }); @@ -35,7 +34,6 @@ pub fn maybe_generate_tests(args: TokenStream, ast: &DeriveInput) -> TokenStream roundtrips.push(quote! { { let mut buf = vec![]; - let len = field.encode(&mut buf); let mut b = &mut buf.as_slice(); let decoded = super::#type_ident::decode(b).unwrap(); @@ -43,7 +41,23 @@ pub fn maybe_generate_tests(args: TokenStream, ast: &DeriveInput) -> TokenStream // ensure buffer is fully consumed by decode assert!(b.is_empty(), "buffer was not consumed entirely"); - // malformed header check + } + }); + additional_tests.push(quote! { + + #[test] + fn malformed_rlp_header_check() { + use rand::RngCore; + + // get random instance of type + let mut raw = [0u8;20 ]; + rand::thread_rng().fill_bytes(&mut raw); + let mut unstructured = arbitrary::Unstructured::new(&raw[..]); + let val = ::arbitrary(&mut unstructured).unwrap(); + let mut buf = vec![]; + let len = val.encode(&mut buf); + + // malformed rlp-header check let mut decode_buf = &mut buf.as_slice(); let mut header = reth_rlp::Header::decode(decode_buf).unwrap(); header.payload_length+=1; @@ -53,6 +67,7 @@ pub fn maybe_generate_tests(args: TokenStream, ast: &DeriveInput) -> TokenStream let res = super::#type_ident::decode(&mut b.as_ref()); assert!(res.is_err(), "malformed header was decoded"); } + }); } else if let Ok(num) = arg.to_string().parse() { default_cases = num; @@ -77,6 +92,8 @@ pub fn maybe_generate_tests(args: TokenStream, ast: &DeriveInput) -> TokenStream #(#roundtrips)* }); } + + #(#additional_tests)* } } }