Skip to content

Commit

Permalink
add static tests
Browse files Browse the repository at this point in the history
  • Loading branch information
joshieDo committed Oct 23, 2024
1 parent 3ad8aa7 commit 7e128b1
Show file tree
Hide file tree
Showing 7 changed files with 109 additions and 23 deletions.
7 changes: 5 additions & 2 deletions crates/cli/commands/src/test_vectors/compact.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ use reth_codecs::alloy::{
authorization_list::Authorization,
genesis_account::GenesisAccount,
header::{Header, HeaderExt},
transaction::{eip2930::TxEip2930, eip1559::TxEip1559, eip4844::TxEip4844, eip7702::TxEip7702, legacy::TxLegacy},
transaction::{
eip1559::TxEip1559, eip2930::TxEip2930, eip4844::TxEip4844, eip7702::TxEip7702,
legacy::TxLegacy,
},
withdrawal::Withdrawal,
};
use reth_db::{
Expand All @@ -18,7 +21,7 @@ use reth_db::{
};
use reth_fs_util as fs;
use reth_primitives::{
Account, Log, LogData, Receipt, StorageEntry, Transaction, TransactionSignedNoHash, TxType
Account, Log, LogData, Receipt, StorageEntry, Transaction, TransactionSignedNoHash, TxType,
};
use reth_prune_types::{PruneCheckpoint, PruneMode};
use reth_stages_types::{
Expand Down
2 changes: 1 addition & 1 deletion crates/primitives/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ arbitrary = { workspace = true, features = ["derive"], optional = true }
[dev-dependencies]
# eth
reth-chainspec.workspace = true
reth-codecs.workspace = true
reth-codecs = { workspace = true, features = ["test-utils"] }
reth-primitives-traits = { workspace = true, features = ["arbitrary"] }
reth-testing-utils.workspace = true
revm-primitives = { workspace = true, features = ["arbitrary"] }
Expand Down
8 changes: 8 additions & 0 deletions crates/primitives/src/receipt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,14 @@ impl Encodable for ReceiptWithBloomEncoder<'_> {
mod tests {
use super::*;
use alloy_primitives::{address, b256, bytes, hex_literal::hex};
use reth_codecs::test_utils::test_decode;

#[test]
fn test_decode_receipt() {
test_decode::<Receipt>(&hex!(
"c428b52ffd23fc42696156b10200f034792b6a94c3850215c2fef7aea361a0c31b79d9a32652eefc0d4e2e730036061cff7344b6fc6132b50cda0ed810a991ae58ef013150c12b2522533cb3b3a8b19b7786a8b5ff1d3cdc84225e22b02def168c8858df"
));
}

// Test vector from: https://eips.ethereum.org/EIPS/eip-2481
#[test]
Expand Down
34 changes: 24 additions & 10 deletions crates/storage/codecs/src/alloy/mod.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,29 @@
//! Implements Compact for alloy types.

pub mod access_list;
pub mod authorization_list;
pub mod genesis_account;
pub mod header;
pub mod log;
pub mod signature;
pub mod transaction;
pub mod trie;
pub mod txkind;
pub mod withdrawal;
/// Will make it a pub mod if test-utils is enabled
macro_rules! cond_mod {
($($mod_name:ident),*) => {
$(
#[cfg(feature = "test-utils")]
pub mod $mod_name;
#[cfg(not(feature = "test-utils"))]
mod $mod_name;
)*
};
}

cond_mod!(
access_list,
authorization_list,
genesis_account,
header,
log,
signature,
transaction,
trie,
txkind,
withdrawal
);

#[cfg(test)]
mod tests {
Expand Down
2 changes: 1 addition & 1 deletion crates/storage/codecs/src/alloy/transaction/legacy.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//! Compact implementation for [`AlloyTxEip7702`]
//! Compact implementation for [`AlloyTxLegacy`]

use crate::Compact;
use alloy_consensus::TxLegacy as AlloyTxLegacy;
Expand Down
70 changes: 61 additions & 9 deletions crates/storage/codecs/src/alloy/transaction/mod.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
//! Compact implementation for transaction types

pub mod eip1559;
pub mod eip2930;
pub mod eip4844;
pub mod eip7702;
pub mod legacy;
#[cfg(feature = "optimism")]
cond_mod!(
eip1559,
eip2930,
eip4844,
eip7702,
legacy
);


#[cfg(all(feature = "test-utils", feature = "optimism"))]
pub mod optimism;
#[cfg(all(not(feature = "test-utils"), feature = "optimism"))]
mod optimism;

#[cfg(test)]
mod tests {
Expand All @@ -17,9 +23,13 @@ mod tests {
// this check is to ensure we do not inadvertently add too many fields to a struct which would
// expand the flags field and break backwards compatibility

use crate::alloy::transaction::{
eip1559::TxEip1559, eip2930::TxEip2930, eip4844::TxEip4844, eip7702::TxEip7702,
legacy::TxLegacy,
use alloy_primitives::hex;
use crate::{
alloy::{header::Header, transaction::{
eip1559::TxEip1559, eip2930::TxEip2930, eip4844::TxEip4844, eip7702::TxEip7702,
legacy::TxLegacy,
}},
test_utils::test_decode,
};

#[test]
Expand All @@ -36,4 +46,46 @@ mod tests {
fn test_ensure_backwards_compatibility_optimism() {
assert_eq!(crate::alloy::transaction::optimism::TxDeposit::bitflag_encoded_bytes(), 2);
}

#[test]
fn test_decode_header() {
test_decode::<Header>(&hex!(
"01000000fbbb564baeafd064b979c2ac032df5cd987098066a8c6969514dfb8ecfbf043e667fa19efcc00d1dd197c309a3cc42dec820cd627af8f7f38f3274f842406891b22624431d0ea858422db8415b1181f8d19befbd21287debaf98a94e84b3ec20be846f35abfbf743ee3eda4fdda6a6f9124d295da97e26eaa1cedd09936f0a3c560b6bc10316dba5e82abd21afcf519a985feb09a6ce7fba2e8163b10f06c99828b8049c29b993d88d1d112dca60a03ebd8ebc6d69a7e1f301ca6d67c21fe0949d67bca251edf36c96a2cf7c84d98fc60a53988ac95820f434eb35280d98c8ba4d7484e7ee8fefd63591ad4c937ccaaea23871d05c77bac754c5759b34cf9b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
));
}

#[test]
fn test_decode_eip1559() {
test_decode::<TxEip1559>(&hex!(
"88086110b81b05bc5bb59ec3e4cd44e895a9dcb2656d5003e2f64ecb2e15443898cc1cc19af19ca96fc2b4eafc4abc26e4bbd70a3ddb10b7530b65eea128f4095c97164f712c04239902c1b08acf3949d4687123cdd72d5c73df113d2dc6ed7e519f410ace5553ca805975240a208b57013532de78c5cb407423ea11921ab11b13e93ef35d4d01c9a23166c4d627987545fe4675528d0ab111b0a1dc83fba0a4e1cd5c826a94db3f"
));
}

#[test]
fn test_decode_eip2930() {
test_decode::<TxEip2930>(&hex!(
"7810833fce14e3e2921e94fd3727eb71e91551d2c1e029697a654bfab510f3963aa57074015e152065d1c807f8830079fb0aeadc251d248eaec7147e78580ed638c4e667827775e24270edd5aad475776533ece65373afa71722bfeba3c900"
));
}

#[test]
fn test_decode_eip4844() {
test_decode::<TxEip4844>(&hex!(
"88086110025c359180ea680b5007c856f9e1ad4d1be7a5019feb42133f4fc4bdf74da1b457ab787462385a28a1bf8edb401adabf3ff21ac18f695e30180348ea67246fc4dc25e88add12b7c317651a0ce08946d98dbbe5b38883aa758a0f247e23b0fe3ac1bcc43d7212c984d6ccc770d70135890c9a07d715cacb9032c90d539d0b3d209a8d600178bcfb416fd489e5d5dd56d9cfc6addae810ae70bdaee65672b871dc2b3f35ec00dbaa0d872f78cb58b3199984c608c8ba"
));
}

#[test]
fn test_decode_eip7702() {
test_decode::<TxEip7702>(&hex!(
"8808210881415c034feba383d7a6efd3f2601309b33a6d682ad47168cac0f7a5c5136a33370e5e7ca7f570d5530d7a0d18bf5eac33583fdc27b6580f61e8cbd34d6de596f925c1f353188feb2c1e9e20de82a80b57f0be425d8c5896280d4f5f66cdcfba256d0c9ac8abd833859a62ec019501b4585fa176f048de4f88b93bdefecfcaf4d8f0dd04767bc683a4569c893632e44ba9d53f90d758125c9b24c0192a649166520cd5eecbc110b53eda400cf184b8ef9932c81d0deb2ea27dfa863392a87bfd53af3ec67379f20992501e76e387cbe3933861beead1b49649383cf8b2a2d5c6d04b7edc376981ed9b12cf7199fe7fabf5198659e001bed40922969b82a6cd000000000000"
));
}

#[test]
fn test_decode_legacy() {
test_decode::<TxLegacy>(&hex!(
"112210080a8ba06a8d108540bb3140e9f71a0812c46226f9ea77ae880d98d19fe27e5911801175c3b32620b2e887af0296af343526e439b775ee3b1c06750058e9e5fc4cd5965c3010f86184"
));
}
}
9 changes: 9 additions & 0 deletions crates/storage/codecs/src/test_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,12 @@ impl UnusedBits {
matches!(self, Self::NotZero)
}
}

/// Tests decoding and re-encoding to ensure correctness.
pub fn test_decode<T: crate::Compact>(buf: &[u8]) {
let (decoded, _) = T::from_compact(buf, buf.len());
let mut encoded = Vec::with_capacity(buf.len());

decoded.to_compact(&mut encoded);
assert_eq!(buf, &encoded[..]);
}

0 comments on commit 7e128b1

Please sign in to comment.