@@ -1286,6 +1286,21 @@ fn test_open_db() {
12861286 assert ! ( PersistentDB :: new( PersistentDBOptions :: new( tmp. path( ) . to_path_buf( ) ) ) . is_ok( ) ) ;
12871287}
12881288
1289+ #[ test]
1290+ fn test_open_db_with_logger ( ) {
1291+ let tmp = tempfile:: Builder :: new ( )
1292+ . prefix ( "evm.mdb" )
1293+ . tempdir ( )
1294+ . unwrap ( ) ;
1295+
1296+ assert ! (
1297+ PersistentDB :: new(
1298+ PersistentDBOptions :: new( tmp. path( ) . to_path_buf( ) ) . with_logger( Logger :: new( None ) )
1299+ )
1300+ . is_ok( )
1301+ ) ;
1302+ }
1303+
12891304#[ test]
12901305fn test_commit_changes ( ) {
12911306 let path = tempfile:: Builder :: new ( )
@@ -1708,88 +1723,181 @@ fn test_read_accounts() {
17081723 assert_eq ! ( read, addresses. len( ) ) ;
17091724}
17101725
1711- #[ test]
1712- fn test_read_receipts ( ) {
1713- let path = tempfile:: Builder :: new ( )
1714- . prefix ( "evm.mdb" )
1715- . tempdir ( )
1716- . unwrap ( ) ;
1726+ #[ cfg( test) ]
1727+ mod tests {
1728+ use crate :: {
1729+ compression:: CompressedBincode ,
1730+ db:: {
1731+ CommitKey , CommitReceipts , LegacyAddressWrapper , PendingCommit , PersistentDB ,
1732+ PersistentDBOptions , StaticStringWrapper , StringWrapper ,
1733+ } ,
1734+ legacy:: { LegacyAccountAttributes , LegacyAddress } ,
1735+ receipt:: TxReceipt ,
1736+ } ;
1737+ use alloy_primitives:: { B256 , U256 , address, b256} ;
1738+ use revm:: { primitives:: HashMap , state:: AccountInfo } ;
17171739
1718- let db =
1719- PersistentDB :: new ( PersistentDBOptions :: new ( path. path ( ) . to_path_buf ( ) ) ) . expect ( "database" ) ;
1740+ use heed:: { BytesDecode , BytesEncode } ;
17201741
1721- let target_block = 100 ;
1722- let mut total_receipts = 0 ;
1742+ #[ test]
1743+ fn test_legacy_address_wrapper ( ) {
1744+ let legacy_address: LegacyAddress =
1745+ "DJmvhhiQFSrEQCq9FUxvcLcpcBjx7K3yLt" . try_into ( ) . unwrap ( ) ;
17231746
1724- {
1725- let mut wtxn = db . env . write_txn ( ) . unwrap ( ) ;
1747+ let wrapper = LegacyAddressWrapper ( legacy_address ) ;
1748+ let serialized = < LegacyAddressWrapper as BytesEncode > :: bytes_encode ( & wrapper ) . expect ( "ok" ) ;
17261749
1727- fn random_b256 ( seed : u64 , offset : u64 ) -> B256 {
1728- use std:: collections:: hash_map:: DefaultHasher ;
1729- use std:: hash:: { Hash , Hasher } ;
1730- let mut hasher = DefaultHasher :: new ( ) ;
1731- seed. hash ( & mut hasher) ;
1750+ let deserialized =
1751+ <LegacyAddressWrapper as BytesDecode >:: bytes_decode ( & serialized) . expect ( "ok" ) ;
1752+ assert_eq ! ( legacy_address, deserialized. 0 ) ;
1753+ }
17321754
1733- B256 :: from ( U256 :: from ( hasher. finish ( ) + offset) )
1734- }
1755+ #[ test]
1756+ fn test_string_wrapper ( ) {
1757+ let string = "test" . to_owned ( ) ;
17351758
1736- for i in 0 ..target_block {
1737- let block_number = ( i + 1 ) as u64 ;
1759+ let wrapper = StringWrapper ( string) ;
1760+ let serialized = <StringWrapper as BytesEncode >:: bytes_encode ( & wrapper) . expect ( "ok" ) ;
1761+ let deserialized = <StringWrapper as BytesDecode >:: bytes_decode ( & serialized) . expect ( "ok" ) ;
17381762
1739- let receipts: HashMap < B256 , TxReceipt > = [
1740- ( random_b256 ( block_number, 0 ) , TxReceipt :: default ( ) ) ,
1741- ( random_b256 ( block_number, 1 ) , TxReceipt :: default ( ) ) ,
1742- ( random_b256 ( block_number, 2 ) , TxReceipt :: default ( ) ) ,
1743- ( random_b256 ( block_number, 3 ) , TxReceipt :: default ( ) ) ,
1744- ]
1745- . into_iter ( )
1746- . collect ( ) ;
1763+ assert_eq ! ( "test" , deserialized. 0 ) ;
1764+ }
17471765
1748- total_receipts += receipts. len ( ) ;
1766+ #[ test]
1767+ fn test_static_string_wrapper ( ) {
1768+ let string = "test" ;
17491769
1750- db. inner
1751- . borrow_mut ( )
1752- . commits
1753- . put (
1754- & mut wtxn,
1755- & block_number,
1756- & CompressedBincode ( & CommitReceipts {
1757- tx_receipts : receipts,
1758- ..Default :: default ( )
1759- } ) ,
1760- )
1761- . unwrap ( ) ;
1762- }
1763- wtxn. commit ( ) . unwrap ( ) ;
1770+ let wrapper = StaticStringWrapper ( string) ;
1771+ let serialized = <StaticStringWrapper as BytesEncode >:: bytes_encode ( & wrapper) . expect ( "ok" ) ;
1772+
1773+ assert_eq ! ( serialized, & b"test" [ ..] ) ;
17641774 }
17651775
1766- const LIMIT : u64 = 7 ;
1767- let mut offset = 0 ;
1776+ #[ test]
1777+ fn test_commit_key ( ) {
1778+ let key = CommitKey ( 0 , 0 , B256 :: ZERO ) ;
1779+ let mut pending = PendingCommit :: new ( key) ;
1780+
1781+ let info = AccountInfo {
1782+ balance : U256 :: ONE ,
1783+ nonce : 1 ,
1784+ code_hash : b256 ! ( "0000000000000000000000000000000000000000000000000000000000000001" ) ,
1785+ account_id : None ,
1786+ code : None ,
1787+ } ;
17681788
1769- let mut read_block_number = 0 ;
1770- let mut read_receipts = 0 ;
1789+ let attributes = LegacyAccountAttributes {
1790+ legacy_nonce : Some ( 0 ) ,
1791+ second_public_key : Some ( "key" . into ( ) ) ,
1792+ multi_signature : None ,
1793+ } ;
17711794
1772- loop {
1773- let ( next, items) = db. get_receipts ( offset, LIMIT ) . unwrap ( ) ;
1774- for ( block_number, receipts) in items {
1775- read_block_number = block_number;
1776- read_receipts += receipts. len ( ) ;
1777- }
1795+ pending. import_account (
1796+ address ! ( "0000000000000000000000000000000000000001" ) ,
1797+ info,
1798+ Some ( attributes) ,
1799+ ) ;
17781800
1779- if next. is_none ( ) {
1780- break ;
1801+ let info = AccountInfo {
1802+ balance : U256 :: ZERO ,
1803+ nonce : 0 ,
1804+ code_hash : B256 :: ZERO ,
1805+ account_id : None ,
1806+ code : None ,
1807+ } ;
1808+ pending. import_account (
1809+ address ! ( "0000000000000000000000000000000000000002" ) ,
1810+ info,
1811+ None ,
1812+ ) ;
1813+
1814+ assert_eq ! ( pending. transitions. transitions. len( ) , 2 ) ;
1815+ assert_eq ! ( pending. legacy_attributes. len( ) , 1 ) ;
1816+ }
1817+
1818+ #[ test]
1819+ fn test_read_receipts ( ) {
1820+ let path = tempfile:: Builder :: new ( )
1821+ . prefix ( "evm.mdb" )
1822+ . tempdir ( )
1823+ . unwrap ( ) ;
1824+
1825+ let db = PersistentDB :: new ( PersistentDBOptions :: new ( path. path ( ) . to_path_buf ( ) ) )
1826+ . expect ( "database" ) ;
1827+
1828+ let target_block = 100 ;
1829+ let mut total_receipts = 0 ;
1830+
1831+ {
1832+ let mut wtxn = db. env . write_txn ( ) . unwrap ( ) ;
1833+
1834+ fn random_b256 ( seed : u64 , offset : u64 ) -> B256 {
1835+ use std:: collections:: hash_map:: DefaultHasher ;
1836+ use std:: hash:: { Hash , Hasher } ;
1837+ let mut hasher = DefaultHasher :: new ( ) ;
1838+ seed. hash ( & mut hasher) ;
1839+
1840+ B256 :: from ( U256 :: from ( hasher. finish ( ) + offset) )
1841+ }
1842+
1843+ for i in 0 ..target_block {
1844+ let block_number = ( i + 1 ) as u64 ;
1845+
1846+ let receipts: HashMap < B256 , TxReceipt > = [
1847+ ( random_b256 ( block_number, 0 ) , TxReceipt :: default ( ) ) ,
1848+ ( random_b256 ( block_number, 1 ) , TxReceipt :: default ( ) ) ,
1849+ ( random_b256 ( block_number, 2 ) , TxReceipt :: default ( ) ) ,
1850+ ( random_b256 ( block_number, 3 ) , TxReceipt :: default ( ) ) ,
1851+ ]
1852+ . into_iter ( )
1853+ . collect ( ) ;
1854+
1855+ total_receipts += receipts. len ( ) ;
1856+
1857+ db. inner
1858+ . borrow_mut ( )
1859+ . commits
1860+ . put (
1861+ & mut wtxn,
1862+ & block_number,
1863+ & CompressedBincode ( & CommitReceipts {
1864+ tx_receipts : receipts,
1865+ ..Default :: default ( )
1866+ } ) ,
1867+ )
1868+ . unwrap ( ) ;
1869+ }
1870+ wtxn. commit ( ) . unwrap ( ) ;
17811871 }
17821872
1783- match next {
1784- Some ( next) => {
1785- offset = next;
1873+ const LIMIT : u64 = 7 ;
1874+ let mut offset = 0 ;
1875+
1876+ let mut read_block_number = 0 ;
1877+ let mut read_receipts = 0 ;
1878+
1879+ loop {
1880+ let ( next, items) = db. get_receipts ( offset, LIMIT ) . unwrap ( ) ;
1881+ for ( block_number, receipts) in items {
1882+ read_block_number = block_number;
1883+ read_receipts += receipts. len ( ) ;
17861884 }
1787- None => {
1885+
1886+ if next. is_none ( ) {
17881887 break ;
17891888 }
1889+
1890+ match next {
1891+ Some ( next) => {
1892+ offset = next;
1893+ }
1894+ None => {
1895+ break ;
1896+ }
1897+ }
17901898 }
1791- }
17921899
1793- assert_eq ! ( read_block_number, target_block) ;
1794- assert_eq ! ( read_receipts, total_receipts) ;
1900+ assert_eq ! ( read_block_number, target_block) ;
1901+ assert_eq ! ( read_receipts, total_receipts) ;
1902+ }
17951903}
0 commit comments