Skip to content

Commit 514a276

Browse files
committed
Add get_by_slot_fallback_to_head
1 parent 1bac052 commit 514a276

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

crates/charon/src/eth2wrap/valcache.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,44 @@ mod tests {
460460
assert!(result.is_err());
461461
}
462462

463+
#[tokio::test]
464+
async fn get_by_slot_fallback_to_head() {
465+
// Create two validator pubkeys
466+
let pubkeys = vec![test_pubkey(0), test_pubkey(1)];
467+
468+
// Set up mock server: slot requests fail, but head succeeds
469+
let mock_server = MockServer::start().await;
470+
471+
post_state_validators_not_found("1")
472+
.mount(&mock_server)
473+
.await;
474+
475+
post_state_validators_success(
476+
"head",
477+
vec![
478+
test_validator_datum(0, &pubkeys[0], ValidatorStatus::ActiveOngoing),
479+
test_validator_datum(1, &pubkeys[1], ValidatorStatus::ActiveOngoing),
480+
],
481+
)
482+
.mount(&mock_server)
483+
.await;
484+
485+
let eth2_cl = EthBeaconNodeApiClient::with_base_url(mock_server.uri())
486+
.expect("Failed to create client");
487+
488+
let cache = ValidatorCache::new(eth2_cl, pubkeys);
489+
490+
// Test slot 1: fails, falls back to head, returns 2 active, 2 complete,
491+
// refreshed_by_slot=false
492+
let (active, complete, refreshed_by_slot) = cache
493+
.get_by_slot(1)
494+
.await
495+
.expect("`get_by_slot(1)` succeeds via head fallback");
496+
assert_eq!(active.len(), 2);
497+
assert_eq!(complete.len(), 2);
498+
assert!(!refreshed_by_slot);
499+
}
500+
463501
fn test_pubkey(seed: u8) -> PubKey {
464502
let mut bytes = [0u8; 48];
465503
bytes[0] = seed;

0 commit comments

Comments
 (0)