From e4cdc0a7ed2d0663be926569c0fb16d539e95850 Mon Sep 17 00:00:00 2001 From: Georgios Konstantopoulos Date: Mon, 23 May 2022 23:28:11 -0700 Subject: [PATCH] test: rotate rinkeby keys --- anvil/tests/it/fork.rs | 9 ++------- cli/test-utils/src/lib.rs | 3 --- cli/test-utils/src/macros.rs | 4 ++-- cli/tests/it/cast.rs | 3 ++- cli/tests/it/cmd.rs | 3 ++- forge/src/multi_runner.rs | 8 ++------ utils/src/lib.rs | 2 ++ {cli/test-utils => utils}/src/rpc.rs | 20 +++++++++++++------- 8 files changed, 25 insertions(+), 27 deletions(-) rename {cli/test-utils => utils}/src/rpc.rs (84%) diff --git a/anvil/tests/it/fork.rs b/anvil/tests/it/fork.rs index e6cc71ff1a3bc..0962272b6e4e5 100644 --- a/anvil/tests/it/fork.rs +++ b/anvil/tests/it/fork.rs @@ -11,9 +11,7 @@ use ethers::{ }; use std::sync::Arc; -// import helper module that provides rotating rpc endpoints -#[path = "../../../cli/test-utils/src/rpc.rs"] -mod rpc; +use foundry_utils::rpc; abigen!(Greeter, "test-data/greeter.json"); @@ -261,15 +259,12 @@ async fn can_deploy_greeter_on_rinkeby_fork() { NodeConfig::test() .with_port(next_port()) .with_eth_rpc_url(Some(rpc::next_rinkeby_http_rpc_endpoint())) - .silent() - .with_fork_block_number(Some(10074295u64)), + .silent(), ) .await; let provider = handle.http_provider(); let wallet = handle.dev_wallets().next().unwrap(); - let from = wallet.address(); let client = Arc::new(SignerMiddleware::new(provider, wallet)); - assert_eq!(client.get_transaction_count(from, None).await.unwrap(), 5845u64.into()); let greeter_contract = Greeter::deploy(Arc::clone(&client), "Hello World!".to_string()) .unwrap() diff --git a/cli/test-utils/src/lib.rs b/cli/test-utils/src/lib.rs index d893b49569536..893b930f2d480 100644 --- a/cli/test-utils/src/lib.rs +++ b/cli/test-utils/src/lib.rs @@ -8,6 +8,3 @@ pub mod util; pub use util::{TestCommand, TestProject}; pub use ethers_solc; - -pub mod rpc; -pub use rpc::next_http_rpc_endpoint; diff --git a/cli/test-utils/src/macros.rs b/cli/test-utils/src/macros.rs index ebdce86042a94..4febfad0286ce 100644 --- a/cli/test-utils/src/macros.rs +++ b/cli/test-utils/src/macros.rs @@ -133,7 +133,7 @@ macro_rules! forgetest_external { // Skip fork tests if the RPC url is not set. if $fork_block > 0 && std::env::var("ETH_RPC_URL").is_err() { eprintln!("Skipping test {}. ETH_RPC_URL is not set.", $repo); - return + return; }; let (prj, mut cmd) = $crate::util::setup_forge(stringify!($test), $style); @@ -170,7 +170,7 @@ macro_rules! forgetest_external { ]); cmd.set_env("FOUNDRY_FUZZ_RUNS", "1"); - let next_eth_rpc_url = $crate::next_http_rpc_endpoint(); + let next_eth_rpc_url = foundry_utils::rpc::next_http_rpc_endpoint(); if $fork_block > 0 { cmd.set_env("FOUNDRY_ETH_RPC_URL", next_eth_rpc_url); cmd.set_env("FOUNDRY_FORK_BLOCK_NUMBER", stringify!($fork_block)); diff --git a/cli/tests/it/cast.rs b/cli/tests/it/cast.rs index ea0c0884422e7..9f5b75f5d5d9d 100644 --- a/cli/tests/it/cast.rs +++ b/cli/tests/it/cast.rs @@ -1,9 +1,10 @@ //! Contains various tests for checking cast commands use foundry_cli_test_utils::{ - casttest, next_http_rpc_endpoint, + casttest, util::{TestCommand, TestProject}, }; +use foundry_utils::rpc::next_http_rpc_endpoint; // tests that the `cast find-block` command works correctly casttest!(finds_block, |_: TestProject, mut cmd: TestCommand| { diff --git a/cli/tests/it/cmd.rs b/cli/tests/it/cmd.rs index ba265457c5d32..ad6815b891beb 100644 --- a/cli/tests/it/cmd.rs +++ b/cli/tests/it/cmd.rs @@ -5,10 +5,11 @@ use ethers::solc::{ }; use foundry_cli_test_utils::{ ethers_solc::PathStyle, - forgetest, forgetest_ignore, forgetest_init, next_http_rpc_endpoint, + forgetest, forgetest_ignore, forgetest_init, util::{pretty_err, read_string, TestCommand, TestProject}, }; use foundry_config::{parse_with_profile, BasicConfig, Chain, Config, SolidityErrorCode}; +use foundry_utils::rpc::next_http_rpc_endpoint; use std::fs; use yansi::Paint; diff --git a/forge/src/multi_runner.rs b/forge/src/multi_runner.rs index 3fe7c4a66529f..df0a3d78bc347 100644 --- a/forge/src/multi_runner.rs +++ b/forge/src/multi_runner.rs @@ -1096,12 +1096,8 @@ mod tests { #[test] fn test_fork() { - let rpc_url = std::env::var("ETH_RPC_URL"); - if rpc_url.is_err() { - eprintln!("Skipping test, ETH_RPC_URL is not set."); - return - } - let mut runner = forked_runner(&(rpc_url.unwrap())); + let rpc_url = foundry_utils::rpc::next_http_archive_rpc_endpoint(); + let mut runner = forked_runner(&rpc_url); let suite_result = runner.test(&Filter::new(".*", ".*", ".*fork"), None, true).unwrap(); for (_, SuiteResult { test_results, .. }) in suite_result { diff --git a/utils/src/lib.rs b/utils/src/lib.rs index c2a3a612d1c40..3fed111144d81 100644 --- a/utils/src/lib.rs +++ b/utils/src/lib.rs @@ -24,6 +24,8 @@ use std::{ time::Duration, }; +pub mod rpc; + static SELECTOR_DATABASE_URL: &str = "https://sig.eth.samczsun.com/api/v1/signatures"; pub enum SelectorOrSig { diff --git a/cli/test-utils/src/rpc.rs b/utils/src/rpc.rs similarity index 84% rename from cli/test-utils/src/rpc.rs rename to utils/src/rpc.rs index c24e9cbd1896a..098500987600d 100644 --- a/cli/test-utils/src/rpc.rs +++ b/utils/src/rpc.rs @@ -40,12 +40,23 @@ const fn num_keys() -> usize { /// /// This will rotate all available rpc endpoints pub fn next_http_rpc_endpoint() -> String { + next_rpc_endpoint("mainnet") +} + +/// Returns the next _rinkeby_ rpc endpoint in inline +/// +/// This will rotate all available rpc endpoints +pub fn next_rinkeby_http_rpc_endpoint() -> String { + next_rpc_endpoint("rinkeby") +} + +pub fn next_rpc_endpoint(network: &str) -> String { let idx = next() % num_keys(); if idx < INFURA_KEYS.len() { - format!("https://mainnet.infura.io/v3/{}", INFURA_KEYS[idx]) + format!("https://{}.infura.io/v3/{}", network, INFURA_KEYS[idx]) } else { let idx = idx - INFURA_KEYS.len(); - format!("https://eth-mainnet.alchemyapi.io/v2/{}", ALCHEMY_MAINNET_KEYS[idx]) + format!("https://eth-{}.alchemyapi.io/v2/{}", network, ALCHEMY_MAINNET_KEYS[idx]) } } @@ -55,11 +66,6 @@ pub fn next_http_archive_rpc_endpoint() -> String { format!("https://eth-mainnet.alchemyapi.io/v2/{}", ALCHEMY_MAINNET_KEYS[idx]) } -pub fn next_rinkeby_http_rpc_endpoint() -> String { - // infura keys don't have access to archive state - "https://eth-rinkeby.alchemyapi.io/v2/9VWGraLx0tMiSWx05WH-ywgSVmMxs66W".to_string() -} - #[cfg(test)] mod tests { use super::*;