test(storage): recover senders if not found in database (#4470)

This commit is contained in:
Alexey Shekhirin
2023-09-04 13:20:19 +01:00
committed by GitHub
parent 03887a2c4e
commit b32562f4ea
3 changed files with 33 additions and 1 deletions

View File

@ -38,6 +38,7 @@ reth-db = { path = "../db", features = ["test-utils"] }
reth-primitives = { workspace = true, features = ["arbitrary", "test-utils"] }
reth-rlp.workspace = true
reth-trie = { path = "../../trie", features = ["test-utils"] }
reth-interfaces = { workspace = true, features = ["test-utils"] }
parking_lot.workspace = true
tempfile = "3.3"
assert_matches.workspace = true

View File

@ -396,9 +396,11 @@ mod tests {
use crate::{BlockHashReader, BlockNumReader, BlockWriter, TransactionsProvider};
use assert_matches::assert_matches;
use reth_db::{
tables,
test_utils::{create_test_rw_db, ERROR_TEMPDIR},
DatabaseEnv,
};
use reth_interfaces::test_utils::{generators, generators::random_block};
use reth_primitives::{
hex_literal::hex, ChainSpecBuilder, PruneMode, PruneModes, SealedBlock, H256,
};
@ -485,4 +487,33 @@ mod tests {
assert_matches!(provider.transaction_id(block.body[0].hash), Ok(None));
}
}
#[test]
fn get_take_block_transaction_range_recover_senders() {
let chain_spec = ChainSpecBuilder::mainnet().build();
let db = create_test_rw_db();
let factory = ProviderFactory::new(db, Arc::new(chain_spec));
let mut rng = generators::rng();
let block = random_block(&mut rng, 0, None, Some(3), None);
{
let provider = factory.provider_rw().unwrap();
assert_matches!(provider.insert_block(block.clone(), None, None), Ok(_));
let senders = provider.get_or_take::<tables::TxSenders, true>(0..=0);
assert_eq!(senders, Ok(vec![(0, block.body[0].recover_signer().unwrap())]));
assert_eq!(provider.transaction_sender(0), Ok(None));
let result = provider.get_take_block_transaction_range::<true>(0..=0);
assert_eq!(
result,
Ok(vec![(
0,
block.body.iter().cloned().map(|tx| tx.into_ecrecovered().unwrap()).collect()
)])
)
}
}
}

View File

@ -404,7 +404,7 @@ impl<'this, TX: DbTxMut<'this> + DbTx<'this>> DatabaseProvider<'this, TX> {
}
/// Get requested blocks transaction with signer
fn get_take_block_transaction_range<const TAKE: bool>(
pub(crate) fn get_take_block_transaction_range<const TAKE: bool>(
&self,
range: impl RangeBounds<BlockNumber> + Clone,
) -> Result<Vec<(BlockNumber, Vec<TransactionSignedEcRecovered>)>> {