Skip to content

Commit 19329d6

Browse files
committed
test util
1 parent a9000e9 commit 19329d6

7 files changed

Lines changed: 56 additions & 60 deletions

File tree

crates/common/src/config/mux.rs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ mod tests {
432432
use super::*;
433433
use crate::{
434434
config::{HTTP_TIMEOUT_SECONDS_DEFAULT, MUXER_HTTP_MAX_LENGTH},
435-
utils::{set_ignore_content_length, ResponseReadError},
435+
utils::{bls_pubkey_from_hex_unchecked, set_ignore_content_length, ResponseReadError},
436436
};
437437

438438
const TEST_HTTP_TIMEOUT: u64 = 2;
@@ -487,15 +487,9 @@ mod tests {
487487
// NOTE: requires that ssv_data.json dpesn't change
488488
assert_eq!(response.validators.len(), 3);
489489
let expected_pubkeys = [
490-
BlsPublicKey::deserialize(
491-
&alloy::hex!("967ba17a3e7f82a25aa5350ec34d6923e28ad8237b5a41efe2c5e325240d74d87a015bf04634f21900963539c8229b2a")
492-
).unwrap(),
493-
BlsPublicKey::deserialize(
494-
&alloy::hex!("ac769e8cec802e8ffee34de3253be8f438a0c17ee84bdff0b6730280d24b5ecb77ebc9c985281b41ee3bda8663b6658c"),
495-
).unwrap(),
496-
BlsPublicKey::deserialize(
497-
&alloy::hex!("8c866a5a05f3d45c49b457e29365259021a509c5daa82e124f9701a960ee87b8902e87175315ab638a3d8b1115b23639"),
498-
).unwrap(),
490+
bls_pubkey_from_hex_unchecked("967ba17a3e7f82a25aa5350ec34d6923e28ad8237b5a41efe2c5e325240d74d87a015bf04634f21900963539c8229b2a"),
491+
bls_pubkey_from_hex_unchecked("ac769e8cec802e8ffee34de3253be8f438a0c17ee84bdff0b6730280d24b5ecb77ebc9c985281b41ee3bda8663b6658c"),
492+
bls_pubkey_from_hex_unchecked("8c866a5a05f3d45c49b457e29365259021a509c5daa82e124f9701a960ee87b8902e87175315ab638a3d8b1115b23639"),
499493
];
500494
for (i, validator) in response.validators.iter().enumerate() {
501495
assert_eq!(validator.pubkey, expected_pubkeys[i]);

crates/common/src/pbs/relay.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,14 +128,14 @@ impl RelayClient {
128128
mod tests {
129129
use std::collections::HashMap;
130130

131-
use alloy::{hex, primitives::B256};
131+
use alloy::primitives::B256;
132132

133133
use super::{RelayClient, RelayEntry};
134-
use crate::{config::RelayConfig, types::BlsPublicKey};
134+
use crate::{config::RelayConfig, utils::bls_pubkey_from_hex_unchecked};
135135

136136
#[test]
137137
fn test_relay_entry() {
138-
let pubkey = BlsPublicKey::deserialize(&hex!("0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae")).unwrap();
138+
let pubkey = bls_pubkey_from_hex_unchecked("0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae");
139139
let s = format!("http://{pubkey}@abc.xyz/");
140140

141141
let parsed = serde_json::from_str::<RelayEntry>(&format!("\"{s}\"")).unwrap();
@@ -149,7 +149,7 @@ mod tests {
149149
fn test_relay_url() {
150150
let slot = 0;
151151
let parent_hash = B256::ZERO;
152-
let validator_pubkey = BlsPublicKey::deserialize(&hex!("0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae")).unwrap();
152+
let validator_pubkey = bls_pubkey_from_hex_unchecked("0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae");
153153
let expected = format!("http://0xa1cec75a3f0661e99299274182938151e8433c61a19222347ea1313d839229cb4ce4e3e5aa2bdeb71c8fcf1b084963c2@abc.xyz/eth/v1/builder/header/{slot}/{parent_hash}/{validator_pubkey}");
154154

155155
let relay_config = r#"
@@ -183,7 +183,7 @@ mod tests {
183183
fn test_relay_url_with_get_params() {
184184
let slot = 0;
185185
let parent_hash = B256::ZERO;
186-
let validator_pubkey = BlsPublicKey::deserialize(&hex!("0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae")).unwrap();
186+
let validator_pubkey = bls_pubkey_from_hex_unchecked("0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae");
187187
// Note: HashMap iteration order is not guaranteed, so we can't predict the
188188
// exact order of parameters Instead of hard-coding the order, we'll
189189
// check that both parameters are present in the URL

crates/common/src/signer/loader.rs

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use super::{BlsSigner, EcdsaSigner, PrysmDecryptedKeystore, PrysmKeystore};
2020
use crate::{
2121
config::{load_env_var, SIGNER_DIR_KEYS_ENV, SIGNER_DIR_SECRETS_ENV, SIGNER_KEYS_ENV},
2222
signer::ConsensusSigner,
23-
types::BlsPublicKey,
23+
utils::bls_pubkey_from_hex,
2424
};
2525

2626
#[derive(Debug, Serialize, Deserialize, Clone)]
@@ -124,14 +124,12 @@ fn load_from_lighthouse_format(
124124
}
125125

126126
let maybe_pubkey = path.file_name().and_then(|d| d.to_str())?;
127-
let Ok(decoded) = alloy::primitives::hex::decode(maybe_pubkey) else {
128-
warn!("Invalid pubkey: {}", maybe_pubkey);
129-
return None
130-
};
131-
132-
let Ok(pubkey) = BlsPublicKey::deserialize(&decoded) else {
133-
warn!("Invalid pubkey: {}", maybe_pubkey);
134-
return None
127+
let pubkey = match bls_pubkey_from_hex(maybe_pubkey) {
128+
Ok(pubkey) => pubkey,
129+
Err(e) => {
130+
warn!("Invalid pubkey: {}: {}", maybe_pubkey, e);
131+
return None
132+
}
135133
};
136134

137135
let ks_path = keys_path.join(maybe_pubkey).join("voting-keystore.json");
@@ -304,15 +302,13 @@ pub fn load_ecdsa_signer(keys_path: PathBuf, secrets_path: PathBuf) -> eyre::Res
304302
#[cfg(test)]
305303
mod tests {
306304

307-
use alloy::hex;
308-
309305
use super::{load_from_lighthouse_format, load_from_lodestar_format, FileKey};
310306
use crate::{
311307
signer::{
312308
loader::{load_from_prysm_format, load_from_teku_format},
313309
BlsSigner,
314310
},
315-
types::BlsPublicKey,
311+
utils::bls_pubkey_from_hex_unchecked,
316312
};
317313

318314
#[test]
@@ -333,12 +329,10 @@ mod tests {
333329

334330
fn test_correct_load(signers: Vec<BlsSigner>) {
335331
assert_eq!(signers.len(), 2);
336-
assert!(signers.iter().any(|s| s.pubkey() == BlsPublicKey::deserialize(&
337-
hex!("883827193f7627cd04e621e1e8d56498362a52b2a30c9a1c72036eb935c4278dee23d38a24d2f7dda62689886f0c39f4")
338-
).unwrap()));
339-
assert!(signers.iter().any(|s| s.pubkey() == BlsPublicKey::deserialize(&
340-
hex!("b3a22e4a673ac7a153ab5b3c17a4dbef55f7e47210b20c0cbb0e66df5b36bb49ef808577610b034172e955d2312a61b9")
341-
).unwrap()));
332+
assert!(signers.iter().any(|s| s.pubkey() == bls_pubkey_from_hex_unchecked("883827193f7627cd04e621e1e8d56498362a52b2a30c9a1c72036eb935c4278dee23d38a24d2f7dda62689886f0c39f4")
333+
));
334+
assert!(signers.iter().any(|s| s.pubkey() == bls_pubkey_from_hex_unchecked("b3a22e4a673ac7a153ab5b3c17a4dbef55f7e47210b20c0cbb0e66df5b36bb49ef808577610b034172e955d2312a61b9")
335+
));
342336
}
343337

344338
#[test]
@@ -389,9 +383,9 @@ mod tests {
389383
let signers = result.unwrap();
390384

391385
assert_eq!(signers.len(), 1);
392-
assert!(signers[0].pubkey() == BlsPublicKey::deserialize(&
393-
hex!("883827193f7627cd04e621e1e8d56498362a52b2a30c9a1c72036eb935c4278dee23d38a24d2f7dda62689886f0c39f4")
394-
).unwrap());
386+
assert!(signers[0].pubkey() == bls_pubkey_from_hex_unchecked(
387+
"883827193f7627cd04e621e1e8d56498362a52b2a30c9a1c72036eb935c4278dee23d38a24d2f7dda62689886f0c39f4"
388+
));
395389

396390
let result = load_from_lodestar_format(
397391
"../../tests/data/keystores/teku-keys/".into(),
@@ -403,8 +397,8 @@ mod tests {
403397
let signers = result.unwrap();
404398

405399
assert_eq!(signers.len(), 1);
406-
assert!(signers[0].pubkey() == BlsPublicKey::deserialize(&
407-
hex!("b3a22e4a673ac7a153ab5b3c17a4dbef55f7e47210b20c0cbb0e66df5b36bb49ef808577610b034172e955d2312a61b9")
408-
).unwrap());
400+
assert!(signers[0].pubkey() == bls_pubkey_from_hex_unchecked(
401+
"b3a22e4a673ac7a153ab5b3c17a4dbef55f7e47210b20c0cbb0e66df5b36bb49ef808577610b034172e955d2312a61b9"
402+
));
409403
}
410404
}

crates/common/src/signer/store.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,7 @@ mod test {
533533
commit::request::{ProxyDelegationBls, SignedProxyDelegationBls},
534534
signer::ConsensusSigner,
535535
types::Chain,
536+
utils::bls_pubkey_from_hex_unchecked,
536537
};
537538

538539
#[tokio::test]
@@ -611,17 +612,8 @@ mod test {
611612
assert_eq!(proxy_signers.bls_signers.len(), 1);
612613
assert_eq!(proxy_signers.ecdsa_signers.len(), 0);
613614

614-
let proxy_key = BlsPublicKey::deserialize(
615-
&hex::decode(
616-
"a77084280678d9f1efe4ef47a3d62af27872ce82db19a35ee012c4fd5478e6b1123b8869032ba18b2383e8873294f0ba"
617-
).unwrap()
618-
).unwrap();
619-
620-
let consensus_key = BlsPublicKey::deserialize(
621-
&hex::decode(
622-
"ac5e059177afc33263e95d0be0690138b9a1d79a6e19018086a0362e0c30a50bf9e05a08cb44785724d0b2718c5c7118"
623-
).unwrap()
624-
).unwrap();
615+
let proxy_key = bls_pubkey_from_hex_unchecked("a77084280678d9f1efe4ef47a3d62af27872ce82db19a35ee012c4fd5478e6b1123b8869032ba18b2383e8873294f0ba");
616+
let consensus_key = bls_pubkey_from_hex_unchecked("ac5e059177afc33263e95d0be0690138b9a1d79a6e19018086a0362e0c30a50bf9e05a08cb44785724d0b2718c5c7118");
625617

626618
let proxy_signer = proxy_signers.bls_signers.get(&proxy_key);
627619

crates/common/src/utils.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::{
55
time::{SystemTime, UNIX_EPOCH},
66
};
77

8-
use alloy::primitives::U256;
8+
use alloy::{hex, primitives::U256};
99
use axum::http::HeaderValue;
1010
use futures::StreamExt;
1111
use lh_types::test_utils::{SeedableRng, TestRandom, XorShiftRng};
@@ -27,7 +27,7 @@ use crate::{
2727
config::LogsSettings,
2828
constants::SIGNER_JWT_EXPIRATION,
2929
pbs::HEADER_VERSION_VALUE,
30-
types::{Chain, Jwt, JwtClaims, ModuleId},
30+
types::{BlsPublicKey, Chain, Jwt, JwtClaims, ModuleId},
3131
};
3232

3333
const MILLIS_PER_SECOND: u64 = 1_000;
@@ -441,6 +441,22 @@ pub trait TestRandomSeed: TestRandom {
441441

442442
impl<T: TestRandom> TestRandomSeed for T {}
443443

444+
pub fn bls_pubkey_from_hex(hex: &str) -> eyre::Result<BlsPublicKey> {
445+
let Ok(bytes) = hex::decode(hex) else {
446+
eyre::bail!("invalid hex pubkey: {hex}");
447+
};
448+
449+
let pubkey = BlsPublicKey::deserialize(&bytes)
450+
.map_err(|e| eyre::eyre!("invalid hex pubkey: {hex}: {e:?}"))?;
451+
452+
Ok(pubkey)
453+
}
454+
455+
#[cfg(test)]
456+
pub fn bls_pubkey_from_hex_unchecked(hex: &str) -> BlsPublicKey {
457+
bls_pubkey_from_hex(hex).unwrap()
458+
}
459+
444460
#[cfg(test)]
445461
mod test {
446462
use super::{create_jwt, decode_jwt, validate_jwt};

tests/src/mock_validator.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
use alloy::{hex, primitives::B256, rpc::types::beacon::relay::ValidatorRegistration};
1+
use alloy::{primitives::B256, rpc::types::beacon::relay::ValidatorRegistration};
22
use cb_common::{
33
pbs::{RelayClient, SignedBlindedBeaconBlock},
44
types::BlsPublicKey,
5+
utils::bls_pubkey_from_hex,
56
};
67
use reqwest::Response;
78

@@ -13,12 +14,12 @@ pub struct MockValidator {
1314

1415
impl MockValidator {
1516
pub fn new(port: u16) -> eyre::Result<Self> {
16-
let pubkey = BlsPublicKey::deserialize(&hex!("0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae")).unwrap();
17+
let pubkey = bls_pubkey_from_hex("0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae")?;
1718
Ok(Self { comm_boost: generate_mock_relay(port, pubkey)? })
1819
}
1920

2021
pub async fn do_get_header(&self, pubkey: Option<BlsPublicKey>) -> eyre::Result<Response> {
21-
let default_pubkey = BlsPublicKey::deserialize(&hex!("0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae")).unwrap();
22+
let default_pubkey = bls_pubkey_from_hex("0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae")?;
2223
let url =
2324
self.comm_boost.get_header_url(0, &B256::ZERO, &pubkey.unwrap_or(default_pubkey))?;
2425
Ok(self.comm_boost.client.get(url).send().await?)

tests/tests/signer_jwt_auth.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
use std::{collections::HashMap, time::Duration};
22

3-
use alloy::hex;
43
use cb_common::{
54
commit::{constants::GET_PUBKEYS_PATH, request::GetPubkeysResponse},
65
config::StartSignerConfig,
76
signer::{SignerLoader, ValidatorKeysFormat},
8-
types::{BlsPublicKey, Chain, ModuleId},
9-
utils::create_jwt,
7+
types::{Chain, ModuleId},
8+
utils::{bls_pubkey_from_hex, create_jwt},
109
};
1110
use cb_signer::service::SigningService;
1211
use cb_tests::utils::{get_signer_config, get_start_signer_config, setup_test_env};
@@ -131,8 +130,8 @@ async fn verify_pubkeys(response: Response) -> Result<()> {
131130
let pubkey_json = response.json::<GetPubkeysResponse>().await?;
132131
assert_eq!(pubkey_json.keys.len(), 2);
133132
let expected_pubkeys = vec![
134-
BlsPublicKey::deserialize(&hex!("883827193f7627cd04e621e1e8d56498362a52b2a30c9a1c72036eb935c4278dee23d38a24d2f7dda62689886f0c39f4")).unwrap(),
135-
BlsPublicKey::deserialize(&hex!("b3a22e4a673ac7a153ab5b3c17a4dbef55f7e47210b20c0cbb0e66df5b36bb49ef808577610b034172e955d2312a61b9")).unwrap(),
133+
bls_pubkey_from_hex("883827193f7627cd04e621e1e8d56498362a52b2a30c9a1c72036eb935c4278dee23d38a24d2f7dda62689886f0c39f4")?,
134+
bls_pubkey_from_hex("b3a22e4a673ac7a153ab5b3c17a4dbef55f7e47210b20c0cbb0e66df5b36bb49ef808577610b034172e955d2312a61b9")?,
136135
];
137136
for expected in expected_pubkeys {
138137
assert!(

0 commit comments

Comments
 (0)