test: add open ended filter test (#2620)

This commit is contained in:
Matthias Seitz
2023-05-11 00:02:49 +02:00
committed by GitHub
parent 58a4a8ea86
commit f4c241970e
2 changed files with 38 additions and 0 deletions

View File

@@ -24,6 +24,7 @@ pub enum FilterBlockOption {
}
impl FilterBlockOption {
/// Returns the `fromBlock` value, if any
pub fn get_to_block(&self) -> Option<&BlockNumberOrTag> {
match self {
FilterBlockOption::Range { to_block, .. } => to_block.as_ref(),
@@ -31,12 +32,23 @@ impl FilterBlockOption {
}
}
/// Returns the `toBlock` value, if any
pub fn get_from_block(&self) -> Option<&BlockNumberOrTag> {
match self {
FilterBlockOption::Range { from_block, .. } => from_block.as_ref(),
FilterBlockOption::AtBlockHash(_) => None,
}
}
/// Returns the range (`fromBlock`, `toBlock`) if this is a range filter.
pub fn as_range(&self) -> (Option<&BlockNumberOrTag>, Option<&BlockNumberOrTag>) {
match self {
FilterBlockOption::Range { from_block, to_block } => {
(from_block.as_ref(), to_block.as_ref())
}
FilterBlockOption::AtBlockHash(_) => (None, None),
}
}
}
impl From<BlockNumberOrTag> for FilterBlockOption {

View File

@@ -97,6 +97,7 @@ pub(crate) fn get_filter_block_range(
#[cfg(test)]
mod tests {
use super::*;
use reth_primitives::{filter::Filter, BlockNumberOrTag};
#[test]
fn test_log_range_from_and_to() {
@@ -140,4 +141,29 @@ mod tests {
// no range given -> head
assert_eq!(range, (info.best_number, info.best_number));
}
#[test]
fn parse_log_from_only() {
let s = r#"{"fromBlock":"0xf47a42","address":["0x7de93682b9b5d80d45cd371f7a14f74d49b0914c","0x0f00392fcb466c0e4e4310d81b941e07b4d5a079","0xebf67ab8cff336d3f609127e8bbf8bd6dd93cd81"],"topics":["0x0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f"]}"#;
let filter: Filter = serde_json::from_str(s).unwrap();
assert_eq!(filter.get_from_block(), Some(16022082));
assert!(filter.get_to_block().is_none());
let best_number = 17229427;
let info = ChainInfo { best_number, ..Default::default() };
let (from_block, to_block) = filter.block_option.as_range();
let start_block = info.best_number;
let (from_block_number, to_block_number) = get_filter_block_range(
from_block.and_then(BlockNumberOrTag::as_number),
to_block.and_then(BlockNumberOrTag::as_number),
start_block,
info,
);
assert_eq!(from_block_number, 16022082);
assert_eq!(to_block_number, best_number);
}
}