mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-03 00:31:50 +00:00
## Issue Addressed resolves #2129 resolves #2099 addresses some of #1712 unblocks #2076 unblocks #2153 ## Proposed Changes - Updates all the dependencies mentioned in #2129, except for web3. They haven't merged their tokio 1.0 update because they are waiting on some dependencies of their own. Since we only use web3 in tests, I think updating it in a separate issue is fine. If they are able to merge soon though, I can update in this PR. - Updates `tokio_util` to 0.6.2 and `bytes` to 1.0.1. - We haven't made a discv5 release since merging tokio 1.0 updates so I'm using a commit rather than release atm. **Edit:** I think we should merge an update of `tokio_util` to 0.6.2 into discv5 before this release because it has panic fixes in `DelayQueue` --> PR in discv5: https://github.com/sigp/discv5/pull/58 ## Additional Info tokio 1.0 changes that required some changes in lighthouse: - `interval.next().await.is_some()` -> `interval.tick().await` - `sleep` future is now `!Unpin` -> https://github.com/tokio-rs/tokio/issues/3028 - `try_recv` has been temporarily removed from `mpsc` -> https://github.com/tokio-rs/tokio/issues/3350 - stream features have moved to `tokio-stream` and `broadcast::Receiver::into_stream()` has been temporarily removed -> `https://github.com/tokio-rs/tokio/issues/2870 - I've copied over the `BroadcastStream` wrapper from this PR, but can update to use `tokio-stream` once it's merged https://github.com/tokio-rs/tokio/pull/3384 Co-authored-by: realbigsean <seananderson33@gmail.com>
142 lines
3.7 KiB
Rust
142 lines
3.7 KiB
Rust
use crate::*;
|
|
use clap::{App, Arg, ArgMatches};
|
|
use environment::{Environment, EnvironmentBuilder};
|
|
pub use local_signer_test_data::*;
|
|
use remote_signer_client::Client;
|
|
use serde_json::Value;
|
|
use std::collections::HashMap;
|
|
use tempfile::{Builder as TempBuilder, TempDir};
|
|
use types::EthSpec;
|
|
|
|
pub struct ApiTestSigner<E: EthSpec> {
|
|
pub address: String,
|
|
environment: Environment<E>,
|
|
}
|
|
|
|
pub struct ApiTestResponse {
|
|
pub status: u16,
|
|
pub json: Value,
|
|
}
|
|
|
|
impl ApiTestSigner<E> {
|
|
pub fn new(arg_vec: Vec<&str>) -> Self {
|
|
let matches = set_matches(arg_vec);
|
|
let mut environment = get_environment(false);
|
|
let runtime_context = environment.core_context();
|
|
|
|
let client = environment
|
|
.runtime()
|
|
.block_on(Client::new(runtime_context, &matches))
|
|
.map_err(|e| format!("Failed to init Rest API: {}", e))
|
|
.unwrap();
|
|
|
|
let address = get_address(&client);
|
|
|
|
Self {
|
|
address,
|
|
environment,
|
|
}
|
|
}
|
|
|
|
pub fn shutdown(mut self) {
|
|
self.environment.fire_signal()
|
|
}
|
|
}
|
|
|
|
pub fn set_matches(arg_vec: Vec<&str>) -> ArgMatches<'static> {
|
|
let matches = App::new("BLS_Remote_Signer")
|
|
.arg(
|
|
Arg::with_name("storage-raw-dir")
|
|
.long("storage-raw-dir")
|
|
.value_name("DIR"),
|
|
)
|
|
.arg(
|
|
Arg::with_name("port")
|
|
.long("port")
|
|
.value_name("PORT")
|
|
.default_value("9000")
|
|
.takes_value(true),
|
|
);
|
|
|
|
matches.get_matches_from(arg_vec)
|
|
}
|
|
|
|
pub fn get_environment(is_log_active: bool) -> Environment<E> {
|
|
let environment_builder = EnvironmentBuilder::mainnet();
|
|
|
|
let builder = if is_log_active {
|
|
environment_builder.async_logger("info", None).unwrap()
|
|
} else {
|
|
environment_builder.null_logger().unwrap()
|
|
};
|
|
|
|
builder
|
|
.multi_threaded_tokio_runtime()
|
|
.unwrap()
|
|
.build()
|
|
.unwrap()
|
|
}
|
|
|
|
pub fn set_up_api_test_signer_raw_dir() -> (ApiTestSigner<E>, TempDir) {
|
|
let tmp_dir = TempBuilder::new()
|
|
.prefix("bls-remote-signer-test")
|
|
.tempdir()
|
|
.unwrap();
|
|
let arg_vec = vec![
|
|
"this_test",
|
|
"--port",
|
|
"0",
|
|
"--storage-raw-dir",
|
|
tmp_dir.path().to_str().unwrap(),
|
|
];
|
|
let test_signer = ApiTestSigner::new(arg_vec);
|
|
|
|
(test_signer, tmp_dir)
|
|
}
|
|
|
|
pub fn set_up_api_test_signer_to_sign_message() -> (ApiTestSigner<E>, TempDir) {
|
|
let (test_signer, tmp_dir) = set_up_api_test_signer_raw_dir();
|
|
add_sub_dirs(&tmp_dir);
|
|
add_key_files(&tmp_dir);
|
|
add_non_key_files(&tmp_dir);
|
|
add_mismatched_key_file(&tmp_dir);
|
|
add_invalid_secret_key_file(&tmp_dir);
|
|
|
|
(test_signer, tmp_dir)
|
|
}
|
|
|
|
pub fn http_get(url: &str) -> ApiTestResponse {
|
|
let response = reqwest::blocking::get(url).unwrap();
|
|
|
|
ApiTestResponse {
|
|
status: response.status().as_u16(),
|
|
json: serde_json::from_str(&response.text().unwrap()).unwrap(),
|
|
}
|
|
}
|
|
|
|
pub fn http_post(url: &str, hashmap: HashMap<&str, &str>) -> ApiTestResponse {
|
|
let response = reqwest::blocking::Client::new()
|
|
.post(url)
|
|
.json(&hashmap)
|
|
.send()
|
|
.unwrap();
|
|
|
|
ApiTestResponse {
|
|
status: response.status().as_u16(),
|
|
json: serde_json::from_str(&response.text().unwrap()).unwrap(),
|
|
}
|
|
}
|
|
|
|
pub fn http_post_custom_body(url: &str, body: &str) -> ApiTestResponse {
|
|
let response = reqwest::blocking::Client::new()
|
|
.post(url)
|
|
.body(body.to_string())
|
|
.send()
|
|
.unwrap();
|
|
|
|
ApiTestResponse {
|
|
status: response.status().as_u16(),
|
|
json: serde_json::from_str(&response.text().unwrap()).unwrap(),
|
|
}
|
|
}
|