Skip to content

Commit e80177f

Browse files
committed
test: add missing scanner tests
1 parent d08f364 commit e80177f

File tree

5 files changed

+192
-35
lines changed

5 files changed

+192
-35
lines changed

src/event_scanner/scanner/historic.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ mod tests {
146146
}
147147

148148
#[test]
149-
fn test_historic_scanner_builder_default_values() {
149+
fn test_historic_scanner_builder_with_default_values() {
150150
let builder = EventScannerBuilder::historic();
151151

152152
assert_eq!(builder.config.from_block, BlockNumberOrTag::Earliest.into());

src/event_scanner/scanner/latest.rs

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,11 @@ impl<N: Network> EventScanner<LatestEvents, N> {
125125

126126
#[cfg(test)]
127127
mod tests {
128+
use crate::{
129+
block_range_scanner::DEFAULT_BLOCK_CONFIRMATIONS,
130+
event_scanner::scanner::DEFAULT_MAX_CONCURRENT_FETCHES,
131+
};
132+
128133
use super::*;
129134
use alloy::{
130135
eips::BlockNumberOrTag,
@@ -141,26 +146,26 @@ mod tests {
141146
.max_block_range(25)
142147
.block_confirmations(5)
143148
.from_block(BlockNumberOrTag::Number(50))
144-
.to_block(BlockNumberOrTag::Number(150));
149+
.to_block(BlockNumberOrTag::Number(150))
150+
.max_concurrent_fetches(10);
145151

146152
assert_eq!(builder.block_range_scanner.max_block_range, 25);
147153
assert_eq!(builder.config.block_confirmations, 5);
154+
assert_eq!(builder.config.max_concurrent_fetches, 10);
148155
assert_eq!(builder.config.count, 3);
149156
assert_eq!(builder.config.from_block, BlockNumberOrTag::Number(50).into());
150157
assert_eq!(builder.config.to_block, BlockNumberOrTag::Number(150).into());
151158
}
152159

153160
#[test]
154-
fn test_latest_scanner_builder_with_different_block_types() {
155-
let builder = EventScannerBuilder::latest(10)
156-
.from_block(BlockNumberOrTag::Earliest)
157-
.to_block(BlockNumberOrTag::Latest)
158-
.block_confirmations(20);
159-
160-
assert_eq!(builder.config.from_block, BlockNumberOrTag::Earliest.into());
161-
assert_eq!(builder.config.to_block, BlockNumberOrTag::Latest.into());
161+
fn test_latest_scanner_builder_with_default_values() {
162+
let builder = EventScannerBuilder::latest(10);
163+
164+
assert_eq!(builder.config.from_block, BlockNumberOrTag::Latest.into());
165+
assert_eq!(builder.config.to_block, BlockNumberOrTag::Earliest.into());
162166
assert_eq!(builder.config.count, 10);
163-
assert_eq!(builder.config.block_confirmations, 20);
167+
assert_eq!(builder.config.max_concurrent_fetches, DEFAULT_MAX_CONCURRENT_FETCHES);
168+
assert_eq!(builder.config.block_confirmations, DEFAULT_BLOCK_CONFIRMATIONS);
164169
}
165170

166171
#[test]
@@ -173,12 +178,15 @@ mod tests {
173178
.block_confirmations(5)
174179
.block_confirmations(7)
175180
.max_block_range(50)
176-
.max_block_range(60);
181+
.max_block_range(60)
182+
.max_concurrent_fetches(10)
183+
.max_concurrent_fetches(20);
177184

178185
assert_eq!(builder.config.count, 3);
179186
assert_eq!(builder.config.from_block, BlockNumberOrTag::Number(20).into());
180187
assert_eq!(builder.config.to_block, BlockNumberOrTag::Number(200).into());
181188
assert_eq!(builder.config.block_confirmations, 7);
189+
assert_eq!(builder.config.max_concurrent_fetches, 20);
182190
assert_eq!(builder.block_range_scanner.max_block_range, 60);
183191
}
184192

@@ -204,6 +212,15 @@ mod tests {
204212
}
205213
}
206214

215+
#[tokio::test]
216+
async fn returns_error_with_zero_max_concurrent_fetches() {
217+
let provider = RootProvider::<Ethereum>::new(RpcClient::mocked(Asserter::new()));
218+
let result =
219+
EventScannerBuilder::latest(10).max_concurrent_fetches(0).connect(provider).await;
220+
221+
assert!(matches!(result, Err(ScannerError::InvalidMaxConcurrentFetches)));
222+
}
223+
207224
#[tokio::test]
208225
async fn test_latest_scanner_with_valid_block_hash() {
209226
let anvil = Anvil::new().try_spawn().unwrap();
@@ -283,6 +300,17 @@ mod tests {
283300
}
284301
}
285302

303+
#[tokio::test]
304+
async fn accepts_zero_confirmations() -> anyhow::Result<()> {
305+
let provider = RootProvider::<Ethereum>::new(RpcClient::mocked(Asserter::new()));
306+
let scanner =
307+
EventScannerBuilder::latest(1).block_confirmations(0).connect(provider).await?;
308+
309+
assert_eq!(scanner.config.block_confirmations, 0);
310+
311+
Ok(())
312+
}
313+
286314
#[tokio::test]
287315
async fn test_latest_scanner_with_mixed_block_types() {
288316
let anvil = Anvil::new().try_spawn().unwrap();

src/event_scanner/scanner/live.rs

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,22 +84,31 @@ mod tests {
8484
rpc::client::RpcClient,
8585
};
8686

87+
use crate::{
88+
block_range_scanner::DEFAULT_BLOCK_CONFIRMATIONS,
89+
event_scanner::scanner::DEFAULT_MAX_CONCURRENT_FETCHES,
90+
};
91+
8792
use super::*;
8893

8994
#[test]
9095
fn test_live_scanner_builder_pattern() {
91-
let builder = EventScannerBuilder::live().max_block_range(25).block_confirmations(5);
96+
let builder = EventScannerBuilder::live()
97+
.max_block_range(25)
98+
.block_confirmations(5)
99+
.max_concurrent_fetches(10);
92100

93101
assert_eq!(builder.block_range_scanner.max_block_range, 25);
94102
assert_eq!(builder.config.block_confirmations, 5);
103+
assert_eq!(builder.config.max_concurrent_fetches, 10);
95104
}
96105

97106
#[test]
98-
fn test_live_scanner_builder_with_zero_confirmations() {
99-
let builder = EventScannerBuilder::live().block_confirmations(0).max_block_range(100);
107+
fn test_historic_scanner_builder_default_values() {
108+
let builder = EventScannerBuilder::live();
100109

101-
assert_eq!(builder.config.block_confirmations, 0);
102-
assert_eq!(builder.block_range_scanner.max_block_range, 100);
110+
assert_eq!(builder.config.block_confirmations, DEFAULT_BLOCK_CONFIRMATIONS);
111+
assert_eq!(builder.config.max_concurrent_fetches, DEFAULT_MAX_CONCURRENT_FETCHES);
103112
}
104113

105114
#[test]
@@ -110,10 +119,23 @@ mod tests {
110119
.max_block_range(105)
111120
.block_confirmations(2)
112121
.block_confirmations(4)
113-
.block_confirmations(8);
122+
.block_confirmations(8)
123+
.max_concurrent_fetches(10)
124+
.max_concurrent_fetches(20);
114125

115126
assert_eq!(builder.block_range_scanner.max_block_range, 105);
116127
assert_eq!(builder.config.block_confirmations, 8);
128+
assert_eq!(builder.config.max_concurrent_fetches, 20);
129+
}
130+
131+
#[tokio::test]
132+
async fn test_live_scanner_accepts_zero_confirmations() -> anyhow::Result<()> {
133+
let provider = RootProvider::<Ethereum>::new(RpcClient::mocked(Asserter::new()));
134+
let scanner = EventScannerBuilder::live().block_confirmations(0).connect(provider).await?;
135+
136+
assert_eq!(scanner.config.block_confirmations, 0);
137+
138+
Ok(())
117139
}
118140

119141
#[tokio::test]
@@ -126,4 +148,12 @@ mod tests {
126148
_ => panic!("Expected InvalidMaxBlockRange error"),
127149
}
128150
}
151+
152+
#[tokio::test]
153+
async fn returns_error_with_zero_max_concurrent_fetches() {
154+
let provider = RootProvider::<Ethereum>::new(RpcClient::mocked(Asserter::new()));
155+
let result = EventScannerBuilder::live().max_concurrent_fetches(0).connect(provider).await;
156+
157+
assert!(matches!(result, Err(ScannerError::InvalidMaxConcurrentFetches)));
158+
}
129159
}

src/event_scanner/scanner/sync/from_block.rs

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -98,38 +98,49 @@ mod tests {
9898
};
9999
use alloy_node_bindings::Anvil;
100100

101+
use crate::{
102+
block_range_scanner::{DEFAULT_BLOCK_CONFIRMATIONS, DEFAULT_MAX_BLOCK_RANGE},
103+
event_scanner::scanner::DEFAULT_MAX_CONCURRENT_FETCHES,
104+
};
105+
101106
use super::*;
102107

103108
#[test]
104109
fn sync_scanner_builder_pattern() {
105-
let builder =
106-
EventScannerBuilder::sync().from_block(50).max_block_range(25).block_confirmations(5);
110+
let builder = EventScannerBuilder::sync()
111+
.from_block(50)
112+
.max_block_range(25)
113+
.block_confirmations(5)
114+
.max_concurrent_fetches(10);
107115

108116
assert_eq!(builder.block_range_scanner.max_block_range, 25);
109117
assert_eq!(builder.config.block_confirmations, 5);
118+
assert_eq!(builder.config.max_concurrent_fetches, 10);
110119
assert_eq!(builder.config.from_block, BlockNumberOrTag::Number(50).into());
111120
}
112121

113122
#[test]
114-
fn sync_scanner_builder_with_different_block_types() {
115-
let builder = EventScannerBuilder::sync()
116-
.from_block(BlockNumberOrTag::Earliest)
117-
.block_confirmations(20)
118-
.max_block_range(100);
123+
fn sync_scanner_builder_default_values() {
124+
let builder = EventScannerBuilder::sync().from_block(BlockNumberOrTag::Earliest);
119125

120126
assert_eq!(builder.config.from_block, BlockNumberOrTag::Earliest.into());
121-
assert_eq!(builder.config.block_confirmations, 20);
122-
assert_eq!(builder.block_range_scanner.max_block_range, 100);
127+
assert_eq!(builder.config.block_confirmations, DEFAULT_BLOCK_CONFIRMATIONS);
128+
assert_eq!(builder.config.max_concurrent_fetches, DEFAULT_MAX_CONCURRENT_FETCHES);
129+
assert_eq!(builder.block_range_scanner.max_block_range, DEFAULT_MAX_BLOCK_RANGE);
123130
}
124131

125-
#[test]
126-
fn sync_scanner_builder_with_zero_confirmations() {
127-
let builder =
128-
EventScannerBuilder::sync().from_block(0).block_confirmations(0).max_block_range(75);
132+
#[tokio::test]
133+
async fn accepts_zero_confirmations() -> anyhow::Result<()> {
134+
let provider = RootProvider::<Ethereum>::new(RpcClient::mocked(Asserter::new()));
135+
let scanner = EventScannerBuilder::sync()
136+
.from_block(BlockNumberOrTag::Earliest)
137+
.block_confirmations(0)
138+
.connect(provider)
139+
.await?;
140+
141+
assert_eq!(scanner.config.block_confirmations, 0);
129142

130-
assert_eq!(builder.config.from_block, BlockNumberOrTag::Number(0).into());
131-
assert_eq!(builder.config.block_confirmations, 0);
132-
assert_eq!(builder.block_range_scanner.max_block_range, 75);
143+
Ok(())
133144
}
134145

135146
#[test]
@@ -140,11 +151,26 @@ mod tests {
140151
.max_block_range(55)
141152
.max_block_range(105)
142153
.block_confirmations(5)
143-
.block_confirmations(7);
154+
.block_confirmations(7)
155+
.max_concurrent_fetches(10)
156+
.max_concurrent_fetches(20);
144157

145158
assert_eq!(builder.block_range_scanner.max_block_range, 105);
146159
assert_eq!(builder.config.from_block, BlockNumberOrTag::Number(2).into());
147160
assert_eq!(builder.config.block_confirmations, 7);
161+
assert_eq!(builder.config.max_concurrent_fetches, 20);
162+
}
163+
164+
#[tokio::test]
165+
async fn returns_error_with_zero_max_concurrent_fetches() {
166+
let provider = RootProvider::<Ethereum>::new(RpcClient::mocked(Asserter::new()));
167+
let result = EventScannerBuilder::sync()
168+
.from_block(0)
169+
.max_concurrent_fetches(0)
170+
.connect(provider)
171+
.await;
172+
173+
assert!(matches!(result, Err(ScannerError::InvalidMaxConcurrentFetches)));
148174
}
149175

150176
#[tokio::test]

src/event_scanner/scanner/sync/from_latest.rs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,81 @@ mod tests {
134134
rpc::client::RpcClient,
135135
};
136136

137+
use crate::{
138+
block_range_scanner::{DEFAULT_BLOCK_CONFIRMATIONS, DEFAULT_MAX_BLOCK_RANGE},
139+
event_scanner::scanner::DEFAULT_MAX_CONCURRENT_FETCHES,
140+
};
141+
137142
use super::*;
138143

144+
#[test]
145+
fn builder_pattern() {
146+
let builder = EventScannerBuilder::sync()
147+
.from_latest(1)
148+
.block_confirmations(2)
149+
.max_block_range(50)
150+
.max_concurrent_fetches(10);
151+
152+
assert_eq!(builder.config.count, 1);
153+
assert_eq!(builder.config.block_confirmations, 2);
154+
assert_eq!(builder.block_range_scanner.max_block_range, 50);
155+
assert_eq!(builder.config.max_concurrent_fetches, 10);
156+
}
157+
158+
#[test]
159+
fn builder_with_default_values() {
160+
let builder = EventScannerBuilder::sync().from_latest(1);
161+
162+
assert_eq!(builder.config.count, 1);
163+
assert_eq!(builder.config.block_confirmations, DEFAULT_BLOCK_CONFIRMATIONS);
164+
assert_eq!(builder.block_range_scanner.max_block_range, DEFAULT_MAX_BLOCK_RANGE);
165+
assert_eq!(builder.config.max_concurrent_fetches, DEFAULT_MAX_CONCURRENT_FETCHES);
166+
}
167+
168+
#[test]
169+
fn builder_last_call_wins() {
170+
let builder = EventScannerBuilder::sync()
171+
.from_latest(1)
172+
.max_block_range(25)
173+
.max_block_range(55)
174+
.max_block_range(105)
175+
.block_confirmations(2)
176+
.block_confirmations(3)
177+
.max_concurrent_fetches(10)
178+
.max_concurrent_fetches(20);
179+
180+
assert_eq!(builder.config.count, 1);
181+
assert_eq!(builder.block_range_scanner.max_block_range, 105);
182+
assert_eq!(builder.config.block_confirmations, 3);
183+
assert_eq!(builder.config.max_concurrent_fetches, 20);
184+
}
185+
186+
#[tokio::test]
187+
async fn accepts_zero_confirmations() -> anyhow::Result<()> {
188+
let provider = RootProvider::<Ethereum>::new(RpcClient::mocked(Asserter::new()));
189+
let scanner = EventScannerBuilder::sync()
190+
.from_latest(1)
191+
.block_confirmations(0)
192+
.connect(provider)
193+
.await?;
194+
195+
assert_eq!(scanner.config.block_confirmations, 0);
196+
197+
Ok(())
198+
}
199+
200+
#[tokio::test]
201+
async fn returns_error_with_zero_max_concurrent_fetches() {
202+
let provider = RootProvider::<Ethereum>::new(RpcClient::mocked(Asserter::new()));
203+
let result = EventScannerBuilder::sync()
204+
.from_latest(1)
205+
.max_concurrent_fetches(0)
206+
.connect(provider)
207+
.await;
208+
209+
assert!(matches!(result, Err(ScannerError::InvalidMaxConcurrentFetches)));
210+
}
211+
139212
#[tokio::test]
140213
async fn test_sync_from_latest_returns_error_with_zero_count() {
141214
let provider = RootProvider::<Ethereum>::new(RpcClient::mocked(Asserter::new()));

0 commit comments

Comments
 (0)