From ed718c4cbdac439a77e5b525d955bca0d4eb6556 Mon Sep 17 00:00:00 2001 From: FinsaasGH <89403560+FinsaasGH@users.noreply.github.com> Date: Thu, 21 Oct 2021 16:16:23 -0600 Subject: [PATCH 01/17] GH-457 (#1) * GH-457: Initial cleanup of dead parameter processing. node_configurator_standard.rs and mod.rs only * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * Delete test.txt * GH-457: Pulled commits from master, removed check_past_initialization and tests, removed TODO regarding request_existing_db_password. Removing it starts a chain of events resulting in node_configurator no longer working. * GH-457: Removed unused import. * GH-457: Removed request_existing_db_password and associated code, refactored get_db_password to pull from persistent config, removed associated tests * GH-457: Restored 2 removed tests * GH-457: Removal of streams and conflicted code. * GH-457: Updated tests and calls to run_modes_factories.rs * GH-457: removed unnecessary validators * Update and rename ci-matrix.yml to ci-ubuntu-latest.yml * Update ci-ubuntu-latest.yml * Create ci-windows-latest.yml * Create ci-macOS-latest.yml * Delete ci-windows-latest.yml * Delete ci-macOS-latest.yml * Update and rename ci-ubuntu-latest.yml to ci-matrix.yml * GH-457: Updated command_processor.rs with new clippy requirements Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH --- .github/workflows/ci-matrix.yml | 1 + masq/src/command_processor.rs | 5 +- node/src/bootstrapper.rs | 6 +- node/src/daemon/setup_reporter.rs | 27 +- node/src/node_configurator/mod.rs | 1397 +---------------- .../node_configurator_initialization.rs | 24 +- .../node_configurator_standard.rs | 368 +---- node/src/run_modes.rs | 2 +- node/src/run_modes_factories.rs | 31 +- 9 files changed, 62 insertions(+), 1799 deletions(-) diff --git a/.github/workflows/ci-matrix.yml b/.github/workflows/ci-matrix.yml index 3f7735130..882a006cf 100644 --- a/.github/workflows/ci-matrix.yml +++ b/.github/workflows/ci-matrix.yml @@ -47,3 +47,4 @@ jobs: with: name: Build Results ${{ matrix.os }} path: results + diff --git a/masq/src/command_processor.rs b/masq/src/command_processor.rs index 044391134..e73265b4b 100644 --- a/masq/src/command_processor.rs +++ b/masq/src/command_processor.rs @@ -54,10 +54,9 @@ impl CommandProcessor for CommandProcessorReal { fn process(&mut self, command: Box) -> Result<(), CommandError> { if let Some(synchronizer) = self.context.terminal_interface.clone() { let _lock = synchronizer.lock(); - command.execute(&mut self.context) - } else { - command.execute(&mut self.context) + return command.execute(&mut self.context); } + command.execute(&mut self.context) } fn close(&mut self) { diff --git a/node/src/bootstrapper.rs b/node/src/bootstrapper.rs index 66fb43583..ae086fb89 100644 --- a/node/src/bootstrapper.rs +++ b/node/src/bootstrapper.rs @@ -391,7 +391,7 @@ impl ConfiguredByPrivilege for Bootstrapper { &mut self, multi_config: &MultiConfig, ) -> Result<(), ConfiguratorError> { - self.config = NodeConfiguratorStandardPrivileged::new().configure(multi_config, None)?; + self.config = NodeConfiguratorStandardPrivileged::new().configure(multi_config)?; self.logger_initializer.init( self.config.data_directory.clone(), &self.config.real_user, @@ -422,8 +422,8 @@ impl ConfiguredByPrivilege for Bootstrapper { ) -> Result<(), ConfiguratorError> { // NOTE: The following line of code is not covered by unit tests fdlimit::raise_fd_limit(); - let unprivileged_config = NodeConfiguratorStandardUnprivileged::new(&self.config) - .configure(multi_config, Some(streams))?; + let unprivileged_config = + NodeConfiguratorStandardUnprivileged::new(&self.config).configure(multi_config)?; self.config.merge_unprivileged(unprivileged_config); self.set_up_clandestine_port(); let (cryptde_ref, _) = Bootstrapper::initialize_cryptdes( diff --git a/node/src/daemon/setup_reporter.rs b/node/src/daemon/setup_reporter.rs index 767e69a06..f83d47c77 100644 --- a/node/src/daemon/setup_reporter.rs +++ b/node/src/daemon/setup_reporter.rs @@ -22,7 +22,6 @@ use crate::sub_lib::utils::make_new_multi_config; use crate::test_utils::main_cryptde; use clap::value_t; use itertools::Itertools; -use masq_lib::command::StdStreams; use masq_lib::constants::DEFAULT_CHAIN_NAME; use masq_lib::messages::UiSetupResponseValueStatus::{Blank, Configured, Default, Required, Set}; use masq_lib::messages::{UiSetupRequestValue, UiSetupResponseValue, UiSetupResponseValueStatus}; @@ -30,7 +29,6 @@ use masq_lib::multi_config::{ CommandLineVcl, ConfigFileVcl, EnvironmentVcl, MultiConfig, VirtualCommandLine, }; use masq_lib::shared_schema::{shared_app, ConfiguratorError}; -use masq_lib::test_utils::fake_stream_holder::{ByteArrayReader, ByteArrayWriter}; use std::collections::HashMap; use std::path::{Path, PathBuf}; use std::str::FromStr; @@ -392,11 +390,6 @@ impl SetupReporterReal { Option, ) { let mut error_so_far = ConfiguratorError::new(vec![]); - let mut streams = StdStreams { - stdin: &mut ByteArrayReader::new(b""), - stdout: &mut ByteArrayWriter::new(), - stderr: &mut ByteArrayWriter::new(), - }; let mut bootstrapper_config = BootstrapperConfig::new(); bootstrapper_config.data_directory = data_directory.to_path_buf(); match privileged_parse_args(dirs_wrapper, multi_config, &mut bootstrapper_config) { @@ -412,7 +405,6 @@ impl SetupReporterReal { match unprivileged_parse_args( multi_config, &mut bootstrapper_config, - &mut streams, Some(&mut persistent_config), ) { Ok(_) => ( @@ -428,20 +420,13 @@ impl SetupReporterReal { } } } - Err(_) => { - match unprivileged_parse_args( - multi_config, - &mut bootstrapper_config, - &mut streams, - None, - ) { - Ok(_) => ((bootstrapper_config, None), None), - Err(ce) => { - error_so_far.extend(ce); - ((bootstrapper_config, None), Some(error_so_far)) - } + Err(_) => match unprivileged_parse_args(multi_config, &mut bootstrapper_config, None) { + Ok(_) => ((bootstrapper_config, None), None), + Err(ce) => { + error_so_far.extend(ce); + ((bootstrapper_config, None), Some(error_so_far)) } - } + }, } } } diff --git a/node/src/node_configurator/mod.rs b/node/src/node_configurator/mod.rs index d30e7e449..3a7eff741 100644 --- a/node/src/node_configurator/mod.rs +++ b/node/src/node_configurator/mod.rs @@ -4,113 +4,25 @@ pub mod configurator; pub mod node_configurator_initialization; pub mod node_configurator_standard; -use crate::blockchain::bip32::Bip32ECKeyPair; -use crate::blockchain::bip39::Bip39; -use crate::blockchain::blockchain_interface::chain_id_from_name; use crate::bootstrapper::RealUser; use crate::database::db_initializer::{DbInitializer, DbInitializerReal, DATABASE_FILE}; use crate::db_config::persistent_configuration::{ - PersistentConfigError, PersistentConfiguration, PersistentConfigurationReal, + PersistentConfiguration, PersistentConfigurationReal, }; -use crate::masq_lib::utils::{DEFAULT_CONSUMING_DERIVATION_PATH, DEFAULT_EARNING_DERIVATION_PATH}; -use crate::sub_lib::cryptde::PlainData; use crate::sub_lib::utils::make_new_multi_config; -use crate::sub_lib::wallet::Wallet; -use bip39::Language; -use clap::{value_t, App, Arg}; +use clap::{value_t, App}; use dirs::{data_local_dir, home_dir}; -use masq_lib::command::StdStreams; use masq_lib::constants::DEFAULT_CHAIN_NAME; use masq_lib::multi_config::{merge, CommandLineVcl, EnvironmentVcl, MultiConfig, VclArg}; use masq_lib::shared_schema::{ chain_arg, config_file_arg, data_directory_arg, real_user_arg, ConfiguratorError, }; use masq_lib::utils::{localhost, ExpectValue, WrapResult}; -use rpassword::read_password_with_reader; -use rustc_hex::FromHex; -use std::fmt::Debug; -use std::io; -use std::io::Read; use std::net::{SocketAddr, TcpListener}; use std::path::{Path, PathBuf}; -use std::str::FromStr; -use tiny_hderive::bip44::DerivationPath; pub trait NodeConfigurator { - fn configure( - &self, - multi_config: &MultiConfig, - streams: Option<&mut StdStreams<'_>>, - ) -> Result; -} - -//TODO this code (and the allied -- see thorough this file) is very likely to go away when GH-457 is played -pub const CONSUMING_WALLET_HELP: &str = "The BIP32 derivation path for the wallet from which your Node \ - should pay other Nodes for routing and exit services. (If the path includes single quotes, enclose it in \ - double quotes.) Defaults to m/44'/60'/0'/0/0."; -pub const EARNING_WALLET_HELP: &str = - "Denotes the wallet into which other Nodes will pay yours for its routing and exit services. May either be a \ - BIP32 derivation path (defaults to m/44'/60'/0'/0/1) or an Ethereum wallet address. (If the derivation path \ - includes single quotes, enclose it in double quotes.) Addresses must begin with 0x followed by 40 hexadecimal \ - digits (case-insensitive)."; -pub const LANGUAGE_HELP: &str = "The language of the mnemonic phrase."; -pub const MNEMONIC_PASSPHRASE_HELP: &str = - "A passphrase for the mnemonic phrase. Cannot be changed later and still produce the same addresses. This is a \ - secret; providing it on the command line or in a config file is insecure and unwise. If you don't specify it anywhere, \ - you'll be prompted for it at the console."; -pub const DB_PASSWORD_HELP: &str = - "A password or phrase to encrypt your consuming wallet in the MASQ Node database or decrypt a keystore file. Can be changed \ - later and still produce the same addresses. This is a secret; providing it on the command line or in a config file is \ - insecure and unwise. If you don't specify it anywhere, you'll be prompted for it at the console."; - -// These Args are needed in more than one clap schema. To avoid code duplication, they're defined here and referred -// to from multiple places. - -//TODO this code (and the allied -- see thorough this file) is very likely to go away when GH-457 is played -pub fn consuming_wallet_arg<'a>() -> Arg<'a, 'a> { - Arg::with_name("consuming-wallet") - .long("consuming-wallet") - .value_name("CONSUMING-WALLET") - .empty_values(false) - .validator(common_validators::validate_derivation_path) - .help(CONSUMING_WALLET_HELP) -} - -pub fn earning_wallet_arg(help: &str, validator: F) -> Arg -where - F: 'static, - F: Fn(String) -> Result<(), String>, -{ - Arg::with_name("earning-wallet") - .long("earning-wallet") - .value_name("EARNING-WALLET") - .required(false) - .takes_value(true) - .validator(validator) - .help(help) -} - -pub fn language_arg<'a>() -> Arg<'a, 'a> { - Arg::with_name("language") - .alias("language") - .long("language") - .value_name("LANGUAGE") - .required(true) - .case_insensitive(true) - .possible_values(Bip39::possible_language_values().as_slice()) - .default_value(Bip39::name_from_language(Language::default())) - .help(LANGUAGE_HELP) -} - -pub fn mnemonic_passphrase_arg<'a>() -> Arg<'a, 'a> { - Arg::with_name("mnemonic-passphrase") - .long("mnemonic-passphrase") - .value_name("MNEMONIC-PASSPHRASE") - .required(false) - .takes_value(true) - .min_values(0) - .max_values(1) - .help(MNEMONIC_PASSPHRASE_HELP) + fn configure(&self, multi_config: &MultiConfig) -> Result; } pub fn determine_config_file_path( @@ -148,36 +60,6 @@ pub fn determine_config_file_path( (directory.join(config_file_path), user_specified).wrap_to_ok() } -pub fn create_wallet( - config: &WalletCreationConfig, - persistent_config: &mut (dyn PersistentConfiguration), -) -> Result<(), ConfiguratorError> { - let (mnemonic_seed_opt, consuming_wallet_derivation_path_opt, db_password_opt) = - match &config.derivation_path_info_opt { - None => (None, None, None), - Some(derivation_path_info) => ( - Some(derivation_path_info.mnemonic_seed.clone()), - derivation_path_info.consuming_derivation_path_opt.clone(), - Some(derivation_path_info.db_password.clone()), - ), - }; - let earning_wallet_address_opt = config.earning_wallet_address_opt.clone(); - match ( - mnemonic_seed_opt, - consuming_wallet_derivation_path_opt, - earning_wallet_address_opt, - db_password_opt, - ) { - (Some(ms), Some(cwdp), Some(ewa), Some(dp)) => { - match persistent_config.set_wallet_info(&ms, &cwdp, &ewa, &dp) { - Ok(_) => Ok(()), - Err(pce) => Err(pce.into_configurator_error("[wallet info]")), - } - } - _ => Ok(()), - } -} - pub fn initialize_database( data_directory: &Path, chain_id: u8, @@ -194,21 +76,6 @@ pub fn initialize_database( Box::new(PersistentConfigurationReal::from(conn)) } -pub fn update_db_password( - wallet_config: &WalletCreationConfig, - persistent_config: &mut (dyn PersistentConfiguration), -) -> Result<(), ConfiguratorError> { - match &wallet_config.derivation_path_info_opt { - Some(dpwi) => { - if let Err(pce) = persistent_config.change_password(None, &dpwi.db_password) { - return Err(pce.into_configurator_error("db-password")); - } - } - None => (), - }; - Ok(()) -} - pub fn real_user_from_multi_config_or_populate( multi_config: &MultiConfig, dirs_wrapper: &dyn DirsWrapper, @@ -264,321 +131,10 @@ pub fn data_directory_from_context( } } -pub fn prepare_initialization_mode<'a>( - dirs_wrapper: &dyn DirsWrapper, - app: &'a App, - args: &[String], -) -> Result<(MultiConfig<'a>, Box), ConfiguratorError> { - let multi_config = make_new_multi_config( - app, - vec![ - Box::new(CommandLineVcl::new(args.to_vec())), - Box::new(EnvironmentVcl::new(app)), - ], - )?; - - let (real_user, data_directory_opt, chain_name) = - real_user_data_directory_opt_and_chain_name(dirs_wrapper, &multi_config); - let directory = data_directory_from_context( - &DirsWrapperReal {}, - &real_user, - &data_directory_opt, - &chain_name, - ); - let persistent_config_box = initialize_database(&directory, chain_id_from_name(&chain_name)); - Ok((multi_config, persistent_config_box)) -} - -pub fn check_for_past_initialization( - persistent_config: &dyn PersistentConfiguration, -) -> Result<(), ConfiguratorError> { - match persistent_config.mnemonic_seed_exists() { - Ok(true) => Err(ConfiguratorError::required( - "seed", - "Cannot re-initialize Node: already initialized", - )), - Ok(false) => Ok(()), - Err(pce) => Err(pce.into_configurator_error("seed")), - } -} - -pub fn request_new_db_password( - streams: &mut StdStreams, - possible_preamble: Option<&str>, - prompt: &str, - confirmation_prompt: &str, -) -> Option { - if let Some(preamble) = possible_preamble { - flushed_write(streams.stdout, &format!("{}\n", preamble)); - } - match request_password_with_retry(prompt, streams, |streams| { - request_password_with_confirmation( - confirmation_prompt, - "Passwords do not match.", - streams, - cannot_be_blank, - ) - }) { - Ok(password) => Some(password), - Err(PasswordError::RetriesExhausted) => None, - Err(PasswordError::Mismatch) => None, - Err(PasswordError::VerifyError(e)) => { - flushed_write( - streams.stdout, - &format!("Could not elicit wallet encryption password: {:?}\n", e), - ); - None - } - Err(PasswordError::InternalError(_)) => panic!("Can't happen: no code path"), - } -} - -//TODO this code (and the allied -- see thorough this file) is very likely to go away when GH-457 is played -pub fn request_existing_db_password( - streams: &mut StdStreams, - possible_preamble: Option<&str>, - prompt: &str, - persistent_config: &dyn PersistentConfiguration, -) -> Result, ConfiguratorError> { - match persistent_config.check_password(None) { - Ok(true) => return Ok(None), - Ok(false) => (), - Err(pce) => return Err(pce.into_configurator_error("db-password")), - } - if let Some(preamble) = possible_preamble { - flushed_write(streams.stdout, &format!("{}\n", preamble)) - }; - let verifier = move |password: String| { - if password.is_empty() { - return Err(PasswordVerificationError::YourFault( - "Password must not be blank.".to_string(), - )); - } - match persistent_config.check_password(Some(password)) { - Ok(true) => Ok(()), - Ok(false) => Err(PasswordVerificationError::YourFault( - "Incorrect password.".to_string(), - )), - Err(pce) => Err(PasswordVerificationError::MyFault(pce)), - } - }; - let result = match request_password_with_retry(prompt, streams, |streams| { - request_existing_password(streams, verifier) - }) { - Ok(ref password) if password.is_empty() => None, - Ok(password) => Some(password), - Err(PasswordError::RetriesExhausted) => None, - Err(PasswordError::InternalError(pce)) => { - return Err(pce.into_configurator_error("db-password")) - } - Err(e) => { - flushed_write( - streams.stdout, - &format!("Could not elicit wallet decryption password: {:?}\n", e), - ); - None - } - }; - Ok(result) -} - -pub fn cannot_be_blank(password: &str) -> Result<(), String> { - if password.is_empty() { - Err("Password cannot be blank.".to_string()) - } else { - Ok(()) - } -} - -#[derive(Debug, PartialEq, Clone)] -pub enum PasswordError { - Mismatch, - RetriesExhausted, - VerifyError(String), - InternalError(PersistentConfigError), -} - -pub enum PasswordVerificationError { - YourFault(String), - MyFault(PersistentConfigError), -} - -pub fn request_existing_password( - streams: &mut StdStreams, - verifier: F, -) -> Result -where - F: FnOnce(String) -> Result<(), PasswordVerificationError>, -{ - let reader_opt = possible_reader_from_stream(streams); - let password = read_password_with_reader(reader_opt).expect("Fatal error"); - match verifier(password.clone()) { - Ok(_) => Ok(password), - Err(PasswordVerificationError::YourFault(msg)) => Err(PasswordError::VerifyError(msg)), - Err(PasswordVerificationError::MyFault(pce)) => Err(PasswordError::InternalError(pce)), - } -} - -// require two matching entries -pub fn request_password_with_confirmation( - confirmation_prompt: &str, - mismatch_msg: &str, - streams: &mut StdStreams, - verifier: F, -) -> Result -where - F: FnOnce(&str) -> Result<(), String>, -{ - let reader_opt = possible_reader_from_stream(streams); - let password = read_password_with_reader(reader_opt).expect("Fatal error"); - match verifier(&password) { - Ok(_) => { - flushed_write(streams.stdout, confirmation_prompt); - let reader_opt = possible_reader_from_stream(streams); - let confirm = read_password_with_reader(reader_opt).expect("Fatal error"); - if password == confirm { - Ok(password) - } else { - flushed_write(streams.stdout, mismatch_msg); - Err(PasswordError::Mismatch) - } - } - Err(msg) => Err(PasswordError::VerifyError(msg)), - } -} - -pub fn request_password_with_retry( - prompt: &str, - streams: &mut StdStreams, - requester: R, -) -> Result -where - R: Fn(&mut StdStreams) -> Result, -{ - for attempt in &["Try again.", "Try again.", "Giving up."] { - flushed_write(streams.stdout, prompt); - match requester(streams) { - Ok(password) => return Ok(password), - Err(PasswordError::Mismatch) => { - flushed_write(streams.stdout, &format!(" {}\n", attempt)) - } - Err(PasswordError::VerifyError(msg)) => { - flushed_write(streams.stdout, &format!("{} {}\n", msg, attempt)) - } - Err(PasswordError::InternalError(pce)) => { - return Err(PasswordError::InternalError(pce)) - } - Err(e) => flushed_write(streams.stdout, &format!("{:?} {}\n", e, attempt)), - } - } - Err(PasswordError::RetriesExhausted) -} - -pub fn possible_reader_from_stream( - streams: &'_ mut StdStreams, -) -> Option<::std::io::Cursor>> { - if cfg!(test) { - let inner = streams - .stdin - .bytes() - .take_while(|possible_byte| match possible_byte { - Ok(possible_newline) => possible_newline != &10u8, - _ => false, - }) - .map(|possible_byte| possible_byte.expect("Not a byte")) - .collect::>(); - Some(::std::io::Cursor::new(inner)) - } else { - None - } -} - -pub fn data_directory_default(dirs_wrapper: &dyn DirsWrapper, chain_name: &'static str) -> String { - match dirs_wrapper.data_dir() { - Some(path) => path.join("MASQ").join(chain_name), - None => PathBuf::from(""), - } - .to_str() - .expect("Internal Error") - .to_string() -} - -pub fn flushed_write(target: &mut dyn io::Write, string: &str) { - write!(target, "{}", string).expect("Failed console write."); - target.flush().expect("Failed flush."); -} - pub fn port_is_busy(port: u16) -> bool { TcpListener::bind(SocketAddr::new(localhost(), port)).is_err() } -pub mod common_validators { - use masq_lib::constants::LOWEST_USABLE_INSECURE_PORT; - use regex::Regex; - use tiny_hderive::bip44::DerivationPath; - - pub fn validate_earning_wallet(value: String) -> Result<(), String> { - validate_ethereum_address(value.clone()).or_else(|_| validate_derivation_path(value)) - } - - pub fn validate_ethereum_address(address: String) -> Result<(), String> { - if Regex::new("^0x[0-9a-fA-F]{40}$") - .expect("Failed to compile regular expression") - .is_match(&address) - { - Ok(()) - } else { - Err(address) - } - } - - pub fn validate_derivation_path(path: String) -> Result<(), String> { - let possible_path = path.parse::(); - - match possible_path { - Ok(derivation_path) => { - validate_derivation_path_is_sufficiently_hardened(derivation_path, path) - } - Err(e) => Err(format!("{} is not valid: {:?}", path, e)), - } - } - - pub fn validate_derivation_path_is_sufficiently_hardened( - derivation_path: DerivationPath, - path: String, - ) -> Result<(), String> { - if derivation_path - .iter() - .filter(|child_nbr| child_nbr.is_hardened()) - .count() - > 2 - { - Ok(()) - } else { - Err(format!("{} may be too weak", path)) - } - } - - pub fn validate_real_user(triple: String) -> Result<(), String> { - if Regex::new("^[0-9]*:[0-9]*:.*$") - .expect("Failed to compile regular expression") - .is_match(&triple) - { - Ok(()) - } else { - Err(triple) - } - } - - pub fn validate_ui_port(port: String) -> Result<(), String> { - match str::parse::(&port) { - Ok(port_number) if port_number < LOWEST_USABLE_INSECURE_PORT => Err(port), - Ok(_) => Ok(()), - Err(_) => Err(port), - } - } -} - pub trait DirsWrapper: Send { fn data_dir(&self) -> Option; fn home_dir(&self) -> Option; @@ -599,350 +155,16 @@ impl DirsWrapper for DirsWrapperReal { } } -#[derive(Debug, PartialEq)] -pub enum Either { - Left(L), - Right(R), -} - -#[derive(PartialEq, Debug)] -pub struct DerivationPathWalletInfo { - pub mnemonic_seed: PlainData, - pub db_password: String, - pub consuming_derivation_path_opt: Option, -} - -#[derive(PartialEq, Debug)] -pub struct WalletCreationConfig { - pub earning_wallet_address_opt: Option, - pub derivation_path_info_opt: Option, - pub real_user: RealUser, -} - -//TODO this code (and the allied) is very likely to go away when GH-457 is played -pub trait WalletCreationConfigMaker { - fn make_wallet_creation_config( - &self, - multi_config: &MultiConfig, - streams: &mut StdStreams<'_>, - ) -> WalletCreationConfig { - let mnemonic_passphrase = match value_m!(multi_config, "mnemonic-passphrase", String) { - Some(mp) => mp, - None => self.make_mnemonic_passphrase(multi_config, streams), - }; - let db_password = match value_m!(multi_config, "db-password", String) { - Some(wp) => wp, - None => self.make_db_password(streams), - }; - let consuming_derivation_path = match value_m!(multi_config, "consuming-wallet", String) { - Some(cdp) => cdp, - None => self.make_consuming_derivation_path(streams), - }; - let earning_wallet_info = match value_m!(multi_config, "earning-wallet", String) { - Some(value) => match DerivationPath::from_str(&value) { - Ok(_) => Either::Right(value), - Err(_) => match value[2..].from_hex::>() { - Ok(bytes) => match bytes.len() { - 20 => Either::Left(value), - _ => panic!("--earning-wallet not properly validated by clap"), - }, - Err(e) => panic!("--earning-wallet not properly validated by clap: {:?}", e), - }, - }, - None => self.make_earning_wallet_info(streams), - }; - let mnemonic_seed = self.make_mnemonic_seed( - multi_config, - streams, - &mnemonic_passphrase, - &consuming_derivation_path, - &earning_wallet_info, - ); - let real_user = match value_m!(multi_config, "real-user", RealUser) { - Some(ru) => ru, - None => RealUser::null(), - }; - WalletCreationConfig { - earning_wallet_address_opt: match &earning_wallet_info { - Either::Left(address) => Some(address.clone()), - Either::Right(path) => { - let keypair = Bip32ECKeyPair::from_raw(mnemonic_seed.as_slice(), path) - .expect("--earning-wallet not properly validated by clap"); - let wallet = Wallet::from(keypair); - Some(wallet.to_string()) - } - }, - derivation_path_info_opt: Some(DerivationPathWalletInfo { - mnemonic_seed, - db_password, - consuming_derivation_path_opt: Some(consuming_derivation_path), - }), - real_user, - } - } - - fn make_db_password(&self, streams: &mut StdStreams) -> String { - match request_new_db_password( - streams, - Some("\n\nPlease provide a password to encrypt your wallet (This password can be changed later)..."), - " Enter password: ", - " Confirm password: ", - ) { - Some(wp) => wp, - None => panic!("Wallet encryption password is required!") - } - } - - fn make_consuming_derivation_path(&self, _streams: &mut StdStreams) -> String { - DEFAULT_CONSUMING_DERIVATION_PATH.to_string() - } - - fn make_earning_wallet_info(&self, _streams: &mut StdStreams) -> Either { - Either::Right(DEFAULT_EARNING_DERIVATION_PATH.to_string()) - } - - fn make_mnemonic_passphrase( - &self, - multi_config: &MultiConfig, - streams: &mut StdStreams<'_>, - ) -> String; - - fn make_mnemonic_seed( - &self, - multi_config: &MultiConfig, - streams: &mut StdStreams<'_>, - mnemonic_passphrase: &str, - consuming_derivation_path: &str, - earning_wallet_info: &Either, - ) -> PlainData; -} - #[cfg(test)] mod tests { use super::*; use crate::apps::app_node; - use crate::blockchain::bip32::Bip32ECKeyPair; - use crate::db_config::persistent_configuration::PersistentConfigError; - use crate::masq_lib::utils::{ - DEFAULT_CONSUMING_DERIVATION_PATH, DEFAULT_EARNING_DERIVATION_PATH, - }; - use crate::node_test_utils::DirsWrapperMock; use crate::sub_lib::utils::make_new_test_multi_config; - use crate::test_utils::persistent_configuration_mock::PersistentConfigurationMock; use crate::test_utils::ArgsBuilder; - use bip39::{Mnemonic, Seed}; use masq_lib::constants::DEFAULT_CHAIN_NAME; - use masq_lib::multi_config::MultiConfig; - use masq_lib::shared_schema::{db_password_arg, ParamError}; use masq_lib::test_utils::environment_guard::EnvironmentGuard; - use masq_lib::test_utils::fake_stream_holder::{ByteArrayWriter, FakeStreamHolder}; - use masq_lib::test_utils::utils::TEST_DEFAULT_CHAIN_NAME; - use masq_lib::utils::{find_free_port, running_test}; - use std::io::Cursor; + use masq_lib::utils::find_free_port; use std::net::{SocketAddr, TcpListener}; - use std::sync::{Arc, Mutex}; - use tiny_hderive::bip44::DerivationPath; - - #[test] - fn validate_ethereum_address_requires_an_address_that_is_42_characters_long() { - assert_eq!( - Err(String::from("my-favorite-wallet.com")), - common_validators::validate_ethereum_address(String::from("my-favorite-wallet.com")), - ); - } - - #[test] - fn validate_ethereum_address_must_start_with_0x() { - assert_eq!( - Err(String::from("x0my-favorite-wallet.com222222222222222222")), - common_validators::validate_ethereum_address(String::from( - "x0my-favorite-wallet.com222222222222222222" - )) - ); - } - - #[test] - fn validate_ethereum_address_must_contain_only_hex_characters() { - assert_eq!( - Err(String::from("0x9707f21F95B9839A54605100Ca69dCc2e7eaA26q")), - common_validators::validate_ethereum_address(String::from( - "0x9707f21F95B9839A54605100Ca69dCc2e7eaA26q" - )) - ); - } - - #[test] - fn validate_ethereum_address_when_happy() { - assert_eq!( - Ok(()), - common_validators::validate_ethereum_address(String::from( - "0xbDfeFf9A1f4A1bdF483d680046344316019C58CF" - )) - ); - } - - #[test] - fn validate_earning_wallet_works_with_address() { - assert!(common_validators::validate_earning_wallet(String::from( - "0xbDfeFf9A1f4A1bdF483d680046344316019C58CF" - )) - .is_ok()); - } - - #[test] - fn validate_earning_wallet_works_with_derivation_path() { - assert!(common_validators::validate_earning_wallet( - DEFAULT_EARNING_DERIVATION_PATH.to_string() - ) - .is_ok()); - } - - #[test] - fn validate_derivation_path_happy() { - assert_eq!( - Ok(()), - common_validators::validate_derivation_path( - DEFAULT_CONSUMING_DERIVATION_PATH.to_string() - ) - ); - } - - #[test] - fn validate_derivation_path_sad_eth_address() { - assert_eq!( - Err( - "0xbDfeFf9A1f4A1bdF483d680046344316019C58CF is not valid: InvalidDerivationPath" - .to_string() - ), - common_validators::validate_derivation_path( - "0xbDfeFf9A1f4A1bdF483d680046344316019C58CF".to_string() - ) - ); - } - - #[test] - fn validate_derivation_path_sad_malformed_with_backslashes() { - assert_eq!( - Err(r"m\44'\60'\0'\0\0 is not valid: InvalidDerivationPath".to_string()), - common_validators::validate_derivation_path(r"m\44'\60'\0'\0\0".to_string()) - ); - } - - #[test] - fn validate_derivation_path_sad_malformed_missing_m() { - assert_eq!( - Err("/44'/60'/0'/0/0 is not valid: InvalidDerivationPath".to_string()), - common_validators::validate_derivation_path("/44'/60'/0'/0/0".to_string()) - ); - } - - #[test] - fn validate_derivation_path_sad_insufficiently_hardened() { - assert_eq!( - common_validators::validate_derivation_path("m/44/60/0/0/0".to_string()), - Err("m/44/60/0/0/0 may be too weak".to_string()), - ); - } - - #[test] - fn validate_derivation_path_is_sufficiently_hardened_happy() { - assert!( - common_validators::validate_derivation_path_is_sufficiently_hardened( - DEFAULT_CONSUMING_DERIVATION_PATH - .parse::() - .unwrap(), - DEFAULT_CONSUMING_DERIVATION_PATH.to_string(), - ) - .is_ok() - ); - } - - #[test] - fn validate_derivation_path_is_sufficiently_hardened_sad() { - assert_eq!( - Err("m/44'/60'/0/0/0 may be too weak".to_string()), - common_validators::validate_derivation_path_is_sufficiently_hardened( - "m/44'/60'/0/0/0".parse::().unwrap(), - "m/44'/60'/0/0/0".to_string(), - ) - ); - } - - #[test] - fn validate_derivation_path_is_sufficiently_hardened_very_sad() { - assert_eq!( - Err("m/44/60/0/0/0 may be too weak".to_string()), - common_validators::validate_derivation_path_is_sufficiently_hardened( - "m/44/60/0/0/0".parse::().unwrap(), - "m/44/60/0/0/0".to_string(), - ) - ); - } - - #[test] - fn validate_real_user_accepts_all_fields() { - let result = common_validators::validate_real_user(String::from("999:999:/home/booga")); - - assert_eq!(Ok(()), result); - } - - #[test] - fn validate_real_user_accepts_no_fields() { - let result = common_validators::validate_real_user(String::from("::")); - - assert_eq!(Ok(()), result); - } - - #[test] - fn validate_real_user_rejects_non_numeric_uid() { - let result = common_validators::validate_real_user(String::from("abc:999:/home/booga")); - - assert_eq!(Err(String::from("abc:999:/home/booga")), result); - } - - #[test] - fn validate_real_user_rejects_non_numeric_gid() { - let result = common_validators::validate_real_user(String::from("999:abc:/home/booga")); - - assert_eq!(Err(String::from("999:abc:/home/booga")), result); - } - - #[test] - fn validate_real_user_rejects_too_few_colons() { - let result = common_validators::validate_real_user(String::from(":")); - - assert_eq!(Err(String::from(":")), result); - } - - #[test] - fn validate_real_user_accepts_too_many_colons() { - let result = common_validators::validate_real_user(String::from(":::")); - - assert_eq!(Ok(()), result); - } - - #[test] - fn data_directory_default_given_no_default() { - assert_eq!( - String::from(""), - data_directory_default( - &DirsWrapperMock::new().data_dir_result(None), - TEST_DEFAULT_CHAIN_NAME - ) - ); - } - - #[test] - fn data_directory_default_works() { - let mock_dirs_wrapper = DirsWrapperMock::new().data_dir_result(Some("mocked/path".into())); - - let result = data_directory_default(&mock_dirs_wrapper, DEFAULT_CHAIN_NAME); - - let expected = PathBuf::from("mocked/path") - .join("MASQ") - .join(DEFAULT_CHAIN_NAME); - assert_eq!(result, expected.as_path().to_str().unwrap().to_string()); - } fn determine_config_file_path_app() -> App<'static, 'static> { App::new("test") @@ -950,45 +172,6 @@ mod tests { .arg(config_file_arg()) } - #[test] - fn check_for_past_initialization_is_happy_when_database_is_uninitialized() { - let persistent_config = - PersistentConfigurationMock::new().mnemonic_seed_exists_result(Ok(false)); - - let result = check_for_past_initialization(&persistent_config); - - assert_eq!(result, Ok(())); - } - - #[test] - fn check_for_past_initialization_is_unhappy_when_database_is_initialized() { - let persistent_config = - PersistentConfigurationMock::new().mnemonic_seed_exists_result(Ok(true)); - - let result = check_for_past_initialization(&persistent_config); - - assert_eq!( - result, - Err(ConfiguratorError::new(vec![ParamError::new( - "seed", - "Cannot re-initialize Node: already initialized" - )])) - ); - } - - #[test] - fn check_for_past_initialization_handles_database_error() { - let persistent_config = PersistentConfigurationMock::new() - .mnemonic_seed_exists_result(Err(PersistentConfigError::NotPresent)); - - let result = check_for_past_initialization(&persistent_config); - - assert_eq!( - result, - Err(PersistentConfigError::NotPresent.into_configurator_error("seed")) - ); - } - #[test] fn real_user_data_directory_and_chain_id_picks_correct_directory_for_default_chain() { let args = ArgsBuilder::new(); @@ -1173,578 +356,6 @@ mod tests { assert_eq!(true, user_specified); } - #[test] - fn request_database_password_happy_path() { - let stdout_writer = &mut ByteArrayWriter::new(); - let streams = &mut StdStreams { - stdin: &mut Cursor::new(&b"Too Many S3cr3ts!\n"[..]), - stdout: stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; - let persistent_configuration = PersistentConfigurationMock::new() - .check_password_result(Ok(false)) - .check_password_result(Ok(true)); - - let actual = request_existing_db_password( - streams, - Some("Decrypt wallet"), - "Enter password: ", - &persistent_configuration, - ); - - assert_eq!(actual, Ok(Some("Too Many S3cr3ts!".to_string()))); - assert_eq!( - stdout_writer.get_string(), - "Decrypt wallet\n\ - Enter password: " - .to_string() - ); - } - - #[test] - fn request_database_password_rejects_blank_password() { - let stdout_writer = &mut ByteArrayWriter::new(); - let streams = &mut StdStreams { - stdin: &mut Cursor::new(&b"\nbooga\n"[..]), - stdout: stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; - let persistent_configuration = PersistentConfigurationMock::new() - .check_password_result(Ok(false)) - .check_password_result(Ok(true)); - - let actual = request_existing_db_password( - streams, - Some("Decrypt wallet"), - "Enter password: ", - &persistent_configuration, - ); - - assert_eq!(actual, Ok(Some("booga".to_string()))); - assert_eq!( - stdout_writer.get_string(), - "Decrypt wallet\n\ - Enter password: \ - Password must not be blank. Try again.\n\ - Enter password: " - .to_string() - ); - } - - #[test] - fn request_existing_db_password_handles_error_checking_for_no_password() { - let mut holder = FakeStreamHolder::new(); - let persistent_config = PersistentConfigurationMock::new() - .check_password_result(Err(PersistentConfigError::NotPresent)); - - let result = - request_existing_db_password(&mut holder.streams(), None, "prompt", &persistent_config); - - assert_eq!( - result, - Err(PersistentConfigError::NotPresent.into_configurator_error("db-password")) - ) - } - - #[test] - fn request_existing_db_password_handles_error_checking_for_entered_password() { - let stdout_writer = &mut ByteArrayWriter::new(); - let mut streams = &mut StdStreams { - stdin: &mut Cursor::new(&b"Too Many S3cr3ts!\n"[..]), - stdout: stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; - let persistent_config = PersistentConfigurationMock::new() - .check_password_result(Ok(false)) - .check_password_result(Err(PersistentConfigError::NotPresent)); - - let result = request_existing_db_password(&mut streams, None, "prompt", &persistent_config); - - assert_eq!( - result, - Err(PersistentConfigError::NotPresent.into_configurator_error("db-password")) - ) - } - - #[test] - fn request_database_password_detects_bad_passwords() { - let stdout_writer = &mut ByteArrayWriter::new(); - let streams = &mut StdStreams { - stdin: &mut Cursor::new( - &b"first bad password\nanother bad password\nfinal bad password\n"[..], - ), - stdout: stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; - let check_password_params_arc = Arc::new(Mutex::new(vec![])); - let persistent_configuration = PersistentConfigurationMock::new() - .check_password_params(&check_password_params_arc) - .check_password_result(Ok(false)) - .check_password_result(Ok(false)) - .check_password_result(Ok(false)) - .check_password_result(Ok(false)); - - let actual = request_existing_db_password( - streams, - Some("Decrypt wallet"), - "Enter password: ", - &persistent_configuration, - ); - - assert_eq!(actual, Ok(None)); - assert_eq!( - stdout_writer.get_string(), - "Decrypt wallet\n\ - Enter password: \ - Incorrect password. Try again.\n\ - Enter password: \ - Incorrect password. Try again.\n\ - Enter password: \ - Incorrect password. Giving up.\n" - .to_string() - ); - let check_password_params = check_password_params_arc.lock().unwrap(); - assert_eq!( - *check_password_params, - vec![ - None, - Some("first bad password".to_string()), - Some("another bad password".to_string()), - Some("final bad password".to_string()) - ] - ) - } - - #[test] - fn request_database_password_aborts_before_prompting_if_database_has_no_password() { - let stdout_writer = &mut ByteArrayWriter::new(); - let streams = &mut StdStreams { - stdin: &mut Cursor::new(&b""[..]), - stdout: stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; - let persistent_configuration = - PersistentConfigurationMock::new().check_password_result(Ok(true)); - - let actual = request_existing_db_password( - streams, - Some("Decrypt wallet"), - "Enter password: ", - &persistent_configuration, - ); - - assert_eq!(actual, Ok(None)); - assert_eq!(stdout_writer.get_string(), "".to_string()); - } - - #[test] - fn request_wallet_encryption_password_succeeds_on_reattempt() { - let stdout_writer = &mut ByteArrayWriter::new(); - let streams = &mut StdStreams { - stdin: &mut Cursor::new( - &b"Too Many S3cr3ts!\ngarbage garbage\nToo Many S3cr3ts!\nToo Many S3cr3ts!\n"[..], - ), - stdout: stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; - - let actual = request_new_db_password( - streams, - Some("\n\nPlease provide a password to encrypt your wallet (This password can be changed \ - later)..."), " Enter password: ", "Confirm password: ", - ); - - assert_eq!(actual, Some("Too Many S3cr3ts!".to_string())); - assert_eq!( - stdout_writer.get_string(), - "\n\nPlease provide a password to encrypt your wallet (This password can be changed later)...\ - \n Enter password: \ - Confirm password: \ - Passwords do not match. Try again.\ - \n Enter password: \ - Confirm password: " - .to_string() - ); - } - - #[test] - fn request_wallet_encryption_password_gives_up_after_three_blank_passwords() { - let stdout_writer = &mut ByteArrayWriter::new(); - let streams = &mut StdStreams { - stdin: &mut Cursor::new(&b"\n\n\n"[..]), - stdout: stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; - - let actual = request_new_db_password( - streams, - Some("\n\nPlease provide a password to encrypt your wallet (This password can be changed \ - later)..."), " Enter password: ", "\nConfirm password: ", - ); - - assert_eq!(actual, None); - assert_eq!( - stdout_writer.get_string(), - "\n\nPlease provide a password to encrypt your wallet (This password can be changed later)...\ - \n Enter password: \ - Password cannot be blank. Try again.\ - \n Enter password: \ - Password cannot be blank. Try again.\ - \n Enter password: \ - Password cannot be blank. Giving up.\ - \n" - .to_string() - ); - } - - #[test] - fn request_wallet_encryption_password_gives_up_after_three_mismatches() { - let stdout_writer = &mut ByteArrayWriter::new(); - let streams = &mut StdStreams { - stdin: &mut Cursor::new(&b"one\n\ntwo\n\nthree\n\n"[..]), - stdout: stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; - - let actual = request_new_db_password( - streams, - Some("\n\nPlease provide a password to encrypt your wallet (This password can be changed \ - later)..."), " Enter password: ", "Confirm password: ", - ); - - assert_eq!(actual, None); - assert_eq!( - stdout_writer.get_string(), - "\n\nPlease provide a password to encrypt your wallet (This password can be changed later)...\ - \n Enter password: \ - Confirm password: \ - Passwords do not match. Try again.\ - \n Enter password: \ - Confirm password: \ - Passwords do not match. Try again.\ - \n Enter password: \ - Confirm password: \ - Passwords do not match. Giving up.\ - \n" - .to_string() - ); - } - - //TODO this code (and the allied -- see thorough this file) is very likely to go away when GH-457 is played - struct TameWalletCreationConfigMaker { - app: App<'static, 'static>, - } - - impl WalletCreationConfigMaker for TameWalletCreationConfigMaker { - fn make_mnemonic_passphrase( - &self, - _multi_config: &MultiConfig, - streams: &mut StdStreams, - ) -> String { - flushed_write(streams.stdout, "Enter mnemonic passphrase: "); - "mnemonic passphrase".to_string() - } - - fn make_mnemonic_seed( - &self, - _multi_config: &MultiConfig, - _streams: &mut StdStreams, - _mnemonic_passphrase: &str, - _consuming_derivation_path: &str, - _earning_wallet_info: &Either, - ) -> PlainData { - Self::hardcoded_mnemonic_seed() - } - } - - impl TameWalletCreationConfigMaker { - fn hardcoded_mnemonic_seed() -> PlainData { - let mnemonic = Mnemonic::from_phrase( - "list noble dove unable pioneer alien live market mercy equip supreme agree", - Language::English, - ) - .unwrap(); - PlainData::new(Seed::new(&mnemonic, "passphrase").as_ref()) - } - } - - impl TameWalletCreationConfigMaker { - pub fn new() -> TameWalletCreationConfigMaker { - TameWalletCreationConfigMaker { - app: App::new("TameWalletCreationConfigMaker") - .arg(consuming_wallet_arg()) - .arg(earning_wallet_arg("", |_| Ok(()))) - .arg(mnemonic_passphrase_arg()) - .arg(real_user_arg()) - .arg(db_password_arg(DB_PASSWORD_HELP)), - } - } - } - - #[test] - fn make_wallet_creation_config_defaults() { - let subject = TameWalletCreationConfigMaker::new(); - let vcl = Box::new(CommandLineVcl::new(vec!["test".to_string()])); - let multi_config = make_new_test_multi_config(&subject.app, vec![vcl]).unwrap(); - let stdout_writer = &mut ByteArrayWriter::new(); - let mut streams = &mut StdStreams { - stdin: &mut Cursor::new(&b"a terrible db password\na terrible db password\n"[..]), - stdout: stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; - - let config = subject.make_wallet_creation_config(&multi_config, &mut streams); - - let captured_output = stdout_writer.get_string(); - let expected_output = "Enter mnemonic passphrase: \ - \n\nPlease provide a password to encrypt your wallet (This password can be changed later)...\ - \n Enter password: Confirm password: "; - assert_eq!(&captured_output, expected_output); - let earning_wallet = Wallet::from( - Bip32ECKeyPair::from_raw( - TameWalletCreationConfigMaker::hardcoded_mnemonic_seed().as_ref(), - &DEFAULT_EARNING_DERIVATION_PATH, - ) - .unwrap(), - ); - assert_eq!( - config, - WalletCreationConfig { - earning_wallet_address_opt: Some(earning_wallet.to_string()), - derivation_path_info_opt: Some(DerivationPathWalletInfo { - mnemonic_seed: TameWalletCreationConfigMaker::hardcoded_mnemonic_seed(), - db_password: "a terrible db password".to_string(), - consuming_derivation_path_opt: Some( - DEFAULT_CONSUMING_DERIVATION_PATH.to_string() - ), - }), - real_user: RealUser::null(), - }, - ); - } - - #[test] - fn make_wallet_creation_config_non_defaults_with_earning_derivation_path() { - running_test(); - let earning_path = "m/44'/60'/3'/2/1"; - let subject = TameWalletCreationConfigMaker::new(); - let args = ArgsBuilder::new() - .param("--consuming-wallet", "m/44'/60'/1'/2/3") - .param("--earning-wallet", "m/44'/60'/3'/2/1") - .param("--mnemonic-passphrase", "mnemonic passphrase") - .param("--db-password", "db password") - .param("--real-user", "123::"); - let vcl = Box::new(CommandLineVcl::new(args.into())); - let multi_config = make_new_test_multi_config(&subject.app, vec![vcl]).unwrap(); - let stdout_writer = &mut ByteArrayWriter::new(); - let mut streams = &mut StdStreams { - stdin: &mut Cursor::new(&[]), - stdout: stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; - - let config = subject.make_wallet_creation_config(&multi_config, &mut streams); - - let captured_output = stdout_writer.get_string(); - let expected_output = ""; - assert_eq!(&captured_output, expected_output); - let earning_wallet = Wallet::from( - Bip32ECKeyPair::from_raw( - TameWalletCreationConfigMaker::hardcoded_mnemonic_seed().as_ref(), - earning_path, - ) - .unwrap(), - ); - assert_eq!( - config, - WalletCreationConfig { - earning_wallet_address_opt: Some(earning_wallet.to_string()), - derivation_path_info_opt: Some(DerivationPathWalletInfo { - mnemonic_seed: TameWalletCreationConfigMaker::hardcoded_mnemonic_seed(), - db_password: "db password".to_string(), - consuming_derivation_path_opt: Some("m/44'/60'/1'/2/3".to_string()), - }), - real_user: RealUser::new(Some(123), None, None), - }, - ); - } - - #[test] - fn make_wallet_creation_config_non_defaults_with_earning_address() { - running_test(); - let subject = TameWalletCreationConfigMaker::new(); - let args = ArgsBuilder::new() - .param("--consuming-wallet", "m/44'/60'/1'/2/3") - .param( - "--earning-wallet", - "0x0123456789ABCDEF0123456789ABCDEF01234567", - ) - .param("--mnemonic-passphrase", "mnemonic passphrase") - .param("--db-password", "db password") - .param("--real-user", "123::"); - let vcl = Box::new(CommandLineVcl::new(args.into())); - let multi_config = make_new_test_multi_config(&subject.app, vec![vcl]).unwrap(); - let stdout_writer = &mut ByteArrayWriter::new(); - let mut streams = &mut StdStreams { - stdin: &mut Cursor::new(&[]), - stdout: stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; - - let config = subject.make_wallet_creation_config(&multi_config, &mut streams); - - let captured_output = stdout_writer.get_string(); - let expected_output = ""; - assert_eq!(&captured_output, expected_output); - assert_eq!( - config, - WalletCreationConfig { - earning_wallet_address_opt: Some( - "0x0123456789ABCDEF0123456789ABCDEF01234567".to_string() - ), - derivation_path_info_opt: Some(DerivationPathWalletInfo { - mnemonic_seed: TameWalletCreationConfigMaker::hardcoded_mnemonic_seed(), - db_password: "db password".to_string(), - consuming_derivation_path_opt: Some("m/44'/60'/1'/2/3".to_string()), - }), - real_user: RealUser::new(Some(123), None, None), - }, - ); - } - - #[test] - #[should_panic(expected = "Wallet encryption password is required!")] - fn make_wallet_creation_config_panics_after_three_password_mismatches() { - running_test(); - let subject = TameWalletCreationConfigMaker::new(); - let streams = &mut StdStreams { - stdin: &mut Cursor::new(&b"one\n\ntwo\n\nthree\n\n"[..]), - stdout: &mut ByteArrayWriter::new(), - stderr: &mut ByteArrayWriter::new(), - }; - let vcl = Box::new(CommandLineVcl::new(vec!["test".to_string()])); - let multi_config = make_new_test_multi_config(&subject.app, vec![vcl]).unwrap(); - - subject.make_wallet_creation_config(&multi_config, streams); - } - - #[test] - fn create_wallet_configures_database_with_wallet_info() { - let config = WalletCreationConfig { - earning_wallet_address_opt: Some( - "0x9707f21F95B9839A54605100Ca69dCc2e7eaA26q".to_string(), - ), - derivation_path_info_opt: Some(DerivationPathWalletInfo { - mnemonic_seed: PlainData::new(&[1, 2, 3, 4]), - db_password: "db password".to_string(), - consuming_derivation_path_opt: Some("m/44'/60'/1'/2/3".to_string()), - }), - real_user: RealUser::null(), - }; - let set_wallet_info_params_arc = Arc::new(Mutex::new(vec![])); - let mut persistent_config = PersistentConfigurationMock::new() - .set_wallet_info_params(&set_wallet_info_params_arc) - .set_wallet_info_result(Ok(())); - - let result = create_wallet(&config, &mut persistent_config); - - assert_eq!(result, Ok(())); - let set_wallet_info_params = set_wallet_info_params_arc.lock().unwrap(); - assert_eq!( - *set_wallet_info_params, - vec![( - PlainData::from(vec![1u8, 2u8, 3u8, 4u8]), - "m/44'/60'/1'/2/3".to_string(), - "0x9707f21F95B9839A54605100Ca69dCc2e7eaA26q".to_string(), - "db password".to_string() - )] - ); - } - - #[test] - pub fn create_wallet_handles_error_setting_wallet_info() { - let config = WalletCreationConfig { - earning_wallet_address_opt: Some("irrelevant".to_string()), - derivation_path_info_opt: Some(DerivationPathWalletInfo { - mnemonic_seed: PlainData::new(b"irrelevant"), - consuming_derivation_path_opt: Some("irrelevant".to_string()), - db_password: "irrelevant".to_string(), - }), - real_user: RealUser::new(None, None, None), - }; - let mut persistent_config = PersistentConfigurationMock::new() - .set_wallet_info_result(Err(PersistentConfigError::NotPresent)); - - let result = create_wallet(&config, &mut persistent_config); - - assert_eq!( - result, - Err(PersistentConfigError::NotPresent.into_configurator_error("[wallet info]")) - ); - } - - #[test] - pub fn update_db_password_does_nothing_if_no_derivation_path_info_is_supplied() { - let wallet_config = WalletCreationConfig { - earning_wallet_address_opt: None, - derivation_path_info_opt: None, - real_user: RealUser::default(), - }; - let set_password_params_arc = Arc::new(Mutex::new(vec![])); - let mut persistent_config = - PersistentConfigurationMock::new().change_password_params(&set_password_params_arc); - - let result = update_db_password(&wallet_config, &mut persistent_config); - - assert_eq!(result, Ok(())); - let set_password_params = set_password_params_arc.lock().unwrap(); - assert!(set_password_params.is_empty()); - } - - #[test] - pub fn update_db_password_sets_password_if_derivation_path_info_is_supplied() { - let wallet_config = WalletCreationConfig { - earning_wallet_address_opt: None, - derivation_path_info_opt: Some(DerivationPathWalletInfo { - mnemonic_seed: PlainData::new(&[]), - db_password: "booga".to_string(), - consuming_derivation_path_opt: None, - }), - real_user: RealUser::default(), - }; - let set_password_params_arc = Arc::new(Mutex::new(vec![])); - let mut persistent_config = PersistentConfigurationMock::new() - .change_password_params(&set_password_params_arc) - .change_password_result(Ok(())); - - update_db_password(&wallet_config, &mut persistent_config).unwrap(); - - let set_password_params = set_password_params_arc.lock().unwrap(); - assert_eq!(*set_password_params, vec![(None, "booga".to_string())]); - } - - #[test] - pub fn update_db_password_handles_error_changing_password() { - let wallet_config = WalletCreationConfig { - earning_wallet_address_opt: None, - derivation_path_info_opt: Some(DerivationPathWalletInfo { - mnemonic_seed: PlainData::new(b""), - db_password: "password".to_string(), - consuming_derivation_path_opt: None, - }), - real_user: RealUser::new(None, None, None), - }; - let mut persistent_config = PersistentConfigurationMock::new() - .change_password_result(Err(PersistentConfigError::TransactionError)); - - let result = update_db_password(&wallet_config, &mut persistent_config); - - assert_eq!( - result, - Err(PersistentConfigError::TransactionError.into_configurator_error("db-password")) - ); - } - #[test] pub fn port_is_busy_detects_free_port() { let port = find_free_port(); diff --git a/node/src/node_configurator/node_configurator_initialization.rs b/node/src/node_configurator/node_configurator_initialization.rs index 38c44b5e9..2045bd4fa 100644 --- a/node/src/node_configurator/node_configurator_initialization.rs +++ b/node/src/node_configurator/node_configurator_initialization.rs @@ -3,10 +3,8 @@ use crate::apps::app_daemon; use crate::node_configurator::NodeConfigurator; use crate::sub_lib::utils::make_new_multi_config; -use masq_lib::command::StdStreams; use masq_lib::multi_config::{CommandLineVcl, MultiConfig}; use masq_lib::shared_schema::ConfiguratorError; -use masq_lib::utils::ExpectValue; #[derive(Default, Clone, PartialEq, Debug)] pub struct InitializationConfig { @@ -30,10 +28,9 @@ impl NodeConfigurator for NodeConfiguratorInitializationRe fn configure( &self, multi_config: &MultiConfig, - streams: Option<&mut StdStreams>, ) -> Result { let mut config = InitializationConfig::default(); - initialization::parse_args(multi_config, &mut config, streams.expect_v("StdStreams")); + initialization::parse_args(multi_config, &mut config); Ok(config) } } @@ -44,11 +41,7 @@ mod initialization { use masq_lib::constants::DEFAULT_UI_PORT; use masq_lib::multi_config::MultiConfig; - pub fn parse_args( - multi_config: &MultiConfig, - config: &mut InitializationConfig, - _streams: &mut StdStreams<'_>, - ) { + pub fn parse_args(multi_config: &MultiConfig, config: &mut InitializationConfig) { config.ui_port = value_m!(multi_config, "ui-port", u16).unwrap_or(DEFAULT_UI_PORT); } } @@ -60,7 +53,6 @@ mod tests { use crate::test_utils::ArgsBuilder; use masq_lib::constants::DEFAULT_UI_PORT; use masq_lib::multi_config::{CommandLineVcl, VirtualCommandLine}; - use masq_lib::test_utils::fake_stream_holder::FakeStreamHolder; #[test] fn parse_args_creates_configuration_with_defaults() { @@ -70,11 +62,7 @@ mod tests { vec![Box::new(CommandLineVcl::new(args.into()))]; let multi_config = make_new_test_multi_config(&app_daemon(), vcls).unwrap(); - initialization::parse_args( - &multi_config, - &mut config, - &mut FakeStreamHolder::new().streams(), - ); + initialization::parse_args(&multi_config, &mut config); assert_eq!(config.ui_port, DEFAULT_UI_PORT); } @@ -89,11 +77,7 @@ mod tests { vec![Box::new(CommandLineVcl::new(args.into()))]; let multi_config = make_new_test_multi_config(&app_daemon(), vcls).unwrap(); - initialization::parse_args( - &multi_config, - &mut config, - &mut FakeStreamHolder::new().streams(), - ); + initialization::parse_args(&multi_config, &mut config); assert_eq!(config.ui_port, 4321); } diff --git a/node/src/node_configurator/node_configurator_standard.rs b/node/src/node_configurator/node_configurator_standard.rs index d9822a62e..5bb45af31 100644 --- a/node/src/node_configurator/node_configurator_standard.rs +++ b/node/src/node_configurator/node_configurator_standard.rs @@ -3,7 +3,6 @@ use crate::bootstrapper::BootstrapperConfig; use crate::node_configurator::DirsWrapperReal; use crate::node_configurator::{initialize_database, DirsWrapper, NodeConfigurator}; -use masq_lib::command::StdStreams; use masq_lib::crash_point::CrashPoint; use masq_lib::multi_config::MultiConfig; use masq_lib::shared_schema::ConfiguratorError; @@ -17,7 +16,6 @@ impl NodeConfigurator for NodeConfiguratorStandardPrivileged fn configure( &self, multi_config: &MultiConfig, - _streams: Option<&mut StdStreams<'_>>, ) -> Result { let mut bootstrapper_config = BootstrapperConfig::new(); standard::establish_port_configurations(&mut bootstrapper_config); @@ -52,7 +50,6 @@ impl NodeConfigurator for NodeConfiguratorStandardUnprivileg fn configure( &self, multi_config: &MultiConfig, - streams: Option<&mut StdStreams<'_>>, ) -> Result { let mut persistent_config = initialize_database( &self.privileged_config.data_directory, @@ -62,7 +59,6 @@ impl NodeConfigurator for NodeConfiguratorStandardUnprivileg standard::unprivileged_parse_args( multi_config, &mut unprivileged_config, - streams.expect_v("StdStreams"), Some(persistent_config.as_mut()), )?; standard::configure_database(&unprivileged_config, persistent_config.as_mut())?; @@ -97,7 +93,7 @@ pub mod standard { use crate::node_configurator::{ data_directory_from_context, determine_config_file_path, real_user_data_directory_opt_and_chain_name, real_user_from_multi_config_or_populate, - request_existing_db_password, DirsWrapper, + DirsWrapper, }; use crate::server_initializer::GatheredParams; use crate::sub_lib::accountant::DEFAULT_EARNING_WALLET; @@ -235,7 +231,6 @@ pub mod standard { pub fn unprivileged_parse_args( multi_config: &MultiConfig, unprivileged_config: &mut BootstrapperConfig, - streams: &mut StdStreams<'_>, persistent_config_opt: Option<&mut dyn PersistentConfiguration>, ) -> Result<(), ConfiguratorError> { unprivileged_config.clandestine_port_opt = value_m!(multi_config, "clandestine-port", u16); @@ -252,20 +247,10 @@ pub mod standard { } }; let mnc_result = if let Some(persistent_config) = persistent_config_opt { - get_wallets( - streams, - multi_config, - persistent_config, - unprivileged_config, - )?; - make_neighborhood_config( - multi_config, - streams, - Some(persistent_config), - unprivileged_config, - ) + get_wallets(multi_config, persistent_config, unprivileged_config)?; + make_neighborhood_config(multi_config, Some(persistent_config), unprivileged_config) } else { - make_neighborhood_config(multi_config, streams, None, unprivileged_config) + make_neighborhood_config(multi_config, None, unprivileged_config) }; mnc_result.map(|config| unprivileged_config.neighborhood_config = config) @@ -289,7 +274,6 @@ pub mod standard { } pub fn get_wallets( - streams: &mut StdStreams, multi_config: &MultiConfig, persistent_config: &mut dyn PersistentConfiguration, config: &mut BootstrapperConfig, @@ -307,7 +291,7 @@ pub mod standard { if (earning_wallet_opt.is_none() || consuming_wallet_opt.is_none()) && mnemonic_seed_exists { if let Some(db_password) = - standard::get_db_password(multi_config, streams, config, persistent_config)? + standard::get_db_password(multi_config, config, persistent_config)? { if consuming_wallet_opt.is_none() { consuming_wallet_opt = standard::get_consuming_wallet_opt_from_derivation_path( @@ -353,7 +337,6 @@ pub mod standard { pub fn make_neighborhood_config( multi_config: &MultiConfig, - streams: &mut StdStreams, persistent_config_opt: Option<&mut dyn PersistentConfiguration>, unprivileged_config: &mut BootstrapperConfig, ) -> Result { @@ -361,12 +344,9 @@ pub mod standard { match convert_ci_configs(multi_config)? { Some(configs) => configs, None => match persistent_config_opt { - Some(persistent_config) => get_past_neighbors( - multi_config, - streams, - persistent_config, - unprivileged_config, - )?, + Some(persistent_config) => { + get_past_neighbors(multi_config, persistent_config, unprivileged_config)? + } None => vec![], }, } @@ -440,17 +420,12 @@ pub mod standard { pub fn get_past_neighbors( multi_config: &MultiConfig, - streams: &mut StdStreams, persistent_config: &mut dyn PersistentConfiguration, unprivileged_config: &mut BootstrapperConfig, ) -> Result, ConfiguratorError> { Ok( - match &standard::get_db_password( - multi_config, - streams, - unprivileged_config, - persistent_config, - )? { + match &standard::get_db_password(multi_config, unprivileged_config, persistent_config)? + { Some(db_password) => match persistent_config.past_neighbors(db_password) { Ok(Some(past_neighbors)) => past_neighbors, Ok(None) => vec![], @@ -635,26 +610,13 @@ pub mod standard { pub fn get_db_password( multi_config: &MultiConfig, - streams: &mut StdStreams, config: &mut BootstrapperConfig, persistent_config: &mut dyn PersistentConfiguration, ) -> Result, ConfiguratorError> { if let Some(db_password) = &config.db_password_opt { return Ok(Some(db_password.clone())); } - let db_password_opt = match value_user_specified_m!(multi_config, "db-password", String) { - (Some(dbp), _) => Some(dbp), - (None, false) => None, - (None, true) => match request_existing_db_password( - streams, - Some("Decrypt information from previous runs"), - "Enter password: ", - persistent_config, - ) { - Ok(password_opt) => password_opt, - Err(e) => return Err(e), - }, - }; + let db_password_opt = value_m!(multi_config, "db-password", String); if let Some(db_password) = &db_password_opt { set_db_password_at_first_mention(db_password, persistent_config)?; config.db_password_opt = Some(db_password.clone()); @@ -686,7 +648,6 @@ pub mod standard { use crate::test_utils::pure_test_utils::make_default_persistent_configuration; use crate::test_utils::ArgsBuilder; use masq_lib::multi_config::VirtualCommandLine; - use masq_lib::test_utils::fake_stream_holder::FakeStreamHolder; use masq_lib::test_utils::utils::TEST_DEFAULT_CHAIN_NAME; use masq_lib::utils::running_test; use std::sync::{Arc, Mutex}; @@ -695,7 +656,6 @@ pub mod standard { fn get_wallets_handles_consuming_private_key_and_earning_wallet_address_when_database_contains_mnemonic_seed( ) { running_test(); - let mut holder = FakeStreamHolder::new(); let args = ArgsBuilder::new() .param( "--consuming-private-key", @@ -715,7 +675,6 @@ pub mod standard { let mut bootstrapper_config = BootstrapperConfig::new(); let result = standard::get_wallets( - &mut holder.streams(), &multi_config, &mut persistent_config, &mut bootstrapper_config, @@ -729,7 +688,6 @@ pub mod standard { #[test] fn get_wallets_handles_consuming_private_key_with_mnemonic_seed() { running_test(); - let mut holder = FakeStreamHolder::new(); let args = ArgsBuilder::new() .param( "--consuming-private-key", @@ -746,7 +704,6 @@ pub mod standard { let mut bootstrapper_config = BootstrapperConfig::new(); let result = standard::get_wallets( - &mut holder.streams(), &multi_config, &mut persistent_config, &mut bootstrapper_config, @@ -1067,14 +1024,13 @@ mod tests { }; use masq_lib::shared_schema::{ConfiguratorError, ParamError}; use masq_lib::test_utils::environment_guard::{ClapGuard, EnvironmentGuard}; - use masq_lib::test_utils::fake_stream_holder::{ByteArrayWriter, FakeStreamHolder}; + use masq_lib::test_utils::fake_stream_holder::ByteArrayWriter; use masq_lib::test_utils::utils::{ ensure_node_home_directory_exists, DEFAULT_CHAIN_ID, TEST_DEFAULT_CHAIN_NAME, }; use masq_lib::utils::{running_test, SliceToVec}; use rustc_hex::FromHex; use std::fs::File; - use std::io::Cursor; use std::io::Write; use std::net::IpAddr; use std::net::SocketAddr; @@ -1105,7 +1061,6 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, - &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration()), &mut BootstrapperConfig::new(), ); @@ -1154,7 +1109,6 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, - &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration()), &mut BootstrapperConfig::new(), ); @@ -1188,7 +1142,6 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, - &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration()), &mut BootstrapperConfig::new(), ); @@ -1223,7 +1176,6 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, - &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration().check_password_result(Ok(false))), &mut BootstrapperConfig::new(), ); @@ -1251,7 +1203,6 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, - &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration()), &mut BootstrapperConfig::new(), ); @@ -1284,7 +1235,6 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, - &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration()), &mut BootstrapperConfig::new(), ); @@ -1317,7 +1267,6 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, - &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration().check_password_result(Ok(false))), &mut BootstrapperConfig::new(), ); @@ -1346,7 +1295,6 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, - &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration().check_password_result(Ok(false))), &mut BootstrapperConfig::new(), ); @@ -1380,7 +1328,6 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, - &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration()), &mut BootstrapperConfig::new(), ); @@ -1405,7 +1352,6 @@ mod tests { let result = standard::get_past_neighbors( &multi_config, - &mut FakeStreamHolder::new().streams(), &mut persistent_config, &mut unprivileged_config, ) @@ -1425,7 +1371,6 @@ mod tests { let result = standard::get_past_neighbors( &multi_config, - &mut FakeStreamHolder::new().streams(), &mut persistent_config, &mut unprivileged_config, ) @@ -1446,7 +1391,6 @@ mod tests { let result = standard::get_past_neighbors( &multi_config, - &mut FakeStreamHolder::new().streams(), &mut persistent_config, &mut unprivileged_config, ); @@ -1460,56 +1404,6 @@ mod tests { ); } - #[test] - fn get_past_neighbors_handles_error_getting_db_password() { - running_test(); - let args = ["command", "--db-password"]; - let simplified_multi_config = pure_test_utils::make_simplified_multi_config(args); - let mut persistent_config = PersistentConfigurationMock::new() - .check_password_result(Err(PersistentConfigError::NotPresent)); - let mut unprivileged_config = BootstrapperConfig::new(); - - let result = standard::get_past_neighbors( - &simplified_multi_config, - &mut FakeStreamHolder::new().streams(), - &mut persistent_config, - &mut unprivileged_config, - ); - - assert_eq!( - result, - Err(ConfiguratorError::new(vec![ParamError::new( - "db-password", - "NotPresent" - )])) - ); - } - - #[test] - fn get_past_neighbors_handles_incorrect_password() { - running_test(); - let args = ["program", "--db-password"]; - let simplified_multi_config = pure_test_utils::make_simplified_multi_config(args); - let mut persistent_config = PersistentConfigurationMock::new() - .check_password_result(Err(PersistentConfigError::PasswordError)); - let mut unprivileged_config = BootstrapperConfig::new(); - - let result = standard::get_past_neighbors( - &simplified_multi_config, - &mut FakeStreamHolder::new().streams(), - &mut persistent_config, - &mut unprivileged_config, - ); - - assert_eq!( - result, - Err(ConfiguratorError::new(vec![ParamError::new( - "db-password", - "PasswordError" - )])) - ); - } - #[test] fn convert_ci_configs_does_not_like_neighbors_with_bad_syntax() { running_test(); @@ -1612,7 +1506,6 @@ mod tests { standard::unprivileged_parse_args( &multi_config, &mut bootstrapper_config, - &mut FakeStreamHolder::new().streams(), Some(&mut persistent_config), ) .unwrap(); @@ -1750,13 +1643,8 @@ mod tests { vec![Box::new(CommandLineVcl::new(args.into()))]; let multi_config = make_new_test_multi_config(&app_node(), vcls).unwrap(); - standard::unprivileged_parse_args( - &multi_config, - &mut config, - &mut FakeStreamHolder::new().streams(), - Some(&mut persistent_config), - ) - .unwrap(); + standard::unprivileged_parse_args(&multi_config, &mut config, Some(&mut persistent_config)) + .unwrap(); assert_eq!( value_m!(multi_config, "config-file", PathBuf), @@ -1805,7 +1693,6 @@ mod tests { standard::unprivileged_parse_args( &multi_config, &mut config, - &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration().check_password_result(Ok(false))), ) .unwrap(); @@ -1859,7 +1746,6 @@ mod tests { standard::unprivileged_parse_args( &multi_config, &mut config, - &mut FakeStreamHolder::new().streams(), Some(&mut persistent_configuration), ) .unwrap(); @@ -1993,13 +1879,7 @@ mod tests { let mut persistent_config = make_persistent_config(None, None, None, None, None, None); let mut config = BootstrapperConfig::new(); - standard::get_wallets( - &mut FakeStreamHolder::new().streams(), - &multi_config, - &mut persistent_config, - &mut config, - ) - .unwrap(); + standard::get_wallets(&multi_config, &mut persistent_config, &mut config).unwrap(); assert_eq!(config.consuming_wallet, None); assert_eq!(config.earning_wallet, DEFAULT_EARNING_WALLET.clone()); @@ -2014,7 +1894,6 @@ mod tests { .mnemonic_seed_exists_result(Err(PersistentConfigError::NotPresent)); let result = standard::get_wallets( - &mut FakeStreamHolder::new().streams(), &multi_config, &mut persistent_config, &mut BootstrapperConfig::new(), @@ -2037,12 +1916,7 @@ mod tests { let mut config = BootstrapperConfig::new(); config.db_password_opt = Some("password".to_string()); - let result = standard::get_wallets( - &mut FakeStreamHolder::new().streams(), - &multi_config, - &mut persistent_config, - &mut config, - ); + let result = standard::get_wallets(&multi_config, &mut persistent_config, &mut config); assert_eq!( result, @@ -2050,29 +1924,6 @@ mod tests { ); } - #[test] - fn get_wallets_handles_failure_of_get_db_password() { - let args = ["program", "--db-password"]; - let multi_config = pure_test_utils::make_simplified_multi_config(args); - let mut persistent_config = PersistentConfigurationMock::new() - .earning_wallet_from_address_result(Ok(None)) - .mnemonic_seed_exists_result(Ok(true)) - .check_password_result(Err(PersistentConfigError::NotPresent)); - let mut config = BootstrapperConfig::new(); - - let result = standard::get_wallets( - &mut FakeStreamHolder::new().streams(), - &multi_config, - &mut persistent_config, - &mut config, - ); - - assert_eq!( - result, - Err(PersistentConfigError::NotPresent.into_configurator_error("db-password")) - ); - } - #[test] fn earning_wallet_address_different_from_database() { running_test(); @@ -2092,13 +1943,8 @@ mod tests { ); let mut config = BootstrapperConfig::new(); - let result = standard::get_wallets( - &mut FakeStreamHolder::new().streams(), - &multi_config, - &mut persistent_config, - &mut config, - ) - .err(); + let result = + standard::get_wallets(&multi_config, &mut persistent_config, &mut config).err(); assert_eq! (result, Some (ConfiguratorError::new (vec![ ParamError::new ("earning-wallet", "Cannot change to an address (0x0123456789012345678901234567890123456789) different from that previously set (0x9876543210987654321098765432109876543210)") @@ -2124,13 +1970,7 @@ mod tests { ); let mut config = BootstrapperConfig::new(); - standard::get_wallets( - &mut FakeStreamHolder::new().streams(), - &multi_config, - &mut persistent_config, - &mut config, - ) - .unwrap(); + standard::get_wallets(&multi_config, &mut persistent_config, &mut config).unwrap(); assert_eq!( config.earning_wallet, @@ -2162,13 +2002,8 @@ mod tests { ); let mut config = BootstrapperConfig::new(); - let result = standard::get_wallets( - &mut FakeStreamHolder::new().streams(), - &multi_config, - &mut persistent_config, - &mut config, - ) - .err(); + let result = + standard::get_wallets(&multi_config, &mut persistent_config, &mut config).err(); assert_eq! (result, Some (ConfiguratorError::new (vec![ ParamError::new ("consuming-private-key", "Cannot use --consuming-private-key or --earning-wallet when database contains wallet information") @@ -2197,13 +2032,8 @@ mod tests { ); let mut config = BootstrapperConfig::new(); - let result = standard::get_wallets( - &mut FakeStreamHolder::new().streams(), - &multi_config, - &mut persistent_config, - &mut config, - ) - .err(); + let result = + standard::get_wallets(&multi_config, &mut persistent_config, &mut config).err(); assert_eq! (result, Some (ConfiguratorError::new (vec![ ParamError::new ("earning-wallet", "Cannot use --consuming-private-key or --earning-wallet when database contains wallet information") @@ -2227,13 +2057,7 @@ mod tests { .check_password_result(Ok(false)); let mut config = BootstrapperConfig::new(); - standard::get_wallets( - &mut FakeStreamHolder::new().streams(), - &multi_config, - &mut persistent_config, - &mut config, - ) - .unwrap(); + standard::get_wallets(&multi_config, &mut persistent_config, &mut config).unwrap(); let mnemonic_seed = make_mnemonic_seed(mnemonic_seed_prefix); let expected_consuming_wallet = Wallet::from( @@ -2263,13 +2087,7 @@ mod tests { .check_password_result(Ok(false)); let mut config = BootstrapperConfig::new(); - standard::get_wallets( - &mut FakeStreamHolder::new().streams(), - &multi_config, - &mut persistent_config, - &mut config, - ) - .unwrap(); + standard::get_wallets(&multi_config, &mut persistent_config, &mut config).unwrap(); assert_eq!(config.consuming_wallet, None); assert_eq!( @@ -2278,55 +2096,6 @@ mod tests { ); } - #[test] - fn consuming_wallet_derivation_path_plus_mnemonic_seed_with_no_db_password_value() { - running_test(); - let args = ["program", "--db-password"]; - let multi_config = pure_test_utils::make_simplified_multi_config(args); - let mnemonic_seed_prefix = "mnemonic_seed"; - let mut persistent_config = make_persistent_config( - Some(mnemonic_seed_prefix), - None, - Some("m/44'/60'/1'/2/3"), - Some("0xcafedeadbeefbabefacecafedeadbeefbabeface"), - None, - None, - ) - .check_password_result(Ok(false)) - .check_password_result(Ok(true)) - .check_password_result(Ok(false)); - let mut config = BootstrapperConfig::new(); - let mut stdout_writer = ByteArrayWriter::new(); - let mut streams = &mut StdStreams { - stdin: &mut Cursor::new(&b"prompt for me\n"[..]), - stdout: &mut stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; - - standard::get_wallets( - &mut streams, - &multi_config, - &mut persistent_config, - &mut config, - ) - .unwrap(); - - let captured_output = stdout_writer.get_string(); - assert_eq!( - captured_output, - "Decrypt information from previous runs\nEnter password: " - ); - let mnemonic_seed = make_mnemonic_seed(mnemonic_seed_prefix); - let expected_consuming_wallet = Wallet::from( - Bip32ECKeyPair::from_raw(mnemonic_seed.as_ref(), "m/44'/60'/1'/2/3").unwrap(), - ); - assert_eq!(config.consuming_wallet, Some(expected_consuming_wallet)); - assert_eq!( - config.earning_wallet, - Wallet::from_str("0xcafedeadbeefbabefacecafedeadbeefbabeface").unwrap() - ); - } - #[test] fn unprivileged_parse_args_with_invalid_consuming_wallet_private_key_reacts_correctly() { running_test(); @@ -2383,16 +2152,10 @@ mod tests { ]; let multi_config = make_new_test_multi_config(&app_node(), vcls).unwrap(); let stdout_writer = &mut ByteArrayWriter::new(); - let mut streams = &mut StdStreams { - stdin: &mut Cursor::new(&b""[..]), - stdout: stdout_writer, - stderr: &mut ByteArrayWriter::new(), - }; standard::unprivileged_parse_args( &multi_config, &mut config, - &mut streams, Some(&mut make_default_persistent_configuration()), ) .unwrap(); @@ -2412,18 +2175,12 @@ mod tests { running_test(); let args = ["program"]; let multi_config = pure_test_utils::make_simplified_multi_config(args); - let mut holder = FakeStreamHolder::new(); let mut config = BootstrapperConfig::new(); let mut persistent_config = make_default_persistent_configuration().check_password_result(Ok(false)); config.db_password_opt = Some("password".to_string()); - let result = standard::get_db_password( - &multi_config, - &mut holder.streams(), - &mut config, - &mut persistent_config, - ); + let result = standard::get_db_password(&multi_config, &mut config, &mut persistent_config); assert_eq!(result, Ok(Some("password".to_string()))); } @@ -2432,49 +2189,15 @@ mod tests { fn get_db_password_doesnt_bother_if_database_has_no_password_yet() { running_test(); let multi_config = make_new_test_multi_config(&app_node(), vec![]).unwrap(); - let mut holder = FakeStreamHolder::new(); let mut config = BootstrapperConfig::new(); let mut persistent_config = make_default_persistent_configuration().check_password_result(Ok(true)); - let result = standard::get_db_password( - &multi_config, - &mut holder.streams(), - &mut config, - &mut persistent_config, - ); + let result = standard::get_db_password(&multi_config, &mut config, &mut persistent_config); assert_eq!(result, Ok(None)); } - #[test] - fn get_db_password_handles_database_read_error() { - running_test(); - let args = ["command", "--db-password"]; - let multi_config = pure_test_utils::make_simplified_multi_config(args); - let mut streams = &mut StdStreams { - stdin: &mut Cursor::new(&b"Too Many S3cr3ts!\n"[..]), - stdout: &mut ByteArrayWriter::new(), - stderr: &mut ByteArrayWriter::new(), - }; - let mut config = BootstrapperConfig::new(); - let mut persistent_config = make_default_persistent_configuration() - .check_password_result(Ok(false)) - .check_password_result(Err(PersistentConfigError::NotPresent)); - - let result = standard::get_db_password( - &multi_config, - &mut streams, - &mut config, - &mut persistent_config, - ); - - assert_eq!( - result, - Err(PersistentConfigError::NotPresent.into_configurator_error("db-password")) - ); - } - #[test] fn get_db_password_handles_database_write_error() { running_test(); @@ -2487,12 +2210,7 @@ mod tests { .check_password_result(Ok(true)) .change_password_result(Err(NotPresent)); - let result = standard::get_db_password( - &multi_config, - &mut FakeStreamHolder::new().streams(), - &mut config, - &mut persistent_config, - ); + let result = standard::get_db_password(&multi_config, &mut config, &mut persistent_config); assert_eq!( result, @@ -2561,10 +2279,7 @@ mod tests { let args = ["program", "--ip", "1.2.3.4", "--chain", "dev"]; let config = subject - .configure( - &make_simplified_multi_config(args), - Some(&mut FakeStreamHolder::new().streams()), - ) + .configure(&make_simplified_multi_config(args)) .unwrap(); assert_eq!( @@ -2586,10 +2301,7 @@ mod tests { ]; let config = subject - .configure( - &make_simplified_multi_config(args), - Some(&mut FakeStreamHolder::new().streams()), - ) + .configure(&make_simplified_multi_config(args)) .unwrap(); assert_eq!( @@ -2606,10 +2318,7 @@ mod tests { let args = ["program", "--ip", "1.2.3.4"]; let config = subject - .configure( - &make_simplified_multi_config(args), - Some(&mut FakeStreamHolder::new().streams()), - ) + .configure(&make_simplified_multi_config(args)) .unwrap(); assert_eq!( @@ -2631,10 +2340,7 @@ mod tests { ]; let bootstrapper_config = subject - .configure( - &make_simplified_multi_config(args), - Some(&mut FakeStreamHolder::new().streams()), - ) + .configure(&make_simplified_multi_config(args)) .unwrap(); assert_eq!( bootstrapper_config.blockchain_bridge_config.chain_id, @@ -2656,10 +2362,7 @@ mod tests { let args = ["program", "--ip", "1.2.3.4", "--gas-price", "57"]; let config = subject - .configure( - &make_simplified_multi_config(args), - Some(&mut FakeStreamHolder::new().streams()), - ) + .configure(&make_simplified_multi_config(args)) .unwrap(); assert_eq!(config.blockchain_bridge_config.gas_price, 57); @@ -2679,10 +2382,7 @@ mod tests { let args = ["program", "--ip", "1.2.3.4"]; let config = subject - .configure( - &make_simplified_multi_config(args), - Some(&mut FakeStreamHolder::new().streams()), - ) + .configure(&make_simplified_multi_config(args)) .unwrap(); assert_eq!(config.blockchain_bridge_config.gas_price, 1); diff --git a/node/src/run_modes.rs b/node/src/run_modes.rs index a02a24141..3d9e12d67 100644 --- a/node/src/run_modes.rs +++ b/node/src/run_modes.rs @@ -248,7 +248,7 @@ impl Runner for RunnerReal { } fn run_daemon(&self, args: &[String], streams: &mut StdStreams<'_>) -> Result<(), RunnerError> { - let mut initializer = self.daemon_initializer_factory.make(args, streams)?; + let mut initializer = self.daemon_initializer_factory.make(args)?; initializer.go(streams, args)?; Ok(()) //there might presently be no way to make this fn terminate politely } diff --git a/node/src/run_modes_factories.rs b/node/src/run_modes_factories.rs index 386de5156..fa36c37a6 100644 --- a/node/src/run_modes_factories.rs +++ b/node/src/run_modes_factories.rs @@ -61,11 +61,7 @@ pub trait ServerInitializerFactory { fn make(&self) -> Box>; } pub trait DaemonInitializerFactory { - fn make( - &self, - args: &[String], - streams: &mut StdStreams, - ) -> Result, ConfiguratorError>; + fn make(&self, args: &[String]) -> Result, ConfiguratorError>; } pub trait DumpConfigRunner { @@ -96,15 +92,11 @@ impl ServerInitializerFactory for ServerInitializerFactoryReal { } impl DaemonInitializerFactory for DaemonInitializerFactoryReal { - fn make( - &self, - args: &[String], - streams: &mut StdStreams, - ) -> Result, ConfiguratorError> { + fn make(&self, args: &[String]) -> Result, ConfiguratorError> { let configurator = Self::expect(self.configurator.take()); let multi_config = NodeConfiguratorInitializationReal::make_multi_config_daemon_specific(args)?; - let initialization_config = configurator.configure(&multi_config, Some(streams))?; + let initialization_config = configurator.configure(&multi_config)?; let initializer_clustered_params = Self::expect(self.inner.take()); let daemon_initializer = Box::new(DaemonInitializerReal::new( initialization_config, @@ -153,7 +145,6 @@ mod tests { make_pre_populated_mocked_directory_wrapper, ChannelFactoryMock, }; use masq_lib::shared_schema::ConfiguratorError; - use masq_lib::test_utils::fake_stream_holder::FakeStreamHolder; use masq_lib::utils::SliceToVec; use std::sync::{Arc, Mutex}; @@ -208,9 +199,8 @@ mod tests { 1234.to_string().as_str(), ] .array_of_borrows_to_vec(); - let mut stream_holder = FakeStreamHolder::default(); - let result = subject.make(&args, &mut stream_holder.streams()).unwrap(); + let result = subject.make(&args).unwrap(); let factory_product = result .as_any() @@ -250,9 +240,8 @@ mod tests { daemon_clustered_params, ); let args = &["program", "--wooooooo", "--fooooooo"].array_of_borrows_to_vec(); - let mut stream_holder = FakeStreamHolder::default(); - let result = subject.make(&args, &mut stream_holder.streams()); + let result = subject.make(&args); let mut config_error = result.err().unwrap(); let actual_error = config_error.param_errors.remove(0); @@ -281,9 +270,8 @@ mod tests { daemon_clustered_params, ); let args = &["program", "--initialization"].array_of_borrows_to_vec(); - let mut stream_holder = FakeStreamHolder::default(); - let result = subject.make(&args, &mut stream_holder.streams()); + let result = subject.make(&args); let mut config_error = result.err().unwrap(); let actual_error = config_error.param_errors.remove(0); @@ -374,11 +362,7 @@ pub mod mocks { } impl DaemonInitializerFactory for DaemonInitializerFactoryMock { - fn make( - &self, - args: &[String], - _streams: &mut StdStreams, - ) -> Result, ConfiguratorError> { + fn make(&self, args: &[String]) -> Result, ConfiguratorError> { self.make_params.lock().unwrap().push(args.to_vec()); self.make_result.borrow_mut().remove(0) } @@ -488,7 +472,6 @@ pub mod mocks { fn configure( &self, multi_config: &MultiConfig, - _streams: Option<&mut StdStreams>, ) -> Result { ingest_values_from_multi_config( &self.demanded_values_from_multi_config, From d646da93e9f51963165e9beb628bec0f3f84fbe0 Mon Sep 17 00:00:00 2001 From: FinsaasGH <89403560+FinsaasGH@users.noreply.github.com> Date: Fri, 22 Oct 2021 12:16:29 -0600 Subject: [PATCH 02/17] GH-414: Updated generate wallets to use 12 word mnemonic phrase as default (#2) Co-authored-by: FinsaasGH --- masq/src/commands/generate_wallets_command.rs | 4 ++-- node/src/db_config/persistent_configuration.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/masq/src/commands/generate_wallets_command.rs b/masq/src/commands/generate_wallets_command.rs index 489e783e8..dc863fa59 100644 --- a/masq/src/commands/generate_wallets_command.rs +++ b/masq/src/commands/generate_wallets_command.rs @@ -107,7 +107,7 @@ pub fn generate_wallets_subcommand() -> App<'static, 'static> { .long("word-count") .value_name("WORD-COUNT") .required(false) - .default_value("24") + .default_value("12") .takes_value(true) .possible_values(&["12", "15", "18", "21", "24"]) ) @@ -226,7 +226,7 @@ mod tests { generate_wallets_command, &GenerateWalletsCommand { db_password: "password".to_string(), - word_count: 24, + word_count: 12, language: "English".to_string(), passphrase_opt: None, consuming_path: DEFAULT_CONSUMING_DERIVATION_PATH.to_string(), diff --git a/node/src/db_config/persistent_configuration.rs b/node/src/db_config/persistent_configuration.rs index 6dbf9ddd7..f912d855d 100644 --- a/node/src/db_config/persistent_configuration.rs +++ b/node/src/db_config/persistent_configuration.rs @@ -416,7 +416,7 @@ impl PersistentConfigurationReal { } fn validate_derivation_path(derivation_path: &str) -> bool { - let mnemonic = Bip39::mnemonic(MnemonicType::Words24, Language::English); + let mnemonic = Bip39::mnemonic(MnemonicType::Words12, Language::English); let seed = Bip39::seed(&mnemonic, ""); Bip32ECKeyPair::from_raw(seed.as_bytes(), derivation_path).is_ok() } @@ -924,7 +924,7 @@ mod tests { } fn make_seed_info(db_password: &str) -> (PlainData, String) { - let mnemonic = Bip39::mnemonic(MnemonicType::Words24, Language::English); + let mnemonic = Bip39::mnemonic(MnemonicType::Words12, Language::English); let mnemonic_seed = Bip39::seed(&mnemonic, ""); let seed_bytes = PlainData::new(mnemonic_seed.as_ref()); let encoded_seed = encode_bytes(Some(seed_bytes.clone())).unwrap().unwrap(); From a965c7c1240b315c1740b9a4ef76c769316abf6f Mon Sep 17 00:00:00 2001 From: FinsaasGH Date: Fri, 22 Oct 2021 12:51:07 -0600 Subject: [PATCH 03/17] Revert "GH-414: Updated generate wallets to use 12 word mnemonic phrase as default (#2)" This reverts commit d646da93e9f51963165e9beb628bec0f3f84fbe0. --- masq/src/commands/generate_wallets_command.rs | 4 ++-- node/src/db_config/persistent_configuration.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/masq/src/commands/generate_wallets_command.rs b/masq/src/commands/generate_wallets_command.rs index dc863fa59..489e783e8 100644 --- a/masq/src/commands/generate_wallets_command.rs +++ b/masq/src/commands/generate_wallets_command.rs @@ -107,7 +107,7 @@ pub fn generate_wallets_subcommand() -> App<'static, 'static> { .long("word-count") .value_name("WORD-COUNT") .required(false) - .default_value("12") + .default_value("24") .takes_value(true) .possible_values(&["12", "15", "18", "21", "24"]) ) @@ -226,7 +226,7 @@ mod tests { generate_wallets_command, &GenerateWalletsCommand { db_password: "password".to_string(), - word_count: 12, + word_count: 24, language: "English".to_string(), passphrase_opt: None, consuming_path: DEFAULT_CONSUMING_DERIVATION_PATH.to_string(), diff --git a/node/src/db_config/persistent_configuration.rs b/node/src/db_config/persistent_configuration.rs index f912d855d..6dbf9ddd7 100644 --- a/node/src/db_config/persistent_configuration.rs +++ b/node/src/db_config/persistent_configuration.rs @@ -416,7 +416,7 @@ impl PersistentConfigurationReal { } fn validate_derivation_path(derivation_path: &str) -> bool { - let mnemonic = Bip39::mnemonic(MnemonicType::Words12, Language::English); + let mnemonic = Bip39::mnemonic(MnemonicType::Words24, Language::English); let seed = Bip39::seed(&mnemonic, ""); Bip32ECKeyPair::from_raw(seed.as_bytes(), derivation_path).is_ok() } @@ -924,7 +924,7 @@ mod tests { } fn make_seed_info(db_password: &str) -> (PlainData, String) { - let mnemonic = Bip39::mnemonic(MnemonicType::Words12, Language::English); + let mnemonic = Bip39::mnemonic(MnemonicType::Words24, Language::English); let mnemonic_seed = Bip39::seed(&mnemonic, ""); let seed_bytes = PlainData::new(mnemonic_seed.as_ref()); let encoded_seed = encode_bytes(Some(seed_bytes.clone())).unwrap().unwrap(); From c937129cc4e46750eedf4ad14e91c177cf6bfe0b Mon Sep 17 00:00:00 2001 From: FinsaasGH Date: Fri, 22 Oct 2021 12:51:13 -0600 Subject: [PATCH 04/17] Revert "GH-457 (#1)" This reverts commit ed718c4cbdac439a77e5b525d955bca0d4eb6556. --- .github/workflows/ci-matrix.yml | 1 - masq/src/command_processor.rs | 5 +- node/src/bootstrapper.rs | 6 +- node/src/daemon/setup_reporter.rs | 27 +- node/src/node_configurator/mod.rs | 1397 ++++++++++++++++- .../node_configurator_initialization.rs | 24 +- .../node_configurator_standard.rs | 368 ++++- node/src/run_modes.rs | 2 +- node/src/run_modes_factories.rs | 31 +- 9 files changed, 1799 insertions(+), 62 deletions(-) diff --git a/.github/workflows/ci-matrix.yml b/.github/workflows/ci-matrix.yml index 882a006cf..3f7735130 100644 --- a/.github/workflows/ci-matrix.yml +++ b/.github/workflows/ci-matrix.yml @@ -47,4 +47,3 @@ jobs: with: name: Build Results ${{ matrix.os }} path: results - diff --git a/masq/src/command_processor.rs b/masq/src/command_processor.rs index e73265b4b..044391134 100644 --- a/masq/src/command_processor.rs +++ b/masq/src/command_processor.rs @@ -54,9 +54,10 @@ impl CommandProcessor for CommandProcessorReal { fn process(&mut self, command: Box) -> Result<(), CommandError> { if let Some(synchronizer) = self.context.terminal_interface.clone() { let _lock = synchronizer.lock(); - return command.execute(&mut self.context); + command.execute(&mut self.context) + } else { + command.execute(&mut self.context) } - command.execute(&mut self.context) } fn close(&mut self) { diff --git a/node/src/bootstrapper.rs b/node/src/bootstrapper.rs index ae086fb89..66fb43583 100644 --- a/node/src/bootstrapper.rs +++ b/node/src/bootstrapper.rs @@ -391,7 +391,7 @@ impl ConfiguredByPrivilege for Bootstrapper { &mut self, multi_config: &MultiConfig, ) -> Result<(), ConfiguratorError> { - self.config = NodeConfiguratorStandardPrivileged::new().configure(multi_config)?; + self.config = NodeConfiguratorStandardPrivileged::new().configure(multi_config, None)?; self.logger_initializer.init( self.config.data_directory.clone(), &self.config.real_user, @@ -422,8 +422,8 @@ impl ConfiguredByPrivilege for Bootstrapper { ) -> Result<(), ConfiguratorError> { // NOTE: The following line of code is not covered by unit tests fdlimit::raise_fd_limit(); - let unprivileged_config = - NodeConfiguratorStandardUnprivileged::new(&self.config).configure(multi_config)?; + let unprivileged_config = NodeConfiguratorStandardUnprivileged::new(&self.config) + .configure(multi_config, Some(streams))?; self.config.merge_unprivileged(unprivileged_config); self.set_up_clandestine_port(); let (cryptde_ref, _) = Bootstrapper::initialize_cryptdes( diff --git a/node/src/daemon/setup_reporter.rs b/node/src/daemon/setup_reporter.rs index f83d47c77..767e69a06 100644 --- a/node/src/daemon/setup_reporter.rs +++ b/node/src/daemon/setup_reporter.rs @@ -22,6 +22,7 @@ use crate::sub_lib::utils::make_new_multi_config; use crate::test_utils::main_cryptde; use clap::value_t; use itertools::Itertools; +use masq_lib::command::StdStreams; use masq_lib::constants::DEFAULT_CHAIN_NAME; use masq_lib::messages::UiSetupResponseValueStatus::{Blank, Configured, Default, Required, Set}; use masq_lib::messages::{UiSetupRequestValue, UiSetupResponseValue, UiSetupResponseValueStatus}; @@ -29,6 +30,7 @@ use masq_lib::multi_config::{ CommandLineVcl, ConfigFileVcl, EnvironmentVcl, MultiConfig, VirtualCommandLine, }; use masq_lib::shared_schema::{shared_app, ConfiguratorError}; +use masq_lib::test_utils::fake_stream_holder::{ByteArrayReader, ByteArrayWriter}; use std::collections::HashMap; use std::path::{Path, PathBuf}; use std::str::FromStr; @@ -390,6 +392,11 @@ impl SetupReporterReal { Option, ) { let mut error_so_far = ConfiguratorError::new(vec![]); + let mut streams = StdStreams { + stdin: &mut ByteArrayReader::new(b""), + stdout: &mut ByteArrayWriter::new(), + stderr: &mut ByteArrayWriter::new(), + }; let mut bootstrapper_config = BootstrapperConfig::new(); bootstrapper_config.data_directory = data_directory.to_path_buf(); match privileged_parse_args(dirs_wrapper, multi_config, &mut bootstrapper_config) { @@ -405,6 +412,7 @@ impl SetupReporterReal { match unprivileged_parse_args( multi_config, &mut bootstrapper_config, + &mut streams, Some(&mut persistent_config), ) { Ok(_) => ( @@ -420,13 +428,20 @@ impl SetupReporterReal { } } } - Err(_) => match unprivileged_parse_args(multi_config, &mut bootstrapper_config, None) { - Ok(_) => ((bootstrapper_config, None), None), - Err(ce) => { - error_so_far.extend(ce); - ((bootstrapper_config, None), Some(error_so_far)) + Err(_) => { + match unprivileged_parse_args( + multi_config, + &mut bootstrapper_config, + &mut streams, + None, + ) { + Ok(_) => ((bootstrapper_config, None), None), + Err(ce) => { + error_so_far.extend(ce); + ((bootstrapper_config, None), Some(error_so_far)) + } } - }, + } } } } diff --git a/node/src/node_configurator/mod.rs b/node/src/node_configurator/mod.rs index 3a7eff741..d30e7e449 100644 --- a/node/src/node_configurator/mod.rs +++ b/node/src/node_configurator/mod.rs @@ -4,25 +4,113 @@ pub mod configurator; pub mod node_configurator_initialization; pub mod node_configurator_standard; +use crate::blockchain::bip32::Bip32ECKeyPair; +use crate::blockchain::bip39::Bip39; +use crate::blockchain::blockchain_interface::chain_id_from_name; use crate::bootstrapper::RealUser; use crate::database::db_initializer::{DbInitializer, DbInitializerReal, DATABASE_FILE}; use crate::db_config::persistent_configuration::{ - PersistentConfiguration, PersistentConfigurationReal, + PersistentConfigError, PersistentConfiguration, PersistentConfigurationReal, }; +use crate::masq_lib::utils::{DEFAULT_CONSUMING_DERIVATION_PATH, DEFAULT_EARNING_DERIVATION_PATH}; +use crate::sub_lib::cryptde::PlainData; use crate::sub_lib::utils::make_new_multi_config; -use clap::{value_t, App}; +use crate::sub_lib::wallet::Wallet; +use bip39::Language; +use clap::{value_t, App, Arg}; use dirs::{data_local_dir, home_dir}; +use masq_lib::command::StdStreams; use masq_lib::constants::DEFAULT_CHAIN_NAME; use masq_lib::multi_config::{merge, CommandLineVcl, EnvironmentVcl, MultiConfig, VclArg}; use masq_lib::shared_schema::{ chain_arg, config_file_arg, data_directory_arg, real_user_arg, ConfiguratorError, }; use masq_lib::utils::{localhost, ExpectValue, WrapResult}; +use rpassword::read_password_with_reader; +use rustc_hex::FromHex; +use std::fmt::Debug; +use std::io; +use std::io::Read; use std::net::{SocketAddr, TcpListener}; use std::path::{Path, PathBuf}; +use std::str::FromStr; +use tiny_hderive::bip44::DerivationPath; pub trait NodeConfigurator { - fn configure(&self, multi_config: &MultiConfig) -> Result; + fn configure( + &self, + multi_config: &MultiConfig, + streams: Option<&mut StdStreams<'_>>, + ) -> Result; +} + +//TODO this code (and the allied -- see thorough this file) is very likely to go away when GH-457 is played +pub const CONSUMING_WALLET_HELP: &str = "The BIP32 derivation path for the wallet from which your Node \ + should pay other Nodes for routing and exit services. (If the path includes single quotes, enclose it in \ + double quotes.) Defaults to m/44'/60'/0'/0/0."; +pub const EARNING_WALLET_HELP: &str = + "Denotes the wallet into which other Nodes will pay yours for its routing and exit services. May either be a \ + BIP32 derivation path (defaults to m/44'/60'/0'/0/1) or an Ethereum wallet address. (If the derivation path \ + includes single quotes, enclose it in double quotes.) Addresses must begin with 0x followed by 40 hexadecimal \ + digits (case-insensitive)."; +pub const LANGUAGE_HELP: &str = "The language of the mnemonic phrase."; +pub const MNEMONIC_PASSPHRASE_HELP: &str = + "A passphrase for the mnemonic phrase. Cannot be changed later and still produce the same addresses. This is a \ + secret; providing it on the command line or in a config file is insecure and unwise. If you don't specify it anywhere, \ + you'll be prompted for it at the console."; +pub const DB_PASSWORD_HELP: &str = + "A password or phrase to encrypt your consuming wallet in the MASQ Node database or decrypt a keystore file. Can be changed \ + later and still produce the same addresses. This is a secret; providing it on the command line or in a config file is \ + insecure and unwise. If you don't specify it anywhere, you'll be prompted for it at the console."; + +// These Args are needed in more than one clap schema. To avoid code duplication, they're defined here and referred +// to from multiple places. + +//TODO this code (and the allied -- see thorough this file) is very likely to go away when GH-457 is played +pub fn consuming_wallet_arg<'a>() -> Arg<'a, 'a> { + Arg::with_name("consuming-wallet") + .long("consuming-wallet") + .value_name("CONSUMING-WALLET") + .empty_values(false) + .validator(common_validators::validate_derivation_path) + .help(CONSUMING_WALLET_HELP) +} + +pub fn earning_wallet_arg(help: &str, validator: F) -> Arg +where + F: 'static, + F: Fn(String) -> Result<(), String>, +{ + Arg::with_name("earning-wallet") + .long("earning-wallet") + .value_name("EARNING-WALLET") + .required(false) + .takes_value(true) + .validator(validator) + .help(help) +} + +pub fn language_arg<'a>() -> Arg<'a, 'a> { + Arg::with_name("language") + .alias("language") + .long("language") + .value_name("LANGUAGE") + .required(true) + .case_insensitive(true) + .possible_values(Bip39::possible_language_values().as_slice()) + .default_value(Bip39::name_from_language(Language::default())) + .help(LANGUAGE_HELP) +} + +pub fn mnemonic_passphrase_arg<'a>() -> Arg<'a, 'a> { + Arg::with_name("mnemonic-passphrase") + .long("mnemonic-passphrase") + .value_name("MNEMONIC-PASSPHRASE") + .required(false) + .takes_value(true) + .min_values(0) + .max_values(1) + .help(MNEMONIC_PASSPHRASE_HELP) } pub fn determine_config_file_path( @@ -60,6 +148,36 @@ pub fn determine_config_file_path( (directory.join(config_file_path), user_specified).wrap_to_ok() } +pub fn create_wallet( + config: &WalletCreationConfig, + persistent_config: &mut (dyn PersistentConfiguration), +) -> Result<(), ConfiguratorError> { + let (mnemonic_seed_opt, consuming_wallet_derivation_path_opt, db_password_opt) = + match &config.derivation_path_info_opt { + None => (None, None, None), + Some(derivation_path_info) => ( + Some(derivation_path_info.mnemonic_seed.clone()), + derivation_path_info.consuming_derivation_path_opt.clone(), + Some(derivation_path_info.db_password.clone()), + ), + }; + let earning_wallet_address_opt = config.earning_wallet_address_opt.clone(); + match ( + mnemonic_seed_opt, + consuming_wallet_derivation_path_opt, + earning_wallet_address_opt, + db_password_opt, + ) { + (Some(ms), Some(cwdp), Some(ewa), Some(dp)) => { + match persistent_config.set_wallet_info(&ms, &cwdp, &ewa, &dp) { + Ok(_) => Ok(()), + Err(pce) => Err(pce.into_configurator_error("[wallet info]")), + } + } + _ => Ok(()), + } +} + pub fn initialize_database( data_directory: &Path, chain_id: u8, @@ -76,6 +194,21 @@ pub fn initialize_database( Box::new(PersistentConfigurationReal::from(conn)) } +pub fn update_db_password( + wallet_config: &WalletCreationConfig, + persistent_config: &mut (dyn PersistentConfiguration), +) -> Result<(), ConfiguratorError> { + match &wallet_config.derivation_path_info_opt { + Some(dpwi) => { + if let Err(pce) = persistent_config.change_password(None, &dpwi.db_password) { + return Err(pce.into_configurator_error("db-password")); + } + } + None => (), + }; + Ok(()) +} + pub fn real_user_from_multi_config_or_populate( multi_config: &MultiConfig, dirs_wrapper: &dyn DirsWrapper, @@ -131,10 +264,321 @@ pub fn data_directory_from_context( } } +pub fn prepare_initialization_mode<'a>( + dirs_wrapper: &dyn DirsWrapper, + app: &'a App, + args: &[String], +) -> Result<(MultiConfig<'a>, Box), ConfiguratorError> { + let multi_config = make_new_multi_config( + app, + vec![ + Box::new(CommandLineVcl::new(args.to_vec())), + Box::new(EnvironmentVcl::new(app)), + ], + )?; + + let (real_user, data_directory_opt, chain_name) = + real_user_data_directory_opt_and_chain_name(dirs_wrapper, &multi_config); + let directory = data_directory_from_context( + &DirsWrapperReal {}, + &real_user, + &data_directory_opt, + &chain_name, + ); + let persistent_config_box = initialize_database(&directory, chain_id_from_name(&chain_name)); + Ok((multi_config, persistent_config_box)) +} + +pub fn check_for_past_initialization( + persistent_config: &dyn PersistentConfiguration, +) -> Result<(), ConfiguratorError> { + match persistent_config.mnemonic_seed_exists() { + Ok(true) => Err(ConfiguratorError::required( + "seed", + "Cannot re-initialize Node: already initialized", + )), + Ok(false) => Ok(()), + Err(pce) => Err(pce.into_configurator_error("seed")), + } +} + +pub fn request_new_db_password( + streams: &mut StdStreams, + possible_preamble: Option<&str>, + prompt: &str, + confirmation_prompt: &str, +) -> Option { + if let Some(preamble) = possible_preamble { + flushed_write(streams.stdout, &format!("{}\n", preamble)); + } + match request_password_with_retry(prompt, streams, |streams| { + request_password_with_confirmation( + confirmation_prompt, + "Passwords do not match.", + streams, + cannot_be_blank, + ) + }) { + Ok(password) => Some(password), + Err(PasswordError::RetriesExhausted) => None, + Err(PasswordError::Mismatch) => None, + Err(PasswordError::VerifyError(e)) => { + flushed_write( + streams.stdout, + &format!("Could not elicit wallet encryption password: {:?}\n", e), + ); + None + } + Err(PasswordError::InternalError(_)) => panic!("Can't happen: no code path"), + } +} + +//TODO this code (and the allied -- see thorough this file) is very likely to go away when GH-457 is played +pub fn request_existing_db_password( + streams: &mut StdStreams, + possible_preamble: Option<&str>, + prompt: &str, + persistent_config: &dyn PersistentConfiguration, +) -> Result, ConfiguratorError> { + match persistent_config.check_password(None) { + Ok(true) => return Ok(None), + Ok(false) => (), + Err(pce) => return Err(pce.into_configurator_error("db-password")), + } + if let Some(preamble) = possible_preamble { + flushed_write(streams.stdout, &format!("{}\n", preamble)) + }; + let verifier = move |password: String| { + if password.is_empty() { + return Err(PasswordVerificationError::YourFault( + "Password must not be blank.".to_string(), + )); + } + match persistent_config.check_password(Some(password)) { + Ok(true) => Ok(()), + Ok(false) => Err(PasswordVerificationError::YourFault( + "Incorrect password.".to_string(), + )), + Err(pce) => Err(PasswordVerificationError::MyFault(pce)), + } + }; + let result = match request_password_with_retry(prompt, streams, |streams| { + request_existing_password(streams, verifier) + }) { + Ok(ref password) if password.is_empty() => None, + Ok(password) => Some(password), + Err(PasswordError::RetriesExhausted) => None, + Err(PasswordError::InternalError(pce)) => { + return Err(pce.into_configurator_error("db-password")) + } + Err(e) => { + flushed_write( + streams.stdout, + &format!("Could not elicit wallet decryption password: {:?}\n", e), + ); + None + } + }; + Ok(result) +} + +pub fn cannot_be_blank(password: &str) -> Result<(), String> { + if password.is_empty() { + Err("Password cannot be blank.".to_string()) + } else { + Ok(()) + } +} + +#[derive(Debug, PartialEq, Clone)] +pub enum PasswordError { + Mismatch, + RetriesExhausted, + VerifyError(String), + InternalError(PersistentConfigError), +} + +pub enum PasswordVerificationError { + YourFault(String), + MyFault(PersistentConfigError), +} + +pub fn request_existing_password( + streams: &mut StdStreams, + verifier: F, +) -> Result +where + F: FnOnce(String) -> Result<(), PasswordVerificationError>, +{ + let reader_opt = possible_reader_from_stream(streams); + let password = read_password_with_reader(reader_opt).expect("Fatal error"); + match verifier(password.clone()) { + Ok(_) => Ok(password), + Err(PasswordVerificationError::YourFault(msg)) => Err(PasswordError::VerifyError(msg)), + Err(PasswordVerificationError::MyFault(pce)) => Err(PasswordError::InternalError(pce)), + } +} + +// require two matching entries +pub fn request_password_with_confirmation( + confirmation_prompt: &str, + mismatch_msg: &str, + streams: &mut StdStreams, + verifier: F, +) -> Result +where + F: FnOnce(&str) -> Result<(), String>, +{ + let reader_opt = possible_reader_from_stream(streams); + let password = read_password_with_reader(reader_opt).expect("Fatal error"); + match verifier(&password) { + Ok(_) => { + flushed_write(streams.stdout, confirmation_prompt); + let reader_opt = possible_reader_from_stream(streams); + let confirm = read_password_with_reader(reader_opt).expect("Fatal error"); + if password == confirm { + Ok(password) + } else { + flushed_write(streams.stdout, mismatch_msg); + Err(PasswordError::Mismatch) + } + } + Err(msg) => Err(PasswordError::VerifyError(msg)), + } +} + +pub fn request_password_with_retry( + prompt: &str, + streams: &mut StdStreams, + requester: R, +) -> Result +where + R: Fn(&mut StdStreams) -> Result, +{ + for attempt in &["Try again.", "Try again.", "Giving up."] { + flushed_write(streams.stdout, prompt); + match requester(streams) { + Ok(password) => return Ok(password), + Err(PasswordError::Mismatch) => { + flushed_write(streams.stdout, &format!(" {}\n", attempt)) + } + Err(PasswordError::VerifyError(msg)) => { + flushed_write(streams.stdout, &format!("{} {}\n", msg, attempt)) + } + Err(PasswordError::InternalError(pce)) => { + return Err(PasswordError::InternalError(pce)) + } + Err(e) => flushed_write(streams.stdout, &format!("{:?} {}\n", e, attempt)), + } + } + Err(PasswordError::RetriesExhausted) +} + +pub fn possible_reader_from_stream( + streams: &'_ mut StdStreams, +) -> Option<::std::io::Cursor>> { + if cfg!(test) { + let inner = streams + .stdin + .bytes() + .take_while(|possible_byte| match possible_byte { + Ok(possible_newline) => possible_newline != &10u8, + _ => false, + }) + .map(|possible_byte| possible_byte.expect("Not a byte")) + .collect::>(); + Some(::std::io::Cursor::new(inner)) + } else { + None + } +} + +pub fn data_directory_default(dirs_wrapper: &dyn DirsWrapper, chain_name: &'static str) -> String { + match dirs_wrapper.data_dir() { + Some(path) => path.join("MASQ").join(chain_name), + None => PathBuf::from(""), + } + .to_str() + .expect("Internal Error") + .to_string() +} + +pub fn flushed_write(target: &mut dyn io::Write, string: &str) { + write!(target, "{}", string).expect("Failed console write."); + target.flush().expect("Failed flush."); +} + pub fn port_is_busy(port: u16) -> bool { TcpListener::bind(SocketAddr::new(localhost(), port)).is_err() } +pub mod common_validators { + use masq_lib::constants::LOWEST_USABLE_INSECURE_PORT; + use regex::Regex; + use tiny_hderive::bip44::DerivationPath; + + pub fn validate_earning_wallet(value: String) -> Result<(), String> { + validate_ethereum_address(value.clone()).or_else(|_| validate_derivation_path(value)) + } + + pub fn validate_ethereum_address(address: String) -> Result<(), String> { + if Regex::new("^0x[0-9a-fA-F]{40}$") + .expect("Failed to compile regular expression") + .is_match(&address) + { + Ok(()) + } else { + Err(address) + } + } + + pub fn validate_derivation_path(path: String) -> Result<(), String> { + let possible_path = path.parse::(); + + match possible_path { + Ok(derivation_path) => { + validate_derivation_path_is_sufficiently_hardened(derivation_path, path) + } + Err(e) => Err(format!("{} is not valid: {:?}", path, e)), + } + } + + pub fn validate_derivation_path_is_sufficiently_hardened( + derivation_path: DerivationPath, + path: String, + ) -> Result<(), String> { + if derivation_path + .iter() + .filter(|child_nbr| child_nbr.is_hardened()) + .count() + > 2 + { + Ok(()) + } else { + Err(format!("{} may be too weak", path)) + } + } + + pub fn validate_real_user(triple: String) -> Result<(), String> { + if Regex::new("^[0-9]*:[0-9]*:.*$") + .expect("Failed to compile regular expression") + .is_match(&triple) + { + Ok(()) + } else { + Err(triple) + } + } + + pub fn validate_ui_port(port: String) -> Result<(), String> { + match str::parse::(&port) { + Ok(port_number) if port_number < LOWEST_USABLE_INSECURE_PORT => Err(port), + Ok(_) => Ok(()), + Err(_) => Err(port), + } + } +} + pub trait DirsWrapper: Send { fn data_dir(&self) -> Option; fn home_dir(&self) -> Option; @@ -155,16 +599,350 @@ impl DirsWrapper for DirsWrapperReal { } } +#[derive(Debug, PartialEq)] +pub enum Either { + Left(L), + Right(R), +} + +#[derive(PartialEq, Debug)] +pub struct DerivationPathWalletInfo { + pub mnemonic_seed: PlainData, + pub db_password: String, + pub consuming_derivation_path_opt: Option, +} + +#[derive(PartialEq, Debug)] +pub struct WalletCreationConfig { + pub earning_wallet_address_opt: Option, + pub derivation_path_info_opt: Option, + pub real_user: RealUser, +} + +//TODO this code (and the allied) is very likely to go away when GH-457 is played +pub trait WalletCreationConfigMaker { + fn make_wallet_creation_config( + &self, + multi_config: &MultiConfig, + streams: &mut StdStreams<'_>, + ) -> WalletCreationConfig { + let mnemonic_passphrase = match value_m!(multi_config, "mnemonic-passphrase", String) { + Some(mp) => mp, + None => self.make_mnemonic_passphrase(multi_config, streams), + }; + let db_password = match value_m!(multi_config, "db-password", String) { + Some(wp) => wp, + None => self.make_db_password(streams), + }; + let consuming_derivation_path = match value_m!(multi_config, "consuming-wallet", String) { + Some(cdp) => cdp, + None => self.make_consuming_derivation_path(streams), + }; + let earning_wallet_info = match value_m!(multi_config, "earning-wallet", String) { + Some(value) => match DerivationPath::from_str(&value) { + Ok(_) => Either::Right(value), + Err(_) => match value[2..].from_hex::>() { + Ok(bytes) => match bytes.len() { + 20 => Either::Left(value), + _ => panic!("--earning-wallet not properly validated by clap"), + }, + Err(e) => panic!("--earning-wallet not properly validated by clap: {:?}", e), + }, + }, + None => self.make_earning_wallet_info(streams), + }; + let mnemonic_seed = self.make_mnemonic_seed( + multi_config, + streams, + &mnemonic_passphrase, + &consuming_derivation_path, + &earning_wallet_info, + ); + let real_user = match value_m!(multi_config, "real-user", RealUser) { + Some(ru) => ru, + None => RealUser::null(), + }; + WalletCreationConfig { + earning_wallet_address_opt: match &earning_wallet_info { + Either::Left(address) => Some(address.clone()), + Either::Right(path) => { + let keypair = Bip32ECKeyPair::from_raw(mnemonic_seed.as_slice(), path) + .expect("--earning-wallet not properly validated by clap"); + let wallet = Wallet::from(keypair); + Some(wallet.to_string()) + } + }, + derivation_path_info_opt: Some(DerivationPathWalletInfo { + mnemonic_seed, + db_password, + consuming_derivation_path_opt: Some(consuming_derivation_path), + }), + real_user, + } + } + + fn make_db_password(&self, streams: &mut StdStreams) -> String { + match request_new_db_password( + streams, + Some("\n\nPlease provide a password to encrypt your wallet (This password can be changed later)..."), + " Enter password: ", + " Confirm password: ", + ) { + Some(wp) => wp, + None => panic!("Wallet encryption password is required!") + } + } + + fn make_consuming_derivation_path(&self, _streams: &mut StdStreams) -> String { + DEFAULT_CONSUMING_DERIVATION_PATH.to_string() + } + + fn make_earning_wallet_info(&self, _streams: &mut StdStreams) -> Either { + Either::Right(DEFAULT_EARNING_DERIVATION_PATH.to_string()) + } + + fn make_mnemonic_passphrase( + &self, + multi_config: &MultiConfig, + streams: &mut StdStreams<'_>, + ) -> String; + + fn make_mnemonic_seed( + &self, + multi_config: &MultiConfig, + streams: &mut StdStreams<'_>, + mnemonic_passphrase: &str, + consuming_derivation_path: &str, + earning_wallet_info: &Either, + ) -> PlainData; +} + #[cfg(test)] mod tests { use super::*; use crate::apps::app_node; + use crate::blockchain::bip32::Bip32ECKeyPair; + use crate::db_config::persistent_configuration::PersistentConfigError; + use crate::masq_lib::utils::{ + DEFAULT_CONSUMING_DERIVATION_PATH, DEFAULT_EARNING_DERIVATION_PATH, + }; + use crate::node_test_utils::DirsWrapperMock; use crate::sub_lib::utils::make_new_test_multi_config; + use crate::test_utils::persistent_configuration_mock::PersistentConfigurationMock; use crate::test_utils::ArgsBuilder; + use bip39::{Mnemonic, Seed}; use masq_lib::constants::DEFAULT_CHAIN_NAME; + use masq_lib::multi_config::MultiConfig; + use masq_lib::shared_schema::{db_password_arg, ParamError}; use masq_lib::test_utils::environment_guard::EnvironmentGuard; - use masq_lib::utils::find_free_port; + use masq_lib::test_utils::fake_stream_holder::{ByteArrayWriter, FakeStreamHolder}; + use masq_lib::test_utils::utils::TEST_DEFAULT_CHAIN_NAME; + use masq_lib::utils::{find_free_port, running_test}; + use std::io::Cursor; use std::net::{SocketAddr, TcpListener}; + use std::sync::{Arc, Mutex}; + use tiny_hderive::bip44::DerivationPath; + + #[test] + fn validate_ethereum_address_requires_an_address_that_is_42_characters_long() { + assert_eq!( + Err(String::from("my-favorite-wallet.com")), + common_validators::validate_ethereum_address(String::from("my-favorite-wallet.com")), + ); + } + + #[test] + fn validate_ethereum_address_must_start_with_0x() { + assert_eq!( + Err(String::from("x0my-favorite-wallet.com222222222222222222")), + common_validators::validate_ethereum_address(String::from( + "x0my-favorite-wallet.com222222222222222222" + )) + ); + } + + #[test] + fn validate_ethereum_address_must_contain_only_hex_characters() { + assert_eq!( + Err(String::from("0x9707f21F95B9839A54605100Ca69dCc2e7eaA26q")), + common_validators::validate_ethereum_address(String::from( + "0x9707f21F95B9839A54605100Ca69dCc2e7eaA26q" + )) + ); + } + + #[test] + fn validate_ethereum_address_when_happy() { + assert_eq!( + Ok(()), + common_validators::validate_ethereum_address(String::from( + "0xbDfeFf9A1f4A1bdF483d680046344316019C58CF" + )) + ); + } + + #[test] + fn validate_earning_wallet_works_with_address() { + assert!(common_validators::validate_earning_wallet(String::from( + "0xbDfeFf9A1f4A1bdF483d680046344316019C58CF" + )) + .is_ok()); + } + + #[test] + fn validate_earning_wallet_works_with_derivation_path() { + assert!(common_validators::validate_earning_wallet( + DEFAULT_EARNING_DERIVATION_PATH.to_string() + ) + .is_ok()); + } + + #[test] + fn validate_derivation_path_happy() { + assert_eq!( + Ok(()), + common_validators::validate_derivation_path( + DEFAULT_CONSUMING_DERIVATION_PATH.to_string() + ) + ); + } + + #[test] + fn validate_derivation_path_sad_eth_address() { + assert_eq!( + Err( + "0xbDfeFf9A1f4A1bdF483d680046344316019C58CF is not valid: InvalidDerivationPath" + .to_string() + ), + common_validators::validate_derivation_path( + "0xbDfeFf9A1f4A1bdF483d680046344316019C58CF".to_string() + ) + ); + } + + #[test] + fn validate_derivation_path_sad_malformed_with_backslashes() { + assert_eq!( + Err(r"m\44'\60'\0'\0\0 is not valid: InvalidDerivationPath".to_string()), + common_validators::validate_derivation_path(r"m\44'\60'\0'\0\0".to_string()) + ); + } + + #[test] + fn validate_derivation_path_sad_malformed_missing_m() { + assert_eq!( + Err("/44'/60'/0'/0/0 is not valid: InvalidDerivationPath".to_string()), + common_validators::validate_derivation_path("/44'/60'/0'/0/0".to_string()) + ); + } + + #[test] + fn validate_derivation_path_sad_insufficiently_hardened() { + assert_eq!( + common_validators::validate_derivation_path("m/44/60/0/0/0".to_string()), + Err("m/44/60/0/0/0 may be too weak".to_string()), + ); + } + + #[test] + fn validate_derivation_path_is_sufficiently_hardened_happy() { + assert!( + common_validators::validate_derivation_path_is_sufficiently_hardened( + DEFAULT_CONSUMING_DERIVATION_PATH + .parse::() + .unwrap(), + DEFAULT_CONSUMING_DERIVATION_PATH.to_string(), + ) + .is_ok() + ); + } + + #[test] + fn validate_derivation_path_is_sufficiently_hardened_sad() { + assert_eq!( + Err("m/44'/60'/0/0/0 may be too weak".to_string()), + common_validators::validate_derivation_path_is_sufficiently_hardened( + "m/44'/60'/0/0/0".parse::().unwrap(), + "m/44'/60'/0/0/0".to_string(), + ) + ); + } + + #[test] + fn validate_derivation_path_is_sufficiently_hardened_very_sad() { + assert_eq!( + Err("m/44/60/0/0/0 may be too weak".to_string()), + common_validators::validate_derivation_path_is_sufficiently_hardened( + "m/44/60/0/0/0".parse::().unwrap(), + "m/44/60/0/0/0".to_string(), + ) + ); + } + + #[test] + fn validate_real_user_accepts_all_fields() { + let result = common_validators::validate_real_user(String::from("999:999:/home/booga")); + + assert_eq!(Ok(()), result); + } + + #[test] + fn validate_real_user_accepts_no_fields() { + let result = common_validators::validate_real_user(String::from("::")); + + assert_eq!(Ok(()), result); + } + + #[test] + fn validate_real_user_rejects_non_numeric_uid() { + let result = common_validators::validate_real_user(String::from("abc:999:/home/booga")); + + assert_eq!(Err(String::from("abc:999:/home/booga")), result); + } + + #[test] + fn validate_real_user_rejects_non_numeric_gid() { + let result = common_validators::validate_real_user(String::from("999:abc:/home/booga")); + + assert_eq!(Err(String::from("999:abc:/home/booga")), result); + } + + #[test] + fn validate_real_user_rejects_too_few_colons() { + let result = common_validators::validate_real_user(String::from(":")); + + assert_eq!(Err(String::from(":")), result); + } + + #[test] + fn validate_real_user_accepts_too_many_colons() { + let result = common_validators::validate_real_user(String::from(":::")); + + assert_eq!(Ok(()), result); + } + + #[test] + fn data_directory_default_given_no_default() { + assert_eq!( + String::from(""), + data_directory_default( + &DirsWrapperMock::new().data_dir_result(None), + TEST_DEFAULT_CHAIN_NAME + ) + ); + } + + #[test] + fn data_directory_default_works() { + let mock_dirs_wrapper = DirsWrapperMock::new().data_dir_result(Some("mocked/path".into())); + + let result = data_directory_default(&mock_dirs_wrapper, DEFAULT_CHAIN_NAME); + + let expected = PathBuf::from("mocked/path") + .join("MASQ") + .join(DEFAULT_CHAIN_NAME); + assert_eq!(result, expected.as_path().to_str().unwrap().to_string()); + } fn determine_config_file_path_app() -> App<'static, 'static> { App::new("test") @@ -172,6 +950,45 @@ mod tests { .arg(config_file_arg()) } + #[test] + fn check_for_past_initialization_is_happy_when_database_is_uninitialized() { + let persistent_config = + PersistentConfigurationMock::new().mnemonic_seed_exists_result(Ok(false)); + + let result = check_for_past_initialization(&persistent_config); + + assert_eq!(result, Ok(())); + } + + #[test] + fn check_for_past_initialization_is_unhappy_when_database_is_initialized() { + let persistent_config = + PersistentConfigurationMock::new().mnemonic_seed_exists_result(Ok(true)); + + let result = check_for_past_initialization(&persistent_config); + + assert_eq!( + result, + Err(ConfiguratorError::new(vec![ParamError::new( + "seed", + "Cannot re-initialize Node: already initialized" + )])) + ); + } + + #[test] + fn check_for_past_initialization_handles_database_error() { + let persistent_config = PersistentConfigurationMock::new() + .mnemonic_seed_exists_result(Err(PersistentConfigError::NotPresent)); + + let result = check_for_past_initialization(&persistent_config); + + assert_eq!( + result, + Err(PersistentConfigError::NotPresent.into_configurator_error("seed")) + ); + } + #[test] fn real_user_data_directory_and_chain_id_picks_correct_directory_for_default_chain() { let args = ArgsBuilder::new(); @@ -356,6 +1173,578 @@ mod tests { assert_eq!(true, user_specified); } + #[test] + fn request_database_password_happy_path() { + let stdout_writer = &mut ByteArrayWriter::new(); + let streams = &mut StdStreams { + stdin: &mut Cursor::new(&b"Too Many S3cr3ts!\n"[..]), + stdout: stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; + let persistent_configuration = PersistentConfigurationMock::new() + .check_password_result(Ok(false)) + .check_password_result(Ok(true)); + + let actual = request_existing_db_password( + streams, + Some("Decrypt wallet"), + "Enter password: ", + &persistent_configuration, + ); + + assert_eq!(actual, Ok(Some("Too Many S3cr3ts!".to_string()))); + assert_eq!( + stdout_writer.get_string(), + "Decrypt wallet\n\ + Enter password: " + .to_string() + ); + } + + #[test] + fn request_database_password_rejects_blank_password() { + let stdout_writer = &mut ByteArrayWriter::new(); + let streams = &mut StdStreams { + stdin: &mut Cursor::new(&b"\nbooga\n"[..]), + stdout: stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; + let persistent_configuration = PersistentConfigurationMock::new() + .check_password_result(Ok(false)) + .check_password_result(Ok(true)); + + let actual = request_existing_db_password( + streams, + Some("Decrypt wallet"), + "Enter password: ", + &persistent_configuration, + ); + + assert_eq!(actual, Ok(Some("booga".to_string()))); + assert_eq!( + stdout_writer.get_string(), + "Decrypt wallet\n\ + Enter password: \ + Password must not be blank. Try again.\n\ + Enter password: " + .to_string() + ); + } + + #[test] + fn request_existing_db_password_handles_error_checking_for_no_password() { + let mut holder = FakeStreamHolder::new(); + let persistent_config = PersistentConfigurationMock::new() + .check_password_result(Err(PersistentConfigError::NotPresent)); + + let result = + request_existing_db_password(&mut holder.streams(), None, "prompt", &persistent_config); + + assert_eq!( + result, + Err(PersistentConfigError::NotPresent.into_configurator_error("db-password")) + ) + } + + #[test] + fn request_existing_db_password_handles_error_checking_for_entered_password() { + let stdout_writer = &mut ByteArrayWriter::new(); + let mut streams = &mut StdStreams { + stdin: &mut Cursor::new(&b"Too Many S3cr3ts!\n"[..]), + stdout: stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; + let persistent_config = PersistentConfigurationMock::new() + .check_password_result(Ok(false)) + .check_password_result(Err(PersistentConfigError::NotPresent)); + + let result = request_existing_db_password(&mut streams, None, "prompt", &persistent_config); + + assert_eq!( + result, + Err(PersistentConfigError::NotPresent.into_configurator_error("db-password")) + ) + } + + #[test] + fn request_database_password_detects_bad_passwords() { + let stdout_writer = &mut ByteArrayWriter::new(); + let streams = &mut StdStreams { + stdin: &mut Cursor::new( + &b"first bad password\nanother bad password\nfinal bad password\n"[..], + ), + stdout: stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; + let check_password_params_arc = Arc::new(Mutex::new(vec![])); + let persistent_configuration = PersistentConfigurationMock::new() + .check_password_params(&check_password_params_arc) + .check_password_result(Ok(false)) + .check_password_result(Ok(false)) + .check_password_result(Ok(false)) + .check_password_result(Ok(false)); + + let actual = request_existing_db_password( + streams, + Some("Decrypt wallet"), + "Enter password: ", + &persistent_configuration, + ); + + assert_eq!(actual, Ok(None)); + assert_eq!( + stdout_writer.get_string(), + "Decrypt wallet\n\ + Enter password: \ + Incorrect password. Try again.\n\ + Enter password: \ + Incorrect password. Try again.\n\ + Enter password: \ + Incorrect password. Giving up.\n" + .to_string() + ); + let check_password_params = check_password_params_arc.lock().unwrap(); + assert_eq!( + *check_password_params, + vec![ + None, + Some("first bad password".to_string()), + Some("another bad password".to_string()), + Some("final bad password".to_string()) + ] + ) + } + + #[test] + fn request_database_password_aborts_before_prompting_if_database_has_no_password() { + let stdout_writer = &mut ByteArrayWriter::new(); + let streams = &mut StdStreams { + stdin: &mut Cursor::new(&b""[..]), + stdout: stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; + let persistent_configuration = + PersistentConfigurationMock::new().check_password_result(Ok(true)); + + let actual = request_existing_db_password( + streams, + Some("Decrypt wallet"), + "Enter password: ", + &persistent_configuration, + ); + + assert_eq!(actual, Ok(None)); + assert_eq!(stdout_writer.get_string(), "".to_string()); + } + + #[test] + fn request_wallet_encryption_password_succeeds_on_reattempt() { + let stdout_writer = &mut ByteArrayWriter::new(); + let streams = &mut StdStreams { + stdin: &mut Cursor::new( + &b"Too Many S3cr3ts!\ngarbage garbage\nToo Many S3cr3ts!\nToo Many S3cr3ts!\n"[..], + ), + stdout: stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; + + let actual = request_new_db_password( + streams, + Some("\n\nPlease provide a password to encrypt your wallet (This password can be changed \ + later)..."), " Enter password: ", "Confirm password: ", + ); + + assert_eq!(actual, Some("Too Many S3cr3ts!".to_string())); + assert_eq!( + stdout_writer.get_string(), + "\n\nPlease provide a password to encrypt your wallet (This password can be changed later)...\ + \n Enter password: \ + Confirm password: \ + Passwords do not match. Try again.\ + \n Enter password: \ + Confirm password: " + .to_string() + ); + } + + #[test] + fn request_wallet_encryption_password_gives_up_after_three_blank_passwords() { + let stdout_writer = &mut ByteArrayWriter::new(); + let streams = &mut StdStreams { + stdin: &mut Cursor::new(&b"\n\n\n"[..]), + stdout: stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; + + let actual = request_new_db_password( + streams, + Some("\n\nPlease provide a password to encrypt your wallet (This password can be changed \ + later)..."), " Enter password: ", "\nConfirm password: ", + ); + + assert_eq!(actual, None); + assert_eq!( + stdout_writer.get_string(), + "\n\nPlease provide a password to encrypt your wallet (This password can be changed later)...\ + \n Enter password: \ + Password cannot be blank. Try again.\ + \n Enter password: \ + Password cannot be blank. Try again.\ + \n Enter password: \ + Password cannot be blank. Giving up.\ + \n" + .to_string() + ); + } + + #[test] + fn request_wallet_encryption_password_gives_up_after_three_mismatches() { + let stdout_writer = &mut ByteArrayWriter::new(); + let streams = &mut StdStreams { + stdin: &mut Cursor::new(&b"one\n\ntwo\n\nthree\n\n"[..]), + stdout: stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; + + let actual = request_new_db_password( + streams, + Some("\n\nPlease provide a password to encrypt your wallet (This password can be changed \ + later)..."), " Enter password: ", "Confirm password: ", + ); + + assert_eq!(actual, None); + assert_eq!( + stdout_writer.get_string(), + "\n\nPlease provide a password to encrypt your wallet (This password can be changed later)...\ + \n Enter password: \ + Confirm password: \ + Passwords do not match. Try again.\ + \n Enter password: \ + Confirm password: \ + Passwords do not match. Try again.\ + \n Enter password: \ + Confirm password: \ + Passwords do not match. Giving up.\ + \n" + .to_string() + ); + } + + //TODO this code (and the allied -- see thorough this file) is very likely to go away when GH-457 is played + struct TameWalletCreationConfigMaker { + app: App<'static, 'static>, + } + + impl WalletCreationConfigMaker for TameWalletCreationConfigMaker { + fn make_mnemonic_passphrase( + &self, + _multi_config: &MultiConfig, + streams: &mut StdStreams, + ) -> String { + flushed_write(streams.stdout, "Enter mnemonic passphrase: "); + "mnemonic passphrase".to_string() + } + + fn make_mnemonic_seed( + &self, + _multi_config: &MultiConfig, + _streams: &mut StdStreams, + _mnemonic_passphrase: &str, + _consuming_derivation_path: &str, + _earning_wallet_info: &Either, + ) -> PlainData { + Self::hardcoded_mnemonic_seed() + } + } + + impl TameWalletCreationConfigMaker { + fn hardcoded_mnemonic_seed() -> PlainData { + let mnemonic = Mnemonic::from_phrase( + "list noble dove unable pioneer alien live market mercy equip supreme agree", + Language::English, + ) + .unwrap(); + PlainData::new(Seed::new(&mnemonic, "passphrase").as_ref()) + } + } + + impl TameWalletCreationConfigMaker { + pub fn new() -> TameWalletCreationConfigMaker { + TameWalletCreationConfigMaker { + app: App::new("TameWalletCreationConfigMaker") + .arg(consuming_wallet_arg()) + .arg(earning_wallet_arg("", |_| Ok(()))) + .arg(mnemonic_passphrase_arg()) + .arg(real_user_arg()) + .arg(db_password_arg(DB_PASSWORD_HELP)), + } + } + } + + #[test] + fn make_wallet_creation_config_defaults() { + let subject = TameWalletCreationConfigMaker::new(); + let vcl = Box::new(CommandLineVcl::new(vec!["test".to_string()])); + let multi_config = make_new_test_multi_config(&subject.app, vec![vcl]).unwrap(); + let stdout_writer = &mut ByteArrayWriter::new(); + let mut streams = &mut StdStreams { + stdin: &mut Cursor::new(&b"a terrible db password\na terrible db password\n"[..]), + stdout: stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; + + let config = subject.make_wallet_creation_config(&multi_config, &mut streams); + + let captured_output = stdout_writer.get_string(); + let expected_output = "Enter mnemonic passphrase: \ + \n\nPlease provide a password to encrypt your wallet (This password can be changed later)...\ + \n Enter password: Confirm password: "; + assert_eq!(&captured_output, expected_output); + let earning_wallet = Wallet::from( + Bip32ECKeyPair::from_raw( + TameWalletCreationConfigMaker::hardcoded_mnemonic_seed().as_ref(), + &DEFAULT_EARNING_DERIVATION_PATH, + ) + .unwrap(), + ); + assert_eq!( + config, + WalletCreationConfig { + earning_wallet_address_opt: Some(earning_wallet.to_string()), + derivation_path_info_opt: Some(DerivationPathWalletInfo { + mnemonic_seed: TameWalletCreationConfigMaker::hardcoded_mnemonic_seed(), + db_password: "a terrible db password".to_string(), + consuming_derivation_path_opt: Some( + DEFAULT_CONSUMING_DERIVATION_PATH.to_string() + ), + }), + real_user: RealUser::null(), + }, + ); + } + + #[test] + fn make_wallet_creation_config_non_defaults_with_earning_derivation_path() { + running_test(); + let earning_path = "m/44'/60'/3'/2/1"; + let subject = TameWalletCreationConfigMaker::new(); + let args = ArgsBuilder::new() + .param("--consuming-wallet", "m/44'/60'/1'/2/3") + .param("--earning-wallet", "m/44'/60'/3'/2/1") + .param("--mnemonic-passphrase", "mnemonic passphrase") + .param("--db-password", "db password") + .param("--real-user", "123::"); + let vcl = Box::new(CommandLineVcl::new(args.into())); + let multi_config = make_new_test_multi_config(&subject.app, vec![vcl]).unwrap(); + let stdout_writer = &mut ByteArrayWriter::new(); + let mut streams = &mut StdStreams { + stdin: &mut Cursor::new(&[]), + stdout: stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; + + let config = subject.make_wallet_creation_config(&multi_config, &mut streams); + + let captured_output = stdout_writer.get_string(); + let expected_output = ""; + assert_eq!(&captured_output, expected_output); + let earning_wallet = Wallet::from( + Bip32ECKeyPair::from_raw( + TameWalletCreationConfigMaker::hardcoded_mnemonic_seed().as_ref(), + earning_path, + ) + .unwrap(), + ); + assert_eq!( + config, + WalletCreationConfig { + earning_wallet_address_opt: Some(earning_wallet.to_string()), + derivation_path_info_opt: Some(DerivationPathWalletInfo { + mnemonic_seed: TameWalletCreationConfigMaker::hardcoded_mnemonic_seed(), + db_password: "db password".to_string(), + consuming_derivation_path_opt: Some("m/44'/60'/1'/2/3".to_string()), + }), + real_user: RealUser::new(Some(123), None, None), + }, + ); + } + + #[test] + fn make_wallet_creation_config_non_defaults_with_earning_address() { + running_test(); + let subject = TameWalletCreationConfigMaker::new(); + let args = ArgsBuilder::new() + .param("--consuming-wallet", "m/44'/60'/1'/2/3") + .param( + "--earning-wallet", + "0x0123456789ABCDEF0123456789ABCDEF01234567", + ) + .param("--mnemonic-passphrase", "mnemonic passphrase") + .param("--db-password", "db password") + .param("--real-user", "123::"); + let vcl = Box::new(CommandLineVcl::new(args.into())); + let multi_config = make_new_test_multi_config(&subject.app, vec![vcl]).unwrap(); + let stdout_writer = &mut ByteArrayWriter::new(); + let mut streams = &mut StdStreams { + stdin: &mut Cursor::new(&[]), + stdout: stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; + + let config = subject.make_wallet_creation_config(&multi_config, &mut streams); + + let captured_output = stdout_writer.get_string(); + let expected_output = ""; + assert_eq!(&captured_output, expected_output); + assert_eq!( + config, + WalletCreationConfig { + earning_wallet_address_opt: Some( + "0x0123456789ABCDEF0123456789ABCDEF01234567".to_string() + ), + derivation_path_info_opt: Some(DerivationPathWalletInfo { + mnemonic_seed: TameWalletCreationConfigMaker::hardcoded_mnemonic_seed(), + db_password: "db password".to_string(), + consuming_derivation_path_opt: Some("m/44'/60'/1'/2/3".to_string()), + }), + real_user: RealUser::new(Some(123), None, None), + }, + ); + } + + #[test] + #[should_panic(expected = "Wallet encryption password is required!")] + fn make_wallet_creation_config_panics_after_three_password_mismatches() { + running_test(); + let subject = TameWalletCreationConfigMaker::new(); + let streams = &mut StdStreams { + stdin: &mut Cursor::new(&b"one\n\ntwo\n\nthree\n\n"[..]), + stdout: &mut ByteArrayWriter::new(), + stderr: &mut ByteArrayWriter::new(), + }; + let vcl = Box::new(CommandLineVcl::new(vec!["test".to_string()])); + let multi_config = make_new_test_multi_config(&subject.app, vec![vcl]).unwrap(); + + subject.make_wallet_creation_config(&multi_config, streams); + } + + #[test] + fn create_wallet_configures_database_with_wallet_info() { + let config = WalletCreationConfig { + earning_wallet_address_opt: Some( + "0x9707f21F95B9839A54605100Ca69dCc2e7eaA26q".to_string(), + ), + derivation_path_info_opt: Some(DerivationPathWalletInfo { + mnemonic_seed: PlainData::new(&[1, 2, 3, 4]), + db_password: "db password".to_string(), + consuming_derivation_path_opt: Some("m/44'/60'/1'/2/3".to_string()), + }), + real_user: RealUser::null(), + }; + let set_wallet_info_params_arc = Arc::new(Mutex::new(vec![])); + let mut persistent_config = PersistentConfigurationMock::new() + .set_wallet_info_params(&set_wallet_info_params_arc) + .set_wallet_info_result(Ok(())); + + let result = create_wallet(&config, &mut persistent_config); + + assert_eq!(result, Ok(())); + let set_wallet_info_params = set_wallet_info_params_arc.lock().unwrap(); + assert_eq!( + *set_wallet_info_params, + vec![( + PlainData::from(vec![1u8, 2u8, 3u8, 4u8]), + "m/44'/60'/1'/2/3".to_string(), + "0x9707f21F95B9839A54605100Ca69dCc2e7eaA26q".to_string(), + "db password".to_string() + )] + ); + } + + #[test] + pub fn create_wallet_handles_error_setting_wallet_info() { + let config = WalletCreationConfig { + earning_wallet_address_opt: Some("irrelevant".to_string()), + derivation_path_info_opt: Some(DerivationPathWalletInfo { + mnemonic_seed: PlainData::new(b"irrelevant"), + consuming_derivation_path_opt: Some("irrelevant".to_string()), + db_password: "irrelevant".to_string(), + }), + real_user: RealUser::new(None, None, None), + }; + let mut persistent_config = PersistentConfigurationMock::new() + .set_wallet_info_result(Err(PersistentConfigError::NotPresent)); + + let result = create_wallet(&config, &mut persistent_config); + + assert_eq!( + result, + Err(PersistentConfigError::NotPresent.into_configurator_error("[wallet info]")) + ); + } + + #[test] + pub fn update_db_password_does_nothing_if_no_derivation_path_info_is_supplied() { + let wallet_config = WalletCreationConfig { + earning_wallet_address_opt: None, + derivation_path_info_opt: None, + real_user: RealUser::default(), + }; + let set_password_params_arc = Arc::new(Mutex::new(vec![])); + let mut persistent_config = + PersistentConfigurationMock::new().change_password_params(&set_password_params_arc); + + let result = update_db_password(&wallet_config, &mut persistent_config); + + assert_eq!(result, Ok(())); + let set_password_params = set_password_params_arc.lock().unwrap(); + assert!(set_password_params.is_empty()); + } + + #[test] + pub fn update_db_password_sets_password_if_derivation_path_info_is_supplied() { + let wallet_config = WalletCreationConfig { + earning_wallet_address_opt: None, + derivation_path_info_opt: Some(DerivationPathWalletInfo { + mnemonic_seed: PlainData::new(&[]), + db_password: "booga".to_string(), + consuming_derivation_path_opt: None, + }), + real_user: RealUser::default(), + }; + let set_password_params_arc = Arc::new(Mutex::new(vec![])); + let mut persistent_config = PersistentConfigurationMock::new() + .change_password_params(&set_password_params_arc) + .change_password_result(Ok(())); + + update_db_password(&wallet_config, &mut persistent_config).unwrap(); + + let set_password_params = set_password_params_arc.lock().unwrap(); + assert_eq!(*set_password_params, vec![(None, "booga".to_string())]); + } + + #[test] + pub fn update_db_password_handles_error_changing_password() { + let wallet_config = WalletCreationConfig { + earning_wallet_address_opt: None, + derivation_path_info_opt: Some(DerivationPathWalletInfo { + mnemonic_seed: PlainData::new(b""), + db_password: "password".to_string(), + consuming_derivation_path_opt: None, + }), + real_user: RealUser::new(None, None, None), + }; + let mut persistent_config = PersistentConfigurationMock::new() + .change_password_result(Err(PersistentConfigError::TransactionError)); + + let result = update_db_password(&wallet_config, &mut persistent_config); + + assert_eq!( + result, + Err(PersistentConfigError::TransactionError.into_configurator_error("db-password")) + ); + } + #[test] pub fn port_is_busy_detects_free_port() { let port = find_free_port(); diff --git a/node/src/node_configurator/node_configurator_initialization.rs b/node/src/node_configurator/node_configurator_initialization.rs index 2045bd4fa..38c44b5e9 100644 --- a/node/src/node_configurator/node_configurator_initialization.rs +++ b/node/src/node_configurator/node_configurator_initialization.rs @@ -3,8 +3,10 @@ use crate::apps::app_daemon; use crate::node_configurator::NodeConfigurator; use crate::sub_lib::utils::make_new_multi_config; +use masq_lib::command::StdStreams; use masq_lib::multi_config::{CommandLineVcl, MultiConfig}; use masq_lib::shared_schema::ConfiguratorError; +use masq_lib::utils::ExpectValue; #[derive(Default, Clone, PartialEq, Debug)] pub struct InitializationConfig { @@ -28,9 +30,10 @@ impl NodeConfigurator for NodeConfiguratorInitializationRe fn configure( &self, multi_config: &MultiConfig, + streams: Option<&mut StdStreams>, ) -> Result { let mut config = InitializationConfig::default(); - initialization::parse_args(multi_config, &mut config); + initialization::parse_args(multi_config, &mut config, streams.expect_v("StdStreams")); Ok(config) } } @@ -41,7 +44,11 @@ mod initialization { use masq_lib::constants::DEFAULT_UI_PORT; use masq_lib::multi_config::MultiConfig; - pub fn parse_args(multi_config: &MultiConfig, config: &mut InitializationConfig) { + pub fn parse_args( + multi_config: &MultiConfig, + config: &mut InitializationConfig, + _streams: &mut StdStreams<'_>, + ) { config.ui_port = value_m!(multi_config, "ui-port", u16).unwrap_or(DEFAULT_UI_PORT); } } @@ -53,6 +60,7 @@ mod tests { use crate::test_utils::ArgsBuilder; use masq_lib::constants::DEFAULT_UI_PORT; use masq_lib::multi_config::{CommandLineVcl, VirtualCommandLine}; + use masq_lib::test_utils::fake_stream_holder::FakeStreamHolder; #[test] fn parse_args_creates_configuration_with_defaults() { @@ -62,7 +70,11 @@ mod tests { vec![Box::new(CommandLineVcl::new(args.into()))]; let multi_config = make_new_test_multi_config(&app_daemon(), vcls).unwrap(); - initialization::parse_args(&multi_config, &mut config); + initialization::parse_args( + &multi_config, + &mut config, + &mut FakeStreamHolder::new().streams(), + ); assert_eq!(config.ui_port, DEFAULT_UI_PORT); } @@ -77,7 +89,11 @@ mod tests { vec![Box::new(CommandLineVcl::new(args.into()))]; let multi_config = make_new_test_multi_config(&app_daemon(), vcls).unwrap(); - initialization::parse_args(&multi_config, &mut config); + initialization::parse_args( + &multi_config, + &mut config, + &mut FakeStreamHolder::new().streams(), + ); assert_eq!(config.ui_port, 4321); } diff --git a/node/src/node_configurator/node_configurator_standard.rs b/node/src/node_configurator/node_configurator_standard.rs index 5bb45af31..d9822a62e 100644 --- a/node/src/node_configurator/node_configurator_standard.rs +++ b/node/src/node_configurator/node_configurator_standard.rs @@ -3,6 +3,7 @@ use crate::bootstrapper::BootstrapperConfig; use crate::node_configurator::DirsWrapperReal; use crate::node_configurator::{initialize_database, DirsWrapper, NodeConfigurator}; +use masq_lib::command::StdStreams; use masq_lib::crash_point::CrashPoint; use masq_lib::multi_config::MultiConfig; use masq_lib::shared_schema::ConfiguratorError; @@ -16,6 +17,7 @@ impl NodeConfigurator for NodeConfiguratorStandardPrivileged fn configure( &self, multi_config: &MultiConfig, + _streams: Option<&mut StdStreams<'_>>, ) -> Result { let mut bootstrapper_config = BootstrapperConfig::new(); standard::establish_port_configurations(&mut bootstrapper_config); @@ -50,6 +52,7 @@ impl NodeConfigurator for NodeConfiguratorStandardUnprivileg fn configure( &self, multi_config: &MultiConfig, + streams: Option<&mut StdStreams<'_>>, ) -> Result { let mut persistent_config = initialize_database( &self.privileged_config.data_directory, @@ -59,6 +62,7 @@ impl NodeConfigurator for NodeConfiguratorStandardUnprivileg standard::unprivileged_parse_args( multi_config, &mut unprivileged_config, + streams.expect_v("StdStreams"), Some(persistent_config.as_mut()), )?; standard::configure_database(&unprivileged_config, persistent_config.as_mut())?; @@ -93,7 +97,7 @@ pub mod standard { use crate::node_configurator::{ data_directory_from_context, determine_config_file_path, real_user_data_directory_opt_and_chain_name, real_user_from_multi_config_or_populate, - DirsWrapper, + request_existing_db_password, DirsWrapper, }; use crate::server_initializer::GatheredParams; use crate::sub_lib::accountant::DEFAULT_EARNING_WALLET; @@ -231,6 +235,7 @@ pub mod standard { pub fn unprivileged_parse_args( multi_config: &MultiConfig, unprivileged_config: &mut BootstrapperConfig, + streams: &mut StdStreams<'_>, persistent_config_opt: Option<&mut dyn PersistentConfiguration>, ) -> Result<(), ConfiguratorError> { unprivileged_config.clandestine_port_opt = value_m!(multi_config, "clandestine-port", u16); @@ -247,10 +252,20 @@ pub mod standard { } }; let mnc_result = if let Some(persistent_config) = persistent_config_opt { - get_wallets(multi_config, persistent_config, unprivileged_config)?; - make_neighborhood_config(multi_config, Some(persistent_config), unprivileged_config) + get_wallets( + streams, + multi_config, + persistent_config, + unprivileged_config, + )?; + make_neighborhood_config( + multi_config, + streams, + Some(persistent_config), + unprivileged_config, + ) } else { - make_neighborhood_config(multi_config, None, unprivileged_config) + make_neighborhood_config(multi_config, streams, None, unprivileged_config) }; mnc_result.map(|config| unprivileged_config.neighborhood_config = config) @@ -274,6 +289,7 @@ pub mod standard { } pub fn get_wallets( + streams: &mut StdStreams, multi_config: &MultiConfig, persistent_config: &mut dyn PersistentConfiguration, config: &mut BootstrapperConfig, @@ -291,7 +307,7 @@ pub mod standard { if (earning_wallet_opt.is_none() || consuming_wallet_opt.is_none()) && mnemonic_seed_exists { if let Some(db_password) = - standard::get_db_password(multi_config, config, persistent_config)? + standard::get_db_password(multi_config, streams, config, persistent_config)? { if consuming_wallet_opt.is_none() { consuming_wallet_opt = standard::get_consuming_wallet_opt_from_derivation_path( @@ -337,6 +353,7 @@ pub mod standard { pub fn make_neighborhood_config( multi_config: &MultiConfig, + streams: &mut StdStreams, persistent_config_opt: Option<&mut dyn PersistentConfiguration>, unprivileged_config: &mut BootstrapperConfig, ) -> Result { @@ -344,9 +361,12 @@ pub mod standard { match convert_ci_configs(multi_config)? { Some(configs) => configs, None => match persistent_config_opt { - Some(persistent_config) => { - get_past_neighbors(multi_config, persistent_config, unprivileged_config)? - } + Some(persistent_config) => get_past_neighbors( + multi_config, + streams, + persistent_config, + unprivileged_config, + )?, None => vec![], }, } @@ -420,12 +440,17 @@ pub mod standard { pub fn get_past_neighbors( multi_config: &MultiConfig, + streams: &mut StdStreams, persistent_config: &mut dyn PersistentConfiguration, unprivileged_config: &mut BootstrapperConfig, ) -> Result, ConfiguratorError> { Ok( - match &standard::get_db_password(multi_config, unprivileged_config, persistent_config)? - { + match &standard::get_db_password( + multi_config, + streams, + unprivileged_config, + persistent_config, + )? { Some(db_password) => match persistent_config.past_neighbors(db_password) { Ok(Some(past_neighbors)) => past_neighbors, Ok(None) => vec![], @@ -610,13 +635,26 @@ pub mod standard { pub fn get_db_password( multi_config: &MultiConfig, + streams: &mut StdStreams, config: &mut BootstrapperConfig, persistent_config: &mut dyn PersistentConfiguration, ) -> Result, ConfiguratorError> { if let Some(db_password) = &config.db_password_opt { return Ok(Some(db_password.clone())); } - let db_password_opt = value_m!(multi_config, "db-password", String); + let db_password_opt = match value_user_specified_m!(multi_config, "db-password", String) { + (Some(dbp), _) => Some(dbp), + (None, false) => None, + (None, true) => match request_existing_db_password( + streams, + Some("Decrypt information from previous runs"), + "Enter password: ", + persistent_config, + ) { + Ok(password_opt) => password_opt, + Err(e) => return Err(e), + }, + }; if let Some(db_password) = &db_password_opt { set_db_password_at_first_mention(db_password, persistent_config)?; config.db_password_opt = Some(db_password.clone()); @@ -648,6 +686,7 @@ pub mod standard { use crate::test_utils::pure_test_utils::make_default_persistent_configuration; use crate::test_utils::ArgsBuilder; use masq_lib::multi_config::VirtualCommandLine; + use masq_lib::test_utils::fake_stream_holder::FakeStreamHolder; use masq_lib::test_utils::utils::TEST_DEFAULT_CHAIN_NAME; use masq_lib::utils::running_test; use std::sync::{Arc, Mutex}; @@ -656,6 +695,7 @@ pub mod standard { fn get_wallets_handles_consuming_private_key_and_earning_wallet_address_when_database_contains_mnemonic_seed( ) { running_test(); + let mut holder = FakeStreamHolder::new(); let args = ArgsBuilder::new() .param( "--consuming-private-key", @@ -675,6 +715,7 @@ pub mod standard { let mut bootstrapper_config = BootstrapperConfig::new(); let result = standard::get_wallets( + &mut holder.streams(), &multi_config, &mut persistent_config, &mut bootstrapper_config, @@ -688,6 +729,7 @@ pub mod standard { #[test] fn get_wallets_handles_consuming_private_key_with_mnemonic_seed() { running_test(); + let mut holder = FakeStreamHolder::new(); let args = ArgsBuilder::new() .param( "--consuming-private-key", @@ -704,6 +746,7 @@ pub mod standard { let mut bootstrapper_config = BootstrapperConfig::new(); let result = standard::get_wallets( + &mut holder.streams(), &multi_config, &mut persistent_config, &mut bootstrapper_config, @@ -1024,13 +1067,14 @@ mod tests { }; use masq_lib::shared_schema::{ConfiguratorError, ParamError}; use masq_lib::test_utils::environment_guard::{ClapGuard, EnvironmentGuard}; - use masq_lib::test_utils::fake_stream_holder::ByteArrayWriter; + use masq_lib::test_utils::fake_stream_holder::{ByteArrayWriter, FakeStreamHolder}; use masq_lib::test_utils::utils::{ ensure_node_home_directory_exists, DEFAULT_CHAIN_ID, TEST_DEFAULT_CHAIN_NAME, }; use masq_lib::utils::{running_test, SliceToVec}; use rustc_hex::FromHex; use std::fs::File; + use std::io::Cursor; use std::io::Write; use std::net::IpAddr; use std::net::SocketAddr; @@ -1061,6 +1105,7 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, + &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration()), &mut BootstrapperConfig::new(), ); @@ -1109,6 +1154,7 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, + &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration()), &mut BootstrapperConfig::new(), ); @@ -1142,6 +1188,7 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, + &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration()), &mut BootstrapperConfig::new(), ); @@ -1176,6 +1223,7 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, + &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration().check_password_result(Ok(false))), &mut BootstrapperConfig::new(), ); @@ -1203,6 +1251,7 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, + &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration()), &mut BootstrapperConfig::new(), ); @@ -1235,6 +1284,7 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, + &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration()), &mut BootstrapperConfig::new(), ); @@ -1267,6 +1317,7 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, + &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration().check_password_result(Ok(false))), &mut BootstrapperConfig::new(), ); @@ -1295,6 +1346,7 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, + &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration().check_password_result(Ok(false))), &mut BootstrapperConfig::new(), ); @@ -1328,6 +1380,7 @@ mod tests { let result = standard::make_neighborhood_config( &multi_config, + &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration()), &mut BootstrapperConfig::new(), ); @@ -1352,6 +1405,7 @@ mod tests { let result = standard::get_past_neighbors( &multi_config, + &mut FakeStreamHolder::new().streams(), &mut persistent_config, &mut unprivileged_config, ) @@ -1371,6 +1425,7 @@ mod tests { let result = standard::get_past_neighbors( &multi_config, + &mut FakeStreamHolder::new().streams(), &mut persistent_config, &mut unprivileged_config, ) @@ -1391,6 +1446,7 @@ mod tests { let result = standard::get_past_neighbors( &multi_config, + &mut FakeStreamHolder::new().streams(), &mut persistent_config, &mut unprivileged_config, ); @@ -1404,6 +1460,56 @@ mod tests { ); } + #[test] + fn get_past_neighbors_handles_error_getting_db_password() { + running_test(); + let args = ["command", "--db-password"]; + let simplified_multi_config = pure_test_utils::make_simplified_multi_config(args); + let mut persistent_config = PersistentConfigurationMock::new() + .check_password_result(Err(PersistentConfigError::NotPresent)); + let mut unprivileged_config = BootstrapperConfig::new(); + + let result = standard::get_past_neighbors( + &simplified_multi_config, + &mut FakeStreamHolder::new().streams(), + &mut persistent_config, + &mut unprivileged_config, + ); + + assert_eq!( + result, + Err(ConfiguratorError::new(vec![ParamError::new( + "db-password", + "NotPresent" + )])) + ); + } + + #[test] + fn get_past_neighbors_handles_incorrect_password() { + running_test(); + let args = ["program", "--db-password"]; + let simplified_multi_config = pure_test_utils::make_simplified_multi_config(args); + let mut persistent_config = PersistentConfigurationMock::new() + .check_password_result(Err(PersistentConfigError::PasswordError)); + let mut unprivileged_config = BootstrapperConfig::new(); + + let result = standard::get_past_neighbors( + &simplified_multi_config, + &mut FakeStreamHolder::new().streams(), + &mut persistent_config, + &mut unprivileged_config, + ); + + assert_eq!( + result, + Err(ConfiguratorError::new(vec![ParamError::new( + "db-password", + "PasswordError" + )])) + ); + } + #[test] fn convert_ci_configs_does_not_like_neighbors_with_bad_syntax() { running_test(); @@ -1506,6 +1612,7 @@ mod tests { standard::unprivileged_parse_args( &multi_config, &mut bootstrapper_config, + &mut FakeStreamHolder::new().streams(), Some(&mut persistent_config), ) .unwrap(); @@ -1643,8 +1750,13 @@ mod tests { vec![Box::new(CommandLineVcl::new(args.into()))]; let multi_config = make_new_test_multi_config(&app_node(), vcls).unwrap(); - standard::unprivileged_parse_args(&multi_config, &mut config, Some(&mut persistent_config)) - .unwrap(); + standard::unprivileged_parse_args( + &multi_config, + &mut config, + &mut FakeStreamHolder::new().streams(), + Some(&mut persistent_config), + ) + .unwrap(); assert_eq!( value_m!(multi_config, "config-file", PathBuf), @@ -1693,6 +1805,7 @@ mod tests { standard::unprivileged_parse_args( &multi_config, &mut config, + &mut FakeStreamHolder::new().streams(), Some(&mut make_default_persistent_configuration().check_password_result(Ok(false))), ) .unwrap(); @@ -1746,6 +1859,7 @@ mod tests { standard::unprivileged_parse_args( &multi_config, &mut config, + &mut FakeStreamHolder::new().streams(), Some(&mut persistent_configuration), ) .unwrap(); @@ -1879,7 +1993,13 @@ mod tests { let mut persistent_config = make_persistent_config(None, None, None, None, None, None); let mut config = BootstrapperConfig::new(); - standard::get_wallets(&multi_config, &mut persistent_config, &mut config).unwrap(); + standard::get_wallets( + &mut FakeStreamHolder::new().streams(), + &multi_config, + &mut persistent_config, + &mut config, + ) + .unwrap(); assert_eq!(config.consuming_wallet, None); assert_eq!(config.earning_wallet, DEFAULT_EARNING_WALLET.clone()); @@ -1894,6 +2014,7 @@ mod tests { .mnemonic_seed_exists_result(Err(PersistentConfigError::NotPresent)); let result = standard::get_wallets( + &mut FakeStreamHolder::new().streams(), &multi_config, &mut persistent_config, &mut BootstrapperConfig::new(), @@ -1916,7 +2037,12 @@ mod tests { let mut config = BootstrapperConfig::new(); config.db_password_opt = Some("password".to_string()); - let result = standard::get_wallets(&multi_config, &mut persistent_config, &mut config); + let result = standard::get_wallets( + &mut FakeStreamHolder::new().streams(), + &multi_config, + &mut persistent_config, + &mut config, + ); assert_eq!( result, @@ -1924,6 +2050,29 @@ mod tests { ); } + #[test] + fn get_wallets_handles_failure_of_get_db_password() { + let args = ["program", "--db-password"]; + let multi_config = pure_test_utils::make_simplified_multi_config(args); + let mut persistent_config = PersistentConfigurationMock::new() + .earning_wallet_from_address_result(Ok(None)) + .mnemonic_seed_exists_result(Ok(true)) + .check_password_result(Err(PersistentConfigError::NotPresent)); + let mut config = BootstrapperConfig::new(); + + let result = standard::get_wallets( + &mut FakeStreamHolder::new().streams(), + &multi_config, + &mut persistent_config, + &mut config, + ); + + assert_eq!( + result, + Err(PersistentConfigError::NotPresent.into_configurator_error("db-password")) + ); + } + #[test] fn earning_wallet_address_different_from_database() { running_test(); @@ -1943,8 +2092,13 @@ mod tests { ); let mut config = BootstrapperConfig::new(); - let result = - standard::get_wallets(&multi_config, &mut persistent_config, &mut config).err(); + let result = standard::get_wallets( + &mut FakeStreamHolder::new().streams(), + &multi_config, + &mut persistent_config, + &mut config, + ) + .err(); assert_eq! (result, Some (ConfiguratorError::new (vec![ ParamError::new ("earning-wallet", "Cannot change to an address (0x0123456789012345678901234567890123456789) different from that previously set (0x9876543210987654321098765432109876543210)") @@ -1970,7 +2124,13 @@ mod tests { ); let mut config = BootstrapperConfig::new(); - standard::get_wallets(&multi_config, &mut persistent_config, &mut config).unwrap(); + standard::get_wallets( + &mut FakeStreamHolder::new().streams(), + &multi_config, + &mut persistent_config, + &mut config, + ) + .unwrap(); assert_eq!( config.earning_wallet, @@ -2002,8 +2162,13 @@ mod tests { ); let mut config = BootstrapperConfig::new(); - let result = - standard::get_wallets(&multi_config, &mut persistent_config, &mut config).err(); + let result = standard::get_wallets( + &mut FakeStreamHolder::new().streams(), + &multi_config, + &mut persistent_config, + &mut config, + ) + .err(); assert_eq! (result, Some (ConfiguratorError::new (vec![ ParamError::new ("consuming-private-key", "Cannot use --consuming-private-key or --earning-wallet when database contains wallet information") @@ -2032,8 +2197,13 @@ mod tests { ); let mut config = BootstrapperConfig::new(); - let result = - standard::get_wallets(&multi_config, &mut persistent_config, &mut config).err(); + let result = standard::get_wallets( + &mut FakeStreamHolder::new().streams(), + &multi_config, + &mut persistent_config, + &mut config, + ) + .err(); assert_eq! (result, Some (ConfiguratorError::new (vec![ ParamError::new ("earning-wallet", "Cannot use --consuming-private-key or --earning-wallet when database contains wallet information") @@ -2057,7 +2227,13 @@ mod tests { .check_password_result(Ok(false)); let mut config = BootstrapperConfig::new(); - standard::get_wallets(&multi_config, &mut persistent_config, &mut config).unwrap(); + standard::get_wallets( + &mut FakeStreamHolder::new().streams(), + &multi_config, + &mut persistent_config, + &mut config, + ) + .unwrap(); let mnemonic_seed = make_mnemonic_seed(mnemonic_seed_prefix); let expected_consuming_wallet = Wallet::from( @@ -2087,7 +2263,13 @@ mod tests { .check_password_result(Ok(false)); let mut config = BootstrapperConfig::new(); - standard::get_wallets(&multi_config, &mut persistent_config, &mut config).unwrap(); + standard::get_wallets( + &mut FakeStreamHolder::new().streams(), + &multi_config, + &mut persistent_config, + &mut config, + ) + .unwrap(); assert_eq!(config.consuming_wallet, None); assert_eq!( @@ -2096,6 +2278,55 @@ mod tests { ); } + #[test] + fn consuming_wallet_derivation_path_plus_mnemonic_seed_with_no_db_password_value() { + running_test(); + let args = ["program", "--db-password"]; + let multi_config = pure_test_utils::make_simplified_multi_config(args); + let mnemonic_seed_prefix = "mnemonic_seed"; + let mut persistent_config = make_persistent_config( + Some(mnemonic_seed_prefix), + None, + Some("m/44'/60'/1'/2/3"), + Some("0xcafedeadbeefbabefacecafedeadbeefbabeface"), + None, + None, + ) + .check_password_result(Ok(false)) + .check_password_result(Ok(true)) + .check_password_result(Ok(false)); + let mut config = BootstrapperConfig::new(); + let mut stdout_writer = ByteArrayWriter::new(); + let mut streams = &mut StdStreams { + stdin: &mut Cursor::new(&b"prompt for me\n"[..]), + stdout: &mut stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; + + standard::get_wallets( + &mut streams, + &multi_config, + &mut persistent_config, + &mut config, + ) + .unwrap(); + + let captured_output = stdout_writer.get_string(); + assert_eq!( + captured_output, + "Decrypt information from previous runs\nEnter password: " + ); + let mnemonic_seed = make_mnemonic_seed(mnemonic_seed_prefix); + let expected_consuming_wallet = Wallet::from( + Bip32ECKeyPair::from_raw(mnemonic_seed.as_ref(), "m/44'/60'/1'/2/3").unwrap(), + ); + assert_eq!(config.consuming_wallet, Some(expected_consuming_wallet)); + assert_eq!( + config.earning_wallet, + Wallet::from_str("0xcafedeadbeefbabefacecafedeadbeefbabeface").unwrap() + ); + } + #[test] fn unprivileged_parse_args_with_invalid_consuming_wallet_private_key_reacts_correctly() { running_test(); @@ -2152,10 +2383,16 @@ mod tests { ]; let multi_config = make_new_test_multi_config(&app_node(), vcls).unwrap(); let stdout_writer = &mut ByteArrayWriter::new(); + let mut streams = &mut StdStreams { + stdin: &mut Cursor::new(&b""[..]), + stdout: stdout_writer, + stderr: &mut ByteArrayWriter::new(), + }; standard::unprivileged_parse_args( &multi_config, &mut config, + &mut streams, Some(&mut make_default_persistent_configuration()), ) .unwrap(); @@ -2175,12 +2412,18 @@ mod tests { running_test(); let args = ["program"]; let multi_config = pure_test_utils::make_simplified_multi_config(args); + let mut holder = FakeStreamHolder::new(); let mut config = BootstrapperConfig::new(); let mut persistent_config = make_default_persistent_configuration().check_password_result(Ok(false)); config.db_password_opt = Some("password".to_string()); - let result = standard::get_db_password(&multi_config, &mut config, &mut persistent_config); + let result = standard::get_db_password( + &multi_config, + &mut holder.streams(), + &mut config, + &mut persistent_config, + ); assert_eq!(result, Ok(Some("password".to_string()))); } @@ -2189,15 +2432,49 @@ mod tests { fn get_db_password_doesnt_bother_if_database_has_no_password_yet() { running_test(); let multi_config = make_new_test_multi_config(&app_node(), vec![]).unwrap(); + let mut holder = FakeStreamHolder::new(); let mut config = BootstrapperConfig::new(); let mut persistent_config = make_default_persistent_configuration().check_password_result(Ok(true)); - let result = standard::get_db_password(&multi_config, &mut config, &mut persistent_config); + let result = standard::get_db_password( + &multi_config, + &mut holder.streams(), + &mut config, + &mut persistent_config, + ); assert_eq!(result, Ok(None)); } + #[test] + fn get_db_password_handles_database_read_error() { + running_test(); + let args = ["command", "--db-password"]; + let multi_config = pure_test_utils::make_simplified_multi_config(args); + let mut streams = &mut StdStreams { + stdin: &mut Cursor::new(&b"Too Many S3cr3ts!\n"[..]), + stdout: &mut ByteArrayWriter::new(), + stderr: &mut ByteArrayWriter::new(), + }; + let mut config = BootstrapperConfig::new(); + let mut persistent_config = make_default_persistent_configuration() + .check_password_result(Ok(false)) + .check_password_result(Err(PersistentConfigError::NotPresent)); + + let result = standard::get_db_password( + &multi_config, + &mut streams, + &mut config, + &mut persistent_config, + ); + + assert_eq!( + result, + Err(PersistentConfigError::NotPresent.into_configurator_error("db-password")) + ); + } + #[test] fn get_db_password_handles_database_write_error() { running_test(); @@ -2210,7 +2487,12 @@ mod tests { .check_password_result(Ok(true)) .change_password_result(Err(NotPresent)); - let result = standard::get_db_password(&multi_config, &mut config, &mut persistent_config); + let result = standard::get_db_password( + &multi_config, + &mut FakeStreamHolder::new().streams(), + &mut config, + &mut persistent_config, + ); assert_eq!( result, @@ -2279,7 +2561,10 @@ mod tests { let args = ["program", "--ip", "1.2.3.4", "--chain", "dev"]; let config = subject - .configure(&make_simplified_multi_config(args)) + .configure( + &make_simplified_multi_config(args), + Some(&mut FakeStreamHolder::new().streams()), + ) .unwrap(); assert_eq!( @@ -2301,7 +2586,10 @@ mod tests { ]; let config = subject - .configure(&make_simplified_multi_config(args)) + .configure( + &make_simplified_multi_config(args), + Some(&mut FakeStreamHolder::new().streams()), + ) .unwrap(); assert_eq!( @@ -2318,7 +2606,10 @@ mod tests { let args = ["program", "--ip", "1.2.3.4"]; let config = subject - .configure(&make_simplified_multi_config(args)) + .configure( + &make_simplified_multi_config(args), + Some(&mut FakeStreamHolder::new().streams()), + ) .unwrap(); assert_eq!( @@ -2340,7 +2631,10 @@ mod tests { ]; let bootstrapper_config = subject - .configure(&make_simplified_multi_config(args)) + .configure( + &make_simplified_multi_config(args), + Some(&mut FakeStreamHolder::new().streams()), + ) .unwrap(); assert_eq!( bootstrapper_config.blockchain_bridge_config.chain_id, @@ -2362,7 +2656,10 @@ mod tests { let args = ["program", "--ip", "1.2.3.4", "--gas-price", "57"]; let config = subject - .configure(&make_simplified_multi_config(args)) + .configure( + &make_simplified_multi_config(args), + Some(&mut FakeStreamHolder::new().streams()), + ) .unwrap(); assert_eq!(config.blockchain_bridge_config.gas_price, 57); @@ -2382,7 +2679,10 @@ mod tests { let args = ["program", "--ip", "1.2.3.4"]; let config = subject - .configure(&make_simplified_multi_config(args)) + .configure( + &make_simplified_multi_config(args), + Some(&mut FakeStreamHolder::new().streams()), + ) .unwrap(); assert_eq!(config.blockchain_bridge_config.gas_price, 1); diff --git a/node/src/run_modes.rs b/node/src/run_modes.rs index 3d9e12d67..a02a24141 100644 --- a/node/src/run_modes.rs +++ b/node/src/run_modes.rs @@ -248,7 +248,7 @@ impl Runner for RunnerReal { } fn run_daemon(&self, args: &[String], streams: &mut StdStreams<'_>) -> Result<(), RunnerError> { - let mut initializer = self.daemon_initializer_factory.make(args)?; + let mut initializer = self.daemon_initializer_factory.make(args, streams)?; initializer.go(streams, args)?; Ok(()) //there might presently be no way to make this fn terminate politely } diff --git a/node/src/run_modes_factories.rs b/node/src/run_modes_factories.rs index fa36c37a6..386de5156 100644 --- a/node/src/run_modes_factories.rs +++ b/node/src/run_modes_factories.rs @@ -61,7 +61,11 @@ pub trait ServerInitializerFactory { fn make(&self) -> Box>; } pub trait DaemonInitializerFactory { - fn make(&self, args: &[String]) -> Result, ConfiguratorError>; + fn make( + &self, + args: &[String], + streams: &mut StdStreams, + ) -> Result, ConfiguratorError>; } pub trait DumpConfigRunner { @@ -92,11 +96,15 @@ impl ServerInitializerFactory for ServerInitializerFactoryReal { } impl DaemonInitializerFactory for DaemonInitializerFactoryReal { - fn make(&self, args: &[String]) -> Result, ConfiguratorError> { + fn make( + &self, + args: &[String], + streams: &mut StdStreams, + ) -> Result, ConfiguratorError> { let configurator = Self::expect(self.configurator.take()); let multi_config = NodeConfiguratorInitializationReal::make_multi_config_daemon_specific(args)?; - let initialization_config = configurator.configure(&multi_config)?; + let initialization_config = configurator.configure(&multi_config, Some(streams))?; let initializer_clustered_params = Self::expect(self.inner.take()); let daemon_initializer = Box::new(DaemonInitializerReal::new( initialization_config, @@ -145,6 +153,7 @@ mod tests { make_pre_populated_mocked_directory_wrapper, ChannelFactoryMock, }; use masq_lib::shared_schema::ConfiguratorError; + use masq_lib::test_utils::fake_stream_holder::FakeStreamHolder; use masq_lib::utils::SliceToVec; use std::sync::{Arc, Mutex}; @@ -199,8 +208,9 @@ mod tests { 1234.to_string().as_str(), ] .array_of_borrows_to_vec(); + let mut stream_holder = FakeStreamHolder::default(); - let result = subject.make(&args).unwrap(); + let result = subject.make(&args, &mut stream_holder.streams()).unwrap(); let factory_product = result .as_any() @@ -240,8 +250,9 @@ mod tests { daemon_clustered_params, ); let args = &["program", "--wooooooo", "--fooooooo"].array_of_borrows_to_vec(); + let mut stream_holder = FakeStreamHolder::default(); - let result = subject.make(&args); + let result = subject.make(&args, &mut stream_holder.streams()); let mut config_error = result.err().unwrap(); let actual_error = config_error.param_errors.remove(0); @@ -270,8 +281,9 @@ mod tests { daemon_clustered_params, ); let args = &["program", "--initialization"].array_of_borrows_to_vec(); + let mut stream_holder = FakeStreamHolder::default(); - let result = subject.make(&args); + let result = subject.make(&args, &mut stream_holder.streams()); let mut config_error = result.err().unwrap(); let actual_error = config_error.param_errors.remove(0); @@ -362,7 +374,11 @@ pub mod mocks { } impl DaemonInitializerFactory for DaemonInitializerFactoryMock { - fn make(&self, args: &[String]) -> Result, ConfiguratorError> { + fn make( + &self, + args: &[String], + _streams: &mut StdStreams, + ) -> Result, ConfiguratorError> { self.make_params.lock().unwrap().push(args.to_vec()); self.make_result.borrow_mut().remove(0) } @@ -472,6 +488,7 @@ pub mod mocks { fn configure( &self, multi_config: &MultiConfig, + _streams: Option<&mut StdStreams>, ) -> Result { ingest_values_from_multi_config( &self.demanded_values_from_multi_config, From e597ccc35a6da5f0425f5ed349ab7ef5f3435399 Mon Sep 17 00:00:00 2001 From: FinsaasGH Date: Fri, 22 Oct 2021 15:14:29 -0600 Subject: [PATCH 05/17] Updated command processor with new clippy changes --- masq/src/command_processor.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/masq/src/command_processor.rs b/masq/src/command_processor.rs index 044391134..e73265b4b 100644 --- a/masq/src/command_processor.rs +++ b/masq/src/command_processor.rs @@ -54,10 +54,9 @@ impl CommandProcessor for CommandProcessorReal { fn process(&mut self, command: Box) -> Result<(), CommandError> { if let Some(synchronizer) = self.context.terminal_interface.clone() { let _lock = synchronizer.lock(); - command.execute(&mut self.context) - } else { - command.execute(&mut self.context) + return command.execute(&mut self.context); } + command.execute(&mut self.context) } fn close(&mut self) { From dc95a8ac7b91eb2ba5e23994b50ee0fe7a5b72f3 Mon Sep 17 00:00:00 2001 From: FinsaasGH <89403560+FinsaasGH@users.noreply.github.com> Date: Mon, 25 Oct 2021 07:59:47 -0600 Subject: [PATCH 06/17] GH-457 (#4) * GH-457: Initial cleanup of dead parameter processing. node_configurator_standard.rs and mod.rs only * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * Delete test.txt * GH-457: Pulled commits from master, removed check_past_initialization and tests, removed TODO regarding request_existing_db_password. Removing it starts a chain of events resulting in node_configurator no longer working. * GH-457: Removed unused import. * GH-457: Removed request_existing_db_password and associated code, refactored get_db_password to pull from persistent config, removed associated tests * GH-457: Restored 2 removed tests * GH-457: Removal of streams and conflicted code. * GH-457: Updated tests and calls to run_modes_factories.rs * GH-457: removed unnecessary validators * Update and rename ci-matrix.yml to ci-ubuntu-latest.yml * Update ci-ubuntu-latest.yml * Create ci-windows-latest.yml * Create ci-macOS-latest.yml * Delete ci-windows-latest.yml * Delete ci-macOS-latest.yml * Update and rename ci-ubuntu-latest.yml to ci-matrix.yml * GH-457: Updated command_processor.rs with new clippy requirements Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH From 95e05b569b4409855d965f6694f1394475df3610 Mon Sep 17 00:00:00 2001 From: FinsaasGH <89403560+FinsaasGH@users.noreply.github.com> Date: Fri, 29 Oct 2021 07:16:54 -0600 Subject: [PATCH 07/17] GH-414: Updated generate wallets to use 12 word mnemonic phrase (#5) * GH-414: Updated generate wallets to use 12 word mnemonic phrase as default * Updated command processor with new clippy changes * GH-457: Remove dead parameter processing (#58) * GH-457: Initial cleanup of dead parameter processing. node_configurator_standard.rs and mod.rs only * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * Delete test.txt * GH-457: Pulled commits from master, removed check_past_initialization and tests, removed TODO regarding request_existing_db_password. Removing it starts a chain of events resulting in node_configurator no longer working. * GH-457: Removed unused import. * GH-457: Removed request_existing_db_password and associated code, refactored get_db_password to pull from persistent config, removed associated tests * GH-457: Restored 2 removed tests * GH-457: Removal of streams and conflicted code. * GH-457: Updated tests and calls to run_modes_factories.rs * GH-457: removed unnecessary validators * Update and rename ci-matrix.yml to ci-ubuntu-latest.yml * Update ci-ubuntu-latest.yml * Create ci-windows-latest.yml * Create ci-macOS-latest.yml * Delete ci-windows-latest.yml * Delete ci-macOS-latest.yml * Update and rename ci-ubuntu-latest.yml to ci-matrix.yml * GH-457: Updated command_processor.rs with new clippy requirements Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH Co-authored-by: dnwiebe --- masq/src/commands/generate_wallets_command.rs | 4 ++-- node/src/db_config/persistent_configuration.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/masq/src/commands/generate_wallets_command.rs b/masq/src/commands/generate_wallets_command.rs index 489e783e8..dc863fa59 100644 --- a/masq/src/commands/generate_wallets_command.rs +++ b/masq/src/commands/generate_wallets_command.rs @@ -107,7 +107,7 @@ pub fn generate_wallets_subcommand() -> App<'static, 'static> { .long("word-count") .value_name("WORD-COUNT") .required(false) - .default_value("24") + .default_value("12") .takes_value(true) .possible_values(&["12", "15", "18", "21", "24"]) ) @@ -226,7 +226,7 @@ mod tests { generate_wallets_command, &GenerateWalletsCommand { db_password: "password".to_string(), - word_count: 24, + word_count: 12, language: "English".to_string(), passphrase_opt: None, consuming_path: DEFAULT_CONSUMING_DERIVATION_PATH.to_string(), diff --git a/node/src/db_config/persistent_configuration.rs b/node/src/db_config/persistent_configuration.rs index 6dbf9ddd7..f912d855d 100644 --- a/node/src/db_config/persistent_configuration.rs +++ b/node/src/db_config/persistent_configuration.rs @@ -416,7 +416,7 @@ impl PersistentConfigurationReal { } fn validate_derivation_path(derivation_path: &str) -> bool { - let mnemonic = Bip39::mnemonic(MnemonicType::Words24, Language::English); + let mnemonic = Bip39::mnemonic(MnemonicType::Words12, Language::English); let seed = Bip39::seed(&mnemonic, ""); Bip32ECKeyPair::from_raw(seed.as_bytes(), derivation_path).is_ok() } @@ -924,7 +924,7 @@ mod tests { } fn make_seed_info(db_password: &str) -> (PlainData, String) { - let mnemonic = Bip39::mnemonic(MnemonicType::Words24, Language::English); + let mnemonic = Bip39::mnemonic(MnemonicType::Words12, Language::English); let mnemonic_seed = Bip39::seed(&mnemonic, ""); let seed_bytes = PlainData::new(mnemonic_seed.as_ref()); let encoded_seed = encode_bytes(Some(seed_bytes.clone())).unwrap().unwrap(); From 0618eb22eeffd9f5f062300686a21c9311286b52 Mon Sep 17 00:00:00 2001 From: FinsaasGH <89403560+FinsaasGH@users.noreply.github.com> Date: Fri, 5 Nov 2021 11:06:01 -0600 Subject: [PATCH 08/17] GH-418: Change copyright tags (#3) * GH-418: Updated copyright tag in 230 files & updated authors * GH-418: Updated copyright tag in 5 more files * GH-457: Remove dead parameter processing (#58) * GH-457: Initial cleanup of dead parameter processing. node_configurator_standard.rs and mod.rs only * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * Delete test.txt * GH-457: Pulled commits from master, removed check_past_initialization and tests, removed TODO regarding request_existing_db_password. Removing it starts a chain of events resulting in node_configurator no longer working. * GH-457: Removed unused import. * GH-457: Removed request_existing_db_password and associated code, refactored get_db_password to pull from persistent config, removed associated tests * GH-457: Restored 2 removed tests * GH-457: Removal of streams and conflicted code. * GH-457: Updated tests and calls to run_modes_factories.rs * GH-457: removed unnecessary validators * Update and rename ci-matrix.yml to ci-ubuntu-latest.yml * Update ci-ubuntu-latest.yml * Create ci-windows-latest.yml * Create ci-macOS-latest.yml * Delete ci-windows-latest.yml * Delete ci-macOS-latest.yml * Update and rename ci-ubuntu-latest.yml to ci-matrix.yml * GH-457: Updated command_processor.rs with new clippy requirements Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH * GH-418: Updated Copyright tag to reflect changes requested. Updated license with correct syntax. * GH-414: Change default mnemonic phrase to 12 (#59) * GH-414: Updated generate wallets to use 12 word mnemonic phrase as default * Updated command processor with new clippy changes Co-authored-by: FinsaasGH Co-authored-by: dnwiebe * GH-418: Updated daemon_and_node_modes_version_call to 2021/12/31 Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH Co-authored-by: dnwiebe From 9c3ee9fc127ee69e1bc2c9d9606e672e8b3293be Mon Sep 17 00:00:00 2001 From: FinsaasGH <89403560+FinsaasGH@users.noreply.github.com> Date: Thu, 11 Nov 2021 07:40:30 -0700 Subject: [PATCH 09/17] GH-495: Update Rust from 2018 to 2021 (#6) * GH-473: blocked on multinode; but standard repo working; new system of descriptor wtiting roughly ready * GH-473: schema with $ and @ done but wouldn't interact well with shells; so before the new schema with url; also Blockchains as standalone structs were originated * GH-473: url syntax established; node unit tests all passing * GH-473: also multinode ready; commit before restructuring blockchaininterface into full chain records * GH-473: blockchains standardized now with their own structs for each * GH-473: clean-up * GH-473: formatting * GH-473: platform specific test code - separated now * GH-473: trying to solve platform dependant data dir in test * GH-473: fixing path for macOs in a test * GH-473: import issue in test * GH-473: data dir test modified to bypass unimportant stuff * GH-473: fixes in imports in multinode tests * GH-473: multinode chain id corrected in a few tests * GH-473: fixed one place where default of chain id in multinode tests was wrong; still a bad solution * GH-473: referring chains by num IDs standardized in multinode tests now, also veryfi_bill_payment should work well * GH-473: the code is more a standardized API for working with BlockchainRecords; also help text changed * GH-473: final arrangement of some help and error messages * GH-473: after Steve's review; but just half addressed * GH-473: before sharp knifing rooted segments out - those which don't use chain_id or just Chain * GH-473: dead-point; I refuse to go on. Let's try to restore the old design partly * GH-473: URI like syntax is in; Neighborhood fixed but tests in other files are failing * GH-473: working product * GH-473: formatting * GH-473: auto review * GH-473: formatting * GH-473: fix in imports for multinode tests * GH-473: checking multinode tests in a pre-run and cleaning the rest of conflicts in imports * GH-473: formatting * GH-473: slashes exchange semicolons * GH-473: messages inconsistent with tests - fixes in multinode * GH-473: now dev chain again fills the void in ETH id system at position 2 * GH-473: formatting * GH-488: interim commit in deploying new chain records; I stopped at mumbai chain_id too big, now a save point for changing chain id into u64 type * GH-488: chains strongly asserted; next I'm going to remove Rinkeby as decided * Rinkeby is out * GH-488: clearing a comment * GH-473: pure chain enum replaces num IDs; simplification of chain wise constants * GH-473: interim commit; removing extra features in web3 for masq_lib * GH-473: raw_transaction made working again, perhaps right * GH-473: formatting * GH-473: I forgot about fixes in multinode * GH-473: formatting * GH-473: two more tests for plygon chains; poly-mainnet syntax into more precise polygon-mainnet; help text * GH-473: formatting * GH-473: I left some defects over me * GH-473: first part of the second review addressed * GH-473: base64 url-safe-no-pad is configured now * GH-473: reaction to a new version of Rust * GH-473: simplification; I've reused code from other place for NodeReference * GH-495: Updated Rust version from 2018 to 2021 * GH-473: hardening chain names * GH-414: Change default mnemonic phrase to 12 (#59) * GH-414: Updated generate wallets to use 12 word mnemonic phrase as default * Updated command processor with new clippy changes Co-authored-by: FinsaasGH Co-authored-by: dnwiebe * GH-473: refactoring tests of signing transactions * GH-418: Update copyright tags (#67) * GH-457 (#1) * GH-457: Initial cleanup of dead parameter processing. node_configurator_standard.rs and mod.rs only * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * GH-457: Pairing review with Dan - added initialize_database and allied tests back in * Delete test.txt * GH-457: Pulled commits from master, removed check_past_initialization and tests, removed TODO regarding request_existing_db_password. Removing it starts a chain of events resulting in node_configurator no longer working. * GH-457: Removed unused import. * GH-457: Removed request_existing_db_password and associated code, refactored get_db_password to pull from persistent config, removed associated tests * GH-457: Restored 2 removed tests * GH-457: Removal of streams and conflicted code. * GH-457: Updated tests and calls to run_modes_factories.rs * GH-457: removed unnecessary validators * Update and rename ci-matrix.yml to ci-ubuntu-latest.yml * Update ci-ubuntu-latest.yml * Create ci-windows-latest.yml * Create ci-macOS-latest.yml * Delete ci-windows-latest.yml * Delete ci-macOS-latest.yml * Update and rename ci-ubuntu-latest.yml to ci-matrix.yml * GH-457: Updated command_processor.rs with new clippy requirements Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH * GH-418: Updated copyright tag in 230 files & updated authors * GH-418: Updated copyright tag in 5 more files * GH-418: Updated Copyright tag to reflect changes requested. Updated license with correct syntax. * GH-418: Updated daemon_and_node_modes_version_call to 2021/12/31 Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH Co-authored-by: dnwiebe * GH-473: fixes reacting to testers' comments * GH-473: formatting * GH-473: late fixes * GH-473: mac specific test, detail * GH-473: finalizing * GH-473: mac specific stuff, one test * GH-473: cargo lock update (not manual) * GH-473: hardening namespace * GH-473: late fix * GH-500: Accept the proposal of enhanced logging and safer sending http requests to the blockchain service (#65) * More instrumentation for payables, and a bit of renaming * formatting * MoreInstrumentation * MoreInstrumentation: making scanning parameters more sober * MoreInstrumentation - arrangement of logs in Accountant; FailedQuery now materialized by revealing a lower level cause; removed logs of low effect from Neighborhood * MoreInstrumentation - grammatical issues with an if statement * MoreInstrumentation: the http connection should appear just one a time now * MoreInstrumentation: formatting * MoreInstrumentation: new Rust fix, I forgot about this recent event * MoreInstrumentation: trying to appease a multinode test because payment curves were changed * MoreInstrumentation: multinode test temporarily disabled because it requires exact balances for assertions and the numbers have changed because of different payment curves * GH-500: correction of needless stuff from the experiments with analyzing 'QueryFailed' * GH-500: answering a review * GH-500: forgot an unused umport * GH-500: details in comments Co-authored-by: Dan Wiebe * GH-473: late simplification of BlockchainRecord fileds and answering the second review * GH-473: removed redundant fieleds from BlockchainRecords, more of simplification; extra data dir for chain families is gone * GH-473: I accidentaly excluded this from the previous commit...so catching up * GH-473: fixing an intehration test about diff chain in db and cml * GH-473: chain values in masq tests were old wise * GH-473: formatting Co-authored-by: Bert <65427484+bertllll@users.noreply.github.com> Co-authored-by: dnwiebe Co-authored-by: FinsaasGH Co-authored-by: FinsaasGH Co-authored-by: KauriHero <55721017+kauri-hero@users.noreply.github.com> From a85a59f4272063e801974499b0390e711d197180 Mon Sep 17 00:00:00 2001 From: FinsaasGH Date: Thu, 11 Nov 2021 07:54:19 -0700 Subject: [PATCH 10/17] GH-496: Updated dns_utility\cargo regex, libc, system-configuration, core-foundation, winreg, ipconfig --- dns_utility/Cargo.lock | 129 ++++++++++++++++++++++------------------- dns_utility/Cargo.toml | 13 ++--- 2 files changed, 74 insertions(+), 68 deletions(-) diff --git a/dns_utility/Cargo.lock b/dns_utility/Cargo.lock index acb79f75e..a51211544 100644 --- a/dns_utility/Cargo.lock +++ b/dns_utility/Cargo.lock @@ -45,9 +45,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.6" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" dependencies = [ "memchr", ] @@ -58,7 +58,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" dependencies = [ - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -90,7 +90,7 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi", "libc", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -287,19 +287,35 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "core-foundation" -version = "0.6.4" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys 0.7.0", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" +checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.8.3", "libc", ] [[package]] name = "core-foundation-sys" -version = "0.6.2" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "crossbeam-channel" @@ -447,13 +463,13 @@ dependencies = [ name = "dns_utility" version = "1.0.0" dependencies = [ - "core-foundation", - "ipconfig 0.2.1", + "core-foundation 0.9.2", + "ipconfig 0.2.2", "libc", "masq_lib", "regex", "system-configuration", - "winreg 0.7.0", + "winreg 0.10.1", ] [[package]] @@ -622,7 +638,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461" dependencies = [ - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -757,19 +773,19 @@ dependencies = [ "error-chain 0.8.1", "socket2", "widestring 0.2.2", - "winapi 0.3.8", + "winapi 0.3.9", "winreg 0.5.1", ] [[package]] name = "ipconfig" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa79fa216fbe60834a9c0737d7fcd30425b32d1c58854663e24d4c4b328ed83f" +checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" dependencies = [ "socket2", "widestring 0.4.0", - "winapi 0.3.8", + "winapi 0.3.9", "winreg 0.6.2", ] @@ -825,9 +841,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.104" +version = "0.2.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2f96d100e1cf1929e7719b7edb3b90ab5298072638fccd77be9ce942ecdfce" +checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" [[package]] name = "libsecp256k1" @@ -939,9 +955,9 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" -version = "2.2.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "memoffset" @@ -1017,7 +1033,7 @@ checksum = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" dependencies = [ "cfg-if 0.1.10", "libc", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -1115,7 +1131,7 @@ dependencies = [ "rand 0.6.5", "rustc_version", "smallvec", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -1131,7 +1147,7 @@ dependencies = [ "redox_syscall", "rustc_version", "smallvec", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -1146,7 +1162,7 @@ dependencies = [ "redox_syscall", "rustc_version", "smallvec", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -1219,7 +1235,7 @@ dependencies = [ "fuchsia-cprng", "rand_core 0.3.1", "rdrand", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -1232,7 +1248,7 @@ dependencies = [ "fuchsia-cprng", "libc", "rand_core 0.3.1", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -1251,7 +1267,7 @@ dependencies = [ "rand_os", "rand_pcg", "rand_xorshift", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -1305,7 +1321,7 @@ checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" dependencies = [ "libc", "rand_core 0.4.2", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -1319,7 +1335,7 @@ dependencies = [ "libc", "rand_core 0.4.2", "rdrand", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -1358,21 +1374,20 @@ checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" [[package]] name = "regex" -version = "1.4.2" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" dependencies = [ "aho-corasick", "memchr", "regex-syntax", - "thread_local", ] [[package]] name = "regex-syntax" -version = "0.6.21" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "resolv-conf" @@ -1571,7 +1586,7 @@ dependencies = [ "cfg-if 0.1.10", "libc", "redox_syscall", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -1634,21 +1649,22 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3dc3e701a89dd6764083d19f048b57ec01c26d0904ff8108a507059a6462e6" +checksum = "dd4bc0637a2b8c0b1a5145cca3e21b707865edc7e32285771536af1ade129468" dependencies = [ - "core-foundation", + "bitflags", + "core-foundation 0.7.0", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfd906a2882d54084bfdf517bf03892ac06820f1c0a3d37e48609f334798ad99" +checksum = "269e271436d8e4bb2621c535a11fe03d5d012f74b19af72f80288f3a72f6180a" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.7.0", "libc", ] @@ -1661,15 +1677,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "thread_local" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" -dependencies = [ - "lazy_static", -] - [[package]] name = "time" version = "0.1.42" @@ -1678,7 +1685,7 @@ checksum = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" dependencies = [ "libc", "redox_syscall", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -1828,7 +1835,7 @@ dependencies = [ "tokio-executor", "tokio-io", "tokio-reactor", - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -2184,9 +2191,9 @@ checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" [[package]] name = "winapi" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", @@ -2216,7 +2223,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a27a759395c1195c4cc5cda607ef6f8f6498f64e78f7900f5de0a127a424704a" dependencies = [ - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -2225,16 +2232,16 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" dependencies = [ - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] name = "winreg" -version = "0.7.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" dependencies = [ - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] @@ -2243,7 +2250,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7daf138b6b14196e3830a588acf1e86966c694d3e8fb026fb105b8b5dca07e6e" dependencies = [ - "winapi 0.3.8", + "winapi 0.3.9", ] [[package]] diff --git a/dns_utility/Cargo.toml b/dns_utility/Cargo.toml index 9e6d9bedf..a109302a0 100644 --- a/dns_utility/Cargo.toml +++ b/dns_utility/Cargo.toml @@ -8,18 +8,17 @@ description = "Command-line utility to turn DNS subversion on and off" edition = "2021" [dependencies] -regex = "1.3.7" -libc = "0.2.69" +regex = "1.5.4" +libc = "0.2.107" masq_lib = { path = "../masq_lib" } - [target.'cfg(target_os = "macos")'.dependencies] -system-configuration = "0.3.0" -core-foundation = "0.6.4" +system-configuration = "0.4.0" +core-foundation = "0.9.2" [target.'cfg(target_os = "windows")'.dependencies] -winreg = "0.7.0" -ipconfig = "0.2.1" +winreg = "0.10.1" +ipconfig = "0.2.2" [dev-dependencies] From 4eb68b86b68e98feef7ec59842b01a132dce08be Mon Sep 17 00:00:00 2001 From: FinsaasGH Date: Fri, 12 Nov 2021 00:15:13 -0700 Subject: [PATCH 11/17] GH-496: Updated more dependencies --- dns_utility/Cargo.lock | 249 +++++++------ masq/Cargo.toml | 12 +- masq_lib/Cargo.toml | 20 +- masq_lib/src/messages.rs | 4 +- masq_lib/src/multi_config.rs | 2 +- multinode_integration_tests/Cargo.toml | 18 +- node/Cargo.lock | 470 +++++++++++++++---------- node/Cargo.toml | 54 +-- node/src/blockchain/bip32.rs | 4 +- node/src/blockchain/bip39.rs | 2 +- node/src/discriminator.rs | 2 +- node/src/sub_lib/wallet.rs | 81 ++--- 12 files changed, 503 insertions(+), 415 deletions(-) diff --git a/dns_utility/Cargo.lock b/dns_utility/Cargo.lock index a51211544..d9d769ecd 100644 --- a/dns_utility/Cargo.lock +++ b/dns_utility/Cargo.lock @@ -154,19 +154,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" - -[[package]] -name = "block-buffer" -version = "0.2.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1339a1042f5d9f295737ad4d9a6ab6bf81c84a933dba110b9200cd6d1448b814" -dependencies = [ - "byte-tools 0.2.0", - "generic-array 0.8.3", -] +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" @@ -175,9 +165,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ "block-padding", - "byte-tools 0.3.1", + "byte-tools", "byteorder", - "generic-array 0.12.3", + "generic-array", ] [[package]] @@ -186,15 +176,9 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" dependencies = [ - "byte-tools 0.3.1", + "byte-tools", ] -[[package]] -name = "byte-tools" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" - [[package]] name = "byte-tools" version = "0.3.1" @@ -279,12 +263,6 @@ dependencies = [ "unicode-xid 0.2.0", ] -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - [[package]] name = "core-foundation" version = "0.7.0" @@ -356,7 +334,7 @@ dependencies = [ "cfg-if 0.1.10", "crossbeam-utils 0.7.0", "lazy_static", - "memoffset", + "memoffset 0.5.3", "scopeguard 1.0.0", ] @@ -407,24 +385,14 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" -[[package]] -name = "crypto-mac" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779015233ac67d65098614aec748ac1c756ab6677fa2e14cf8b37c08dfed1198" -dependencies = [ - "constant_time_eq", - "generic-array 0.8.3", -] - [[package]] name = "crypto-mac" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" dependencies = [ - "generic-array 0.12.3", - "subtle", + "generic-array", + "subtle 1.0.0", ] [[package]] @@ -441,22 +409,13 @@ dependencies = [ "syn 0.15.44", ] -[[package]] -name = "digest" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5b29bf156f3f4b3c4f610a25ff69370616ae6e0657d416de22645483e72af0a" -dependencies = [ - "generic-array 0.8.3", -] - [[package]] name = "digest" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "generic-array 0.12.3", + "generic-array", ] [[package]] @@ -615,21 +574,22 @@ checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" [[package]] name = "generic-array" -version = "0.8.3" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fceb69994e330afed50c93524be68c42fa898c2d9fd4ee8da03bd7363acd26f2" +checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" dependencies = [ - "nodrop", "typenum", ] [[package]] -name = "generic-array" -version = "0.12.3" +name = "getrandom" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "typenum", + "cfg-if 1.0.0", + "libc", + "wasi", ] [[package]] @@ -650,36 +610,25 @@ dependencies = [ "libc", ] -[[package]] -name = "hmac" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a13f4163aa0c5ca1be584aace0e2212b2e41be5478218d4f657f5f778b2ae2a" -dependencies = [ - "crypto-mac 0.4.0", - "digest 0.6.2", - "generic-array 0.8.3", -] - [[package]] name = "hmac" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" dependencies = [ - "crypto-mac 0.7.0", - "digest 0.8.1", + "crypto-mac", + "digest", ] [[package]] name = "hmac-drbg" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe727d41d2eec0a6574d887914347e5ff96a3b87177817e2a9820c5c87fecc2" +checksum = "c6e570451493f10f6581b48cdd530413b63ea9e780f544bfd3bdcaa0d89d1a7b" dependencies = [ - "digest 0.6.2", - "generic-array 0.8.3", - "hmac 0.4.2", + "digest", + "generic-array", + "hmac", ] [[package]] @@ -791,9 +740,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.8.2" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" +checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" dependencies = [ "either", ] @@ -847,15 +796,17 @@ checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" [[package]] name = "libsecp256k1" -version = "0.2.2" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688e8d65e495567c2c35ea0001b26b9debf0b4ea11f8cccc954233b75fc3428a" +checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962" dependencies = [ "arrayref", - "digest 0.6.2", + "crunchy", + "digest", "hmac-drbg", - "rand 0.4.6", - "sha2 0.6.0", + "rand 0.7.3", + "sha2", + "subtle 2.4.1", "typenum", ] @@ -968,6 +919,15 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "memoffset" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" +dependencies = [ + "autocfg 1.0.1", +] + [[package]] name = "memzero" version = "0.1.0" @@ -1038,14 +998,15 @@ dependencies = [ [[package]] name = "nix" -version = "0.20.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a" +checksum = "f305c2c2e4c39a82f7bf0bf65fb557f9070ce06781d4f2454295cc34b1c43188" dependencies = [ "bitflags", "cc", "cfg-if 1.0.0", "libc", + "memoffset 0.6.4", ] [[package]] @@ -1171,6 +1132,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +[[package]] +name = "ppv-lite86" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" + [[package]] name = "primitive-types" version = "0.3.0" @@ -1226,18 +1193,6 @@ dependencies = [ "proc-macro2 1.0.32", ] -[[package]] -name = "rand" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" -dependencies = [ - "fuchsia-cprng", - "rand_core 0.3.1", - "rdrand", - "winapi 0.3.9", -] - [[package]] name = "rand" version = "0.5.6" @@ -1259,9 +1214,9 @@ checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" dependencies = [ "autocfg 0.1.7", "libc", - "rand_chacha", + "rand_chacha 0.1.1", "rand_core 0.4.2", - "rand_hc", + "rand_hc 0.1.0", "rand_isaac", "rand_jitter", "rand_os", @@ -1270,6 +1225,19 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", +] + [[package]] name = "rand_chacha" version = "0.1.1" @@ -1280,6 +1248,16 @@ dependencies = [ "rand_core 0.3.1", ] +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + [[package]] name = "rand_core" version = "0.3.1" @@ -1295,6 +1273,15 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom", +] + [[package]] name = "rand_hc" version = "0.1.0" @@ -1304,6 +1291,15 @@ dependencies = [ "rand_core 0.3.1", ] +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + [[package]] name = "rand_isaac" version = "0.1.1" @@ -1470,18 +1466,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.104" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.104" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" dependencies = [ "proc-macro2 1.0.32", "quote 1.0.10", @@ -1490,9 +1486,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.44" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7" +checksum = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8" dependencies = [ "itoa", "ryu", @@ -1505,33 +1501,20 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", + "block-buffer", + "digest", "fake-simd", "opaque-debug", ] -[[package]] -name = "sha2" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d963c78ce367df26d7ea8b8cc655c651b42e8a1e584e869c1e17dae3ccb116a" -dependencies = [ - "block-buffer 0.2.0", - "byte-tools 0.2.0", - "digest 0.6.2", - "fake-simd", - "generic-array 0.8.3", -] - [[package]] name = "sha2" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27044adfd2e1f077f649f59deb9490d3941d674002f7d062870a60ebe9bd47a0" dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", + "block-buffer", + "digest", "fake-simd", "opaque-debug", ] @@ -1613,6 +1596,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + [[package]] name = "syn" version = "0.15.44" @@ -1690,15 +1679,15 @@ dependencies = [ [[package]] name = "tiny-hderive" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843479427369dcfdf7c56ff1d1a2bbeca4c15b390ed493f84c77fe08a43eae68" +checksum = "01b874a4992538d4b2f4fbbac11b9419d685f4b39bdc3fed95b04e07bfd76040" dependencies = [ "base58", - "hmac 0.7.1", + "hmac", "libsecp256k1", "memzero", - "sha2 0.8.1", + "sha2", ] [[package]] @@ -1936,9 +1925,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" dependencies = [ "serde", ] @@ -2123,6 +2112,12 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "web3" version = "0.8.0" diff --git a/masq/Cargo.toml b/masq/Cargo.toml index fff556d89..a3fbe159f 100644 --- a/masq/Cargo.toml +++ b/masq/Cargo.toml @@ -11,17 +11,17 @@ workspace = "../node" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -clap = "2.33.1" -crossbeam-channel = "0.5.0" +clap = "2.33.3" +crossbeam-channel = "0.5.1" lazy_static = "1.4.0" linefeed = "0.6.0" masq_lib = { path = "../masq_lib" } -regex = "1.0.5" -websocket = {version = "0.26.0", default-features = false, features = ["sync"]} -ctrlc = "3.1.9" +regex = "1.5.4" +websocket = {version = "0.26.2", default-features = false, features = ["sync"]} +ctrlc = "3.2.1" [target.'cfg(not(target_os = "windows"))'.dependencies] -nix = "0.20.0" +nix = "0.23.0" [lib] name = "masq_cli_lib" diff --git a/masq_lib/Cargo.toml b/masq_lib/Cargo.toml index bda58cb14..2cfbf99ed 100644 --- a/masq_lib/Cargo.toml +++ b/masq_lib/Cargo.toml @@ -12,23 +12,23 @@ workspace = "../node" actix = "0.7.9" clap = "2.33.3" const_format = "0.2.22" -crossbeam-channel = "0.5.0" -itertools = "0.8.0" +crossbeam-channel = "0.5.1" +itertools = "0.10.1" lazy_static = "1.4.0" -regex = "1.0.5" -serde = "1.0.99" -serde_derive = "1.0.99" -serde_json = "1.0.40" -tiny-hderive = "0.2.1" -toml = "0.5.3" +regex = "1.5.4" +serde = "1.0.130" +serde_derive = "1.0.130" +serde_json = "1.0.69" +tiny-hderive = "0.3.0" +toml = "0.5.8" web3 = {version = "0.8.0", default-features = false} -websocket = {version = "0.26.0", default-features = false, features = ["sync"]} +websocket = {version = "0.26.2", default-features = false, features = ["sync"]} [features] no_test_share = [] [target.'cfg(not(target_os = "windows"))'.dependencies] -nix = "0.20.0" +nix = "0.23.0" [lib] name = "masq_lib" diff --git a/masq_lib/src/messages.rs b/masq_lib/src/messages.rs index fb29ae923..d51d1a632 100644 --- a/masq_lib/src/messages.rs +++ b/masq_lib/src/messages.rs @@ -6,9 +6,9 @@ use crate::shared_schema::ConfiguratorError; use crate::ui_gateway::MessagePath::{Conversation, FireAndForget}; use crate::ui_gateway::{MessageBody, MessagePath}; use itertools::Itertools; +use serde::__private::fmt::Error; +use serde::__private::Formatter; use serde::de::DeserializeOwned; -use serde::export::fmt::Error; -use serde::export::Formatter; use serde_derive::{Deserialize, Serialize}; use std::collections::HashMap; use std::fmt; diff --git a/masq_lib/src/multi_config.rs b/masq_lib/src/multi_config.rs index 461de97c5..2490a6934 100644 --- a/masq_lib/src/multi_config.rs +++ b/masq_lib/src/multi_config.rs @@ -6,7 +6,7 @@ use crate::utils::WrapResult; use clap::{value_t, values_t}; use clap::{App, ArgMatches}; use regex::Regex; -use serde::export::Formatter; +use serde::__private::Formatter; use std::collections::HashSet; use std::fmt::{Debug, Display}; use std::fs::File; diff --git a/multinode_integration_tests/Cargo.toml b/multinode_integration_tests/Cargo.toml index b4404f9fe..30b2cb297 100644 --- a/multinode_integration_tests/Cargo.toml +++ b/multinode_integration_tests/Cargo.toml @@ -9,24 +9,24 @@ edition = "2021" workspace = "../node" [dependencies] -base64 = "0.10.1" -crossbeam-channel = "0.5.0" +base64 = "0.13.0" +crossbeam-channel = "0.5.1" ethereum-types = "0.6.0" -ethsign-crypto = "0.1.0" -futures = "0.1.28" -itertools = "0.8.0" +ethsign-crypto = "0.2.1" +futures = "0.1.31" +itertools = "0.10.1" masq_lib = { path = "../masq_lib" } pretty-hex = "0.1.0" primitive-types = {version = "0.5.0", default-features = false, features = ["default", "rlp", "serde"] } -regex = "1.2.1" +regex = "1.5.4" rusqlite = {version = "0.20.0", features = ["bundled"]} rustc-hex = "2.0.1" -serde = "1.0.99" -serde_derive = "1.0.99" +serde = "1.0.130" +serde_derive = "1.0.130" serde_cbor = "0.10.1" sha1 = "0.6.0" tiny-bip39 = "0.6.2" -tiny-hderive = "0.2.1" +tiny-hderive = "0.3.0" native-tls = "0.2.3" node = { path = "../node", features = [ "expose_test_privates" ] } uint = "0.8.1" diff --git a/node/Cargo.lock b/node/Cargo.lock index bce9e7d85..044dc1735 100644 --- a/node/Cargo.lock +++ b/node/Cargo.lock @@ -10,13 +10,13 @@ checksum = "6c616db5fa4b0c40702fb75201c2af7f8aa8f3a2e2c1dda3b0655772aa949666" dependencies = [ "actix_derive", "bitflags", - "bytes", + "bytes 0.4.12", "crossbeam-channel 0.3.9", "failure", "fnv", "futures", "libc", - "log 0.4.11", + "log 0.4.14", "parking_lot 0.7.1", "smallvec 0.6.13", "tokio", @@ -45,9 +45,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.13.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ "gimli", ] @@ -94,9 +94,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.14" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b476ce7103678b0c6d3d395dbbae31d48ff910bd28be979ba5d48c6351131d0d" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" dependencies = [ "memchr", ] @@ -162,11 +162,12 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "backtrace" -version = "0.3.53" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707b586e0e2f247cbde68cdd2c3ce69ea7b7be43e1c5b426e37c9319c4b9838e" +checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6" dependencies = [ "addr2line", + "cc", "cfg-if 1.0.0", "libc", "miniz_oxide", @@ -205,11 +206,17 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + [[package]] name = "bitflags" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitvec" @@ -298,9 +305,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "byteorder" -version = "1.3.4" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" @@ -313,11 +320,17 @@ dependencies = [ "iovec", ] +[[package]] +name = "bytes" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" + [[package]] name = "cc" -version = "1.0.41" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dae9c4b8fedcae85592ba623c4fd08cfdab3e3b72d6df780c6ead964a69bfff" +checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" [[package]] name = "cfg-if" @@ -419,7 +432,7 @@ dependencies = [ "cookie", "failure", "idna 0.1.5", - "log 0.4.11", + "log 0.4.14", "publicsuffix", "serde", "serde_json", @@ -430,35 +443,35 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.6.4" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" dependencies = [ - "core-foundation-sys 0.6.2", + "core-foundation-sys 0.7.0", "libc", ] [[package]] name = "core-foundation" -version = "0.7.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3" dependencies = [ - "core-foundation-sys 0.7.0", + "core-foundation-sys 0.8.3", "libc", ] [[package]] name = "core-foundation-sys" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "core-foundation-sys" -version = "0.7.0" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "crc32fast" @@ -490,9 +503,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils 0.8.0", @@ -520,7 +533,7 @@ dependencies = [ "crossbeam-utils 0.7.2", "lazy_static", "maybe-uninit", - "memoffset", + "memoffset 0.5.6", "scopeguard 1.1.0", ] @@ -591,7 +604,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" dependencies = [ "generic-array 0.12.3", - "subtle", + "subtle 1.0.0", ] [[package]] @@ -606,11 +619,11 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.1.9" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "232295399409a8b7ae41276757b5a1cc21032848d42bff2352261f958b3ca29a" +checksum = "a19c6cedffdc8c03a3346d723eb20bd85a13362bb96dc2ac000842c6381ec7bf" dependencies = [ - "nix 0.20.0", + "nix 0.23.0", "winapi 0.3.9", ] @@ -649,7 +662,7 @@ checksum = "8d2d6daefd5f1d4b74a891a5d2ab7dccba028d423107c074232a0c5dc0d40a9e" dependencies = [ "data-encoding", "proc-macro-hack", - "syn 1.0.45", + "syn 1.0.67", ] [[package]] @@ -691,7 +704,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" dependencies = [ "libc", - "redox_users", + "redox_users 0.3.5", "winapi 0.3.9", ] @@ -705,14 +718,23 @@ dependencies = [ "dirs-sys", ] +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs-sys" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" +checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" dependencies = [ "libc", - "redox_users", + "redox_users 0.4.0", "winapi 0.3.9", ] @@ -822,23 +844,23 @@ dependencies = [ [[package]] name = "ethsign" -version = "0.6.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d29647713ba24ade587139ab8ac200e390ecb49df1e1010f1b2e45e9a0e5e3" +checksum = "b656fefa0b59f41b39000532c69359e927c0f1850186808ccf1586734ac3365f" dependencies = [ "ethsign-crypto", - "libsecp256k1", - "memzero", - "rand 0.6.5", + "libsecp256k1 0.3.5", + "rand 0.7.3", "rustc-hex", "serde", + "zeroize", ] [[package]] name = "ethsign-crypto" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0239998cf14901be86d9b30391fe873da495a80ae848016da4b8ff7cacbbc717" +checksum = "4e62e068d05d580a2504f51e2a242a9ea4a0cd2a6ba378e13de390efcc1b1753" dependencies = [ "aes-ctr", "hmac 0.7.1", @@ -866,7 +888,7 @@ checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.45", + "syn 1.0.67", "synstructure", ] @@ -890,9 +912,9 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fdlimit" -version = "0.1.4" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da54a593b34c71b889ee45f5b5bb900c74148c5f7f8c6a9479ee7899f69603c" +checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b" dependencies = [ "libc", ] @@ -943,7 +965,7 @@ dependencies = [ "chrono", "flate2", "glob", - "log 0.4.11", + "log 0.4.14", "regex", "yansi", ] @@ -993,9 +1015,9 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futures" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7e4c2612746b0df8fed4ce0c69156021b704c9aefa360311c04e6e9e002eed" +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" [[package]] name = "futures-cpupool" @@ -1037,11 +1059,22 @@ dependencies = [ "wasi 0.9.0+wasi-snapshot-preview1", ] +[[package]] +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", +] + [[package]] name = "gimli" -version = "0.22.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" +checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[package]] name = "glob" @@ -1056,12 +1089,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" dependencies = [ "byteorder", - "bytes", + "bytes 0.4.12", "fnv", "futures", - "http", + "http 0.1.21", "indexmap", - "log 0.4.11", + "log 0.4.14", "slab 0.4.2", "string", "tokio-io", @@ -1100,9 +1133,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" dependencies = [ "unicode-segmentation", ] @@ -1148,6 +1181,17 @@ dependencies = [ "hmac 0.4.2", ] +[[package]] +name = "hmac-drbg" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6e570451493f10f6581b48cdd530413b63ea9e780f544bfd3bdcaa0d89d1a7b" +dependencies = [ + "digest 0.8.1", + "generic-array 0.12.3", + "hmac 0.7.1", +] + [[package]] name = "hostname" version = "0.3.1" @@ -1165,7 +1209,18 @@ version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" dependencies = [ - "bytes", + "bytes 0.4.12", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b" +dependencies = [ + "bytes 1.1.0", "fnv", "itoa", ] @@ -1176,9 +1231,9 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" dependencies = [ - "bytes", + "bytes 0.4.12", "futures", - "http", + "http 0.1.21", "tokio-buf", ] @@ -1213,16 +1268,16 @@ version = "0.12.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" dependencies = [ - "bytes", + "bytes 0.4.12", "futures", "futures-cpupool", "h2", - "http", + "http 0.1.21", "http-body", "httparse", "iovec", "itoa", - "log 0.4.11", + "log 0.4.14", "net2", "rustc_version", "time", @@ -1243,7 +1298,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f" dependencies = [ - "bytes", + "bytes 0.4.12", "futures", "hyper 0.12.35", "native-tls", @@ -1320,24 +1375,10 @@ dependencies = [ [[package]] name = "indoc" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8" -dependencies = [ - "indoc-impl", - "proc-macro-hack", -] - -[[package]] -name = "indoc-impl" -version = "0.3.6" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0" +checksum = "e5a75aeaaef0ce18b58056d306c27b07436fbb34b8816c53094b76dd81803136" dependencies = [ - "proc-macro-hack", - "proc-macro2 1.0.24", - "quote 1.0.7", - "syn 1.0.45", "unindent", ] @@ -1377,9 +1418,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.8.2" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" +checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" dependencies = [ "either", ] @@ -1397,7 +1438,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b83fdc5e0218128d0d270f2f2e7a5ea716f3240c8518a58bc89e6716ba8581" dependencies = [ "futures", - "log 0.4.11", + "log 0.4.14", "serde", "serde_derive", "serde_json", @@ -1427,9 +1468,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.97" +version = "0.2.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6" +checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" [[package]] name = "libsecp256k1" @@ -1439,12 +1480,28 @@ checksum = "688e8d65e495567c2c35ea0001b26b9debf0b4ea11f8cccc954233b75fc3428a" dependencies = [ "arrayref", "digest 0.6.2", - "hmac-drbg", + "hmac-drbg 0.1.2", "rand 0.4.6", "sha2 0.6.0", "typenum", ] +[[package]] +name = "libsecp256k1" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962" +dependencies = [ + "arrayref", + "crunchy", + "digest 0.8.1", + "hmac-drbg 0.2.0", + "rand 0.7.3", + "sha2 0.8.2", + "subtle 2.4.1", + "typenum", +] + [[package]] name = "libsodium-sys" version = "0.2.6" @@ -1518,16 +1575,16 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" dependencies = [ - "log 0.4.11", + "log 0.4.14", ] [[package]] name = "log" -version = "0.4.11" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", ] [[package]] @@ -1544,12 +1601,12 @@ name = "masq" version = "1.0.0" dependencies = [ "clap", - "crossbeam-channel 0.5.0", + "crossbeam-channel 0.5.1", "ctrlc", "lazy_static", "linefeed", "masq_lib", - "nix 0.20.0", + "nix 0.23.0", "regex", "websocket", ] @@ -1561,10 +1618,10 @@ dependencies = [ "actix", "clap", "const_format", - "crossbeam-channel 0.5.0", + "crossbeam-channel 0.5.1", "itertools", "lazy_static", - "nix 0.20.0", + "nix 0.23.0", "regex", "serde", "serde_derive", @@ -1595,9 +1652,9 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" -version = "2.3.3" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "memoffset" @@ -1608,6 +1665,15 @@ dependencies = [ "autocfg 1.0.1", ] +[[package]] +name = "memoffset" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" +dependencies = [ + "autocfg 1.0.1", +] + [[package]] name = "memzero" version = "0.1.0" @@ -1661,7 +1727,7 @@ dependencies = [ "iovec", "kernel32-sys", "libc", - "log 0.4.11", + "log 0.4.14", "miow", "net2", "slab 0.4.2", @@ -1711,8 +1777,8 @@ dependencies = [ name = "multinode_integration_tests" version = "1.0.0" dependencies = [ - "base64 0.10.1", - "crossbeam-channel 0.5.0", + "base64 0.13.0", + "crossbeam-channel 0.5.1", "ethereum-types", "ethsign-crypto", "futures", @@ -1744,7 +1810,7 @@ checksum = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" dependencies = [ "lazy_static", "libc", - "log 0.4.11", + "log 0.4.14", "openssl", "openssl-probe", "openssl-sys", @@ -1786,14 +1852,15 @@ dependencies = [ [[package]] name = "nix" -version = "0.20.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a" +checksum = "f305c2c2e4c39a82f7bf0bf65fb557f9070ce06781d4f2454295cc34b1c43188" dependencies = [ "bitflags", "cc", "cfg-if 1.0.0", "libc", + "memoffset 0.6.4", ] [[package]] @@ -1803,14 +1870,14 @@ dependencies = [ "actix", "backtrace", "base58", - "base64 0.10.1", - "bytes", + "base64 0.13.0", + "bytes 0.4.12", "chrono", "clap", - "core-foundation 0.6.4", - "crossbeam-channel 0.5.0", + "core-foundation 0.9.2", + "crossbeam-channel 0.5.1", "daemonize", - "dirs 2.0.2", + "dirs 4.0.0", "ethereum-types", "ethsign", "ethsign-crypto", @@ -1818,18 +1885,18 @@ dependencies = [ "flexi_logger", "futures", "heck", - "http", + "http 0.2.5", "indoc", "ipconfig 0.2.2", "itertools", "jsonrpc-core", "lazy_static", "libc", - "libsecp256k1", - "log 0.4.11", + "libsecp256k1 0.2.2", + "log 0.4.14", "masq_lib", "native-tls", - "nix 0.20.0", + "nix 0.23.0", "openssl", "pretty-hex", "primitive-types 0.5.1", @@ -1861,7 +1928,7 @@ dependencies = [ "unindent", "web3", "websocket", - "winreg 0.7.0", + "winreg 0.10.1", ] [[package]] @@ -1920,9 +1987,12 @@ dependencies = [ [[package]] name = "object" -version = "0.21.1" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37fd5004feb2ce328a52b0b3d01dbf4ffff72583493900ed15f22d4111c51693" +checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" +dependencies = [ + "memchr", +] [[package]] name = "once_cell" @@ -2074,7 +2144,7 @@ dependencies = [ "cloudabi", "libc", "rand 0.6.5", - "redox_syscall", + "redox_syscall 0.1.57", "rustc_version", "smallvec 0.6.13", "winapi 0.3.9", @@ -2089,7 +2159,7 @@ dependencies = [ "cfg-if 0.1.10", "cloudabi", "libc", - "redox_syscall", + "redox_syscall 0.1.57", "rustc_version", "smallvec 0.6.13", "winapi 0.3.9", @@ -2327,7 +2397,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom", + "getrandom 0.1.15", "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", @@ -2376,7 +2446,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom", + "getrandom 0.1.15", ] [[package]] @@ -2499,34 +2569,52 @@ version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" +[[package]] +name = "redox_syscall" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_users" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" dependencies = [ - "getrandom", - "redox_syscall", + "getrandom 0.1.15", + "redox_syscall 0.1.57", "rust-argon2", ] +[[package]] +name = "redox_users" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +dependencies = [ + "getrandom 0.2.3", + "redox_syscall 0.2.10", +] + [[package]] name = "regex" -version = "1.4.1" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8963b85b8ce3074fecffde43b4b0dded83ce2f367dc8d363afc56679f3ee820b" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" dependencies = [ "aho-corasick", "memchr", "regex-syntax", - "thread_local", ] [[package]] name = "regex-syntax" -version = "0.6.20" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cab7a364d15cde1e505267766a2d3c4e22a843e1a601f0fa7564c0f82ced11c" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "remove_dir_all" @@ -2544,16 +2632,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" dependencies = [ "base64 0.10.1", - "bytes", + "bytes 0.4.12", "cookie", "cookie_store", "encoding_rs", "flate2", "futures", - "http", + "http 0.1.21", "hyper 0.12.35", "hyper-tls", - "log 0.4.11", + "log 0.4.14", "mime 0.3.16", "mime_guess", "native-tls", @@ -2707,7 +2795,7 @@ dependencies = [ "pbkdf2", "rand 0.5.6", "sha2 0.8.2", - "subtle", + "subtle 1.0.0", ] [[package]] @@ -2750,9 +2838,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.117" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" dependencies = [ "serde_derive", ] @@ -2770,20 +2858,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.117" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.45", + "syn 1.0.67", ] [[package]] name = "serde_json" -version = "1.0.59" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +checksum = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8" dependencies = [ "itoa", "ryu", @@ -2880,7 +2968,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b47624fcb3e3416bd7f764b2319875043ce22b0eff78f5c7684de07c88ba5761" dependencies = [ - "http", + "http 0.1.21", "httparse", "log 0.3.9", "num_cpus", @@ -2938,7 +3026,7 @@ checksum = "b1fa70dc5c8104ec096f4fe7ede7a221d35ae13dcd19ba1ad9a81d2cab9a1c44" dependencies = [ "cfg-if 0.1.10", "libc", - "redox_syscall", + "redox_syscall 0.1.57", "winapi 0.3.9", ] @@ -2986,7 +3074,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" dependencies = [ - "bytes", + "bytes 0.4.12", ] [[package]] @@ -3001,6 +3089,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + [[package]] name = "syn" version = "0.15.44" @@ -3014,9 +3108,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.45" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea9c5432ff16d6152371f808fb5a871cd67368171b09bb21b43df8e4a47a3556" +checksum = "6498a9efc342871f91cc2d0d694c674368b4ceb40f62b65a7a08c3792935e702" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", @@ -3031,7 +3125,7 @@ checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" dependencies = [ "proc-macro2 1.0.24", "quote 1.0.7", - "syn 1.0.45", + "syn 1.0.67", "unicode-xid 0.2.1", ] @@ -3052,21 +3146,22 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3dc3e701a89dd6764083d19f048b57ec01c26d0904ff8108a507059a6462e6" +checksum = "dd4bc0637a2b8c0b1a5145cca3e21b707865edc7e32285771536af1ade129468" dependencies = [ - "core-foundation 0.6.4", + "bitflags", + "core-foundation 0.7.0", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfd906a2882d54084bfdf517bf03892ac06820f1c0a3d37e48609f334798ad99" +checksum = "269e271436d8e4bb2621c535a11fe03d5d012f74b19af72f80288f3a72f6180a" dependencies = [ - "core-foundation-sys 0.6.2", + "core-foundation-sys 0.7.0", "libc", ] @@ -3079,7 +3174,7 @@ dependencies = [ "cfg-if 0.1.10", "libc", "rand 0.7.3", - "redox_syscall", + "redox_syscall 0.1.57", "remove_dir_all", "winapi 0.3.9", ] @@ -3106,15 +3201,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "thread_local" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" -dependencies = [ - "lazy_static", -] - [[package]] name = "time" version = "0.1.44" @@ -3143,13 +3229,13 @@ dependencies = [ [[package]] name = "tiny-hderive" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843479427369dcfdf7c56ff1d1a2bbeca4c15b390ed493f84c77fe08a43eae68" +checksum = "01b874a4992538d4b2f4fbbac11b9419d685f4b39bdc3fed95b04e07bfd76040" dependencies = [ "base58", "hmac 0.7.1", - "libsecp256k1", + "libsecp256k1 0.3.5", "memzero", "sha2 0.8.2", ] @@ -3175,7 +3261,7 @@ version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" dependencies = [ - "bytes", + "bytes 0.4.12", "futures", "mio", "num_cpus", @@ -3199,7 +3285,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" dependencies = [ - "bytes", + "bytes 0.4.12", "either", "futures", ] @@ -3210,7 +3296,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" dependencies = [ - "bytes", + "bytes 0.4.12", "futures", "tokio-io", ] @@ -3221,10 +3307,10 @@ version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aeeffbbb94209023feaef3c196a41cbcdafa06b4a6f893f68779bb5e53796f71" dependencies = [ - "bytes", + "bytes 0.4.12", "futures", "iovec", - "log 0.4.11", + "log 0.4.14", "mio", "scoped-tls", "tokio", @@ -3271,9 +3357,9 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" dependencies = [ - "bytes", + "bytes 0.4.12", "futures", - "log 0.4.11", + "log 0.4.14", ] [[package]] @@ -3285,7 +3371,7 @@ dependencies = [ "crossbeam-utils 0.7.2", "futures", "lazy_static", - "log 0.4.11", + "log 0.4.14", "mio", "num_cpus", "parking_lot 0.9.0", @@ -3328,7 +3414,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" dependencies = [ - "bytes", + "bytes 0.4.12", "futures", "iovec", "mio", @@ -3347,7 +3433,7 @@ dependencies = [ "crossbeam-utils 0.7.2", "futures", "lazy_static", - "log 0.4.11", + "log 0.4.14", "num_cpus", "slab 0.4.2", "tokio-executor", @@ -3381,9 +3467,9 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" dependencies = [ - "bytes", + "bytes 0.4.12", "futures", - "log 0.4.11", + "log 0.4.14", "mio", "tokio-codec", "tokio-io", @@ -3396,11 +3482,11 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0" dependencies = [ - "bytes", + "bytes 0.4.12", "futures", "iovec", "libc", - "log 0.4.11", + "log 0.4.14", "mio", "mio-uds", "tokio-codec", @@ -3410,9 +3496,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" dependencies = [ "serde", ] @@ -3435,7 +3521,7 @@ dependencies = [ "failure", "futures", "lazy_static", - "log 0.4.11", + "log 0.4.14", "radix_trie", "rand 0.7.3", "tokio", @@ -3455,7 +3541,7 @@ dependencies = [ "futures", "idna 0.1.5", "lazy_static", - "log 0.4.11", + "log 0.4.14", "rand 0.5.6", "smallvec 0.6.13", "socket2", @@ -3479,7 +3565,7 @@ dependencies = [ "futures", "idna 0.1.5", "lazy_static", - "log 0.4.11", + "log 0.4.14", "rand 0.5.6", "smallvec 0.6.13", "socket2", @@ -3504,7 +3590,7 @@ dependencies = [ "futures", "idna 0.2.0", "lazy_static", - "log 0.4.11", + "log 0.4.14", "rand 0.7.3", "smallvec 0.6.13", "socket2", @@ -3528,7 +3614,7 @@ dependencies = [ "futures", "ipconfig 0.1.9", "lazy_static", - "log 0.4.11", + "log 0.4.14", "lru-cache", "resolv-conf", "smallvec 0.6.13", @@ -3547,7 +3633,7 @@ dependencies = [ "futures", "ipconfig 0.2.2", "lazy_static", - "log 0.4.11", + "log 0.4.14", "lru-cache", "resolv-conf", "smallvec 0.6.13", @@ -3743,7 +3829,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" dependencies = [ "futures", - "log 0.4.11", + "log 0.4.14", "try-lock", ] @@ -3774,7 +3860,7 @@ dependencies = [ "hyper 0.12.35", "hyper-tls", "jsonrpc-core", - "log 0.4.11", + "log 0.4.14", "native-tls", "parking_lot 0.8.0", "rustc-hex", @@ -3791,7 +3877,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "723abe6b75286edc51d8ecabb38a2353f62a9e9b0588998b59111474f1dcd637" dependencies = [ - "bytes", + "bytes 0.4.12", "futures", "hyper 0.10.16", "rand 0.6.5", @@ -3813,7 +3899,7 @@ dependencies = [ "base64 0.10.1", "bitflags", "byteorder", - "bytes", + "bytes 0.4.12", "futures", "rand 0.6.5", "sha-1", @@ -3888,9 +3974,9 @@ dependencies = [ [[package]] name = "winreg" -version = "0.7.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" dependencies = [ "winapi 0.3.9", ] @@ -3910,3 +3996,9 @@ name = "yansi" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71" + +[[package]] +name = "zeroize" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d68d9dcec5f9b43a30d38c49f91dfedfaac384cb8f085faca366c26207dd1619" diff --git a/node/Cargo.toml b/node/Cargo.toml index b4b5a1d46..0cbdb644a 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -12,66 +12,66 @@ members = ["../multinode_integration_tests", "../masq_lib", "../masq"] [dependencies] actix = "= 0.7.9" -backtrace = "0.3.35" -base64 = "0.10.1" +backtrace = "0.3.62" +base64 = "0.13.0" bytes = "0.4.12" -chrono = "0.4.7" +chrono = "0.4.19" clap = "2.33.3" -crossbeam-channel = "0.5.0" -dirs = "2.0.2" -ethsign = {version = "0.6.1", default-features = false, features = ["pure-rust"]} -ethsign-crypto = "0.1.0" +crossbeam-channel = "0.5.1" +dirs = "4.0.0" +ethsign = {version = "0.7.3", default-features = false, features = ["pure-rust"]} +ethsign-crypto = "0.2.1" ethereum-types = "0.6.0" -fdlimit = "0.1.1" +fdlimit = "0.2.1" flexi_logger = { version = "0.14.1", features = [ "ziplogs" ] } -futures = "0.1.28" -heck = "0.3.1" -http = "0.1.18" -indoc = "0.3.4" -itertools = "0.8.0" +futures = "0.1.31" +heck = "0.3.3" +http = "0.2.5" +indoc = "1.0.3" +itertools = "0.10.1" lazy_static = "1.4.0" -libc = "0.2.69" +libc = "0.2.107" libsecp256k1 = "0.2.2" -log = "0.4.8" +log = "0.4.14" masq_lib = { path = "../masq_lib"} pretty-hex = "0.1.0" primitive-types = {version = "0.5.0", default-features = false, features = ["default", "rlp", "serde"]} rand = {version = "0.7.0", features = ["getrandom", "small_rng"]} -regex = "1.0.5" +regex = "1.5.4" rlp = "0.4.2" rpassword = "4.0.1" rusqlite = {version = "0.20.0", features = ["bundled"]} rustc-hex = "2.0.1" -serde = "1.0.99" -serde_derive = "1.0.99" -serde_json = "1.0.40" +serde = "1.0.130" +serde_derive = "1.0.130" +serde_json = "1.0.69" serde_cbor = "0.10.1" sha1 = "0.6.0" sodiumoxide = "0.2.2" sysinfo = "0.15.0" tiny-bip39 = "0.6.2" -tiny-hderive = "0.2.1" +tiny-hderive = "0.3.0" tokio = "0.1.22" tokio-core = "0.1.17" -toml = "0.5.3" +toml = "0.5.8" trust-dns = "0.17.0" trust-dns-resolver = "0.12.0" unindent = "0.1.4" web3 = {version = "0.8.0", default-features = false, features = ["http", "tls"]} -websocket = {version = "0.26.0", default-features = false, features = ["async", "sync"]} +websocket = {version = "0.26.2", default-features = false, features = ["async", "sync"]} [target.'cfg(target_os = "macos")'.dependencies] -system-configuration = "0.3.0" -core-foundation = "0.6.4" +system-configuration = "0.4.0" +core-foundation = "0.9.2" [target.'cfg(not(target_os = "windows"))'.dependencies] daemonize = "0.4.1" -nix = "0.20.0" +nix = "0.23.0" openssl = {version = "0.10.24", features = ["vendored"]} [target.'cfg(target_os = "windows")'.dependencies] -winreg = "0.7.0" -ipconfig = "0.2.1" +winreg = "0.10.1" +ipconfig = "0.2.2" [dev-dependencies] base58 = "0.1.0" diff --git a/node/src/blockchain/bip32.rs b/node/src/blockchain/bip32.rs index 67f4384ae..eafeca246 100644 --- a/node/src/blockchain/bip32.rs +++ b/node/src/blockchain/bip32.rs @@ -70,7 +70,7 @@ impl Bip32ECKeyPair { pub fn clone_secret(&self) -> SecretKey { match self.secret.to_crypto( &Protected::from("secret"), - NonZeroU32::new(1).expect("Could not create"), + u32::from(NonZeroU32::new(1).expect("Could not create")), ) { Ok(crypto) => match SecretKey::from_crypto(&crypto, &Protected::from("secret")) { Ok(secret) => secret, @@ -131,7 +131,7 @@ impl Serialize for Bip32ECKeyPair { .secret .to_crypto( &Protected::from("secret"), - NonZeroU32::new(1).expect("Could not create"), + u32::from(NonZeroU32::new(1).expect("Could not create")), ) .map_err(ser::Error::custom)?; result.serialize(serializer) diff --git a/node/src/blockchain/bip39.rs b/node/src/blockchain/bip39.rs index afa6aeebc..5b8f28e36 100644 --- a/node/src/blockchain/bip39.rs +++ b/node/src/blockchain/bip39.rs @@ -33,7 +33,7 @@ impl Bip39 { match Crypto::encrypt( seed.as_ref(), &Protected::new(db_password.as_bytes()), - NonZeroU32::new(10240).expect("Internal error"), + u32::from(NonZeroU32::new(10240).expect("Internal error")), ) { Ok(crypto) => match serde_cbor::to_vec(&crypto) { Ok(cipher_seed) => Ok(cipher_seed.to_hex()), diff --git a/node/src/discriminator.rs b/node/src/discriminator.rs index 910d467e5..3a3e5318d 100644 --- a/node/src/discriminator.rs +++ b/node/src/discriminator.rs @@ -2,7 +2,7 @@ use crate::masquerader::{MasqueradeError, Masquerader}; use crate::sub_lib::framer::Framer; use crate::sub_lib::logger::Logger; -use serde::export::fmt::Debug; +use serde::__private::fmt::Debug; #[derive(Debug, PartialEq, Clone)] pub struct UnmaskedChunk { diff --git a/node/src/sub_lib/wallet.rs b/node/src/sub_lib/wallet.rs index 6f03d0733..c6d2d5927 100644 --- a/node/src/sub_lib/wallet.rs +++ b/node/src/sub_lib/wallet.rs @@ -263,7 +263,7 @@ impl TryInto for Wallet { } impl<'de> serde::Deserialize<'de> for Wallet { - fn deserialize(deserializer: D) -> serde::export::Result + fn deserialize(deserializer: D) -> serde::__private::Result where D: serde::Deserializer<'de>, { @@ -276,44 +276,44 @@ impl<'de> serde::Deserialize<'de> for Wallet { type Value = WalletField; fn expecting( &self, - formatter: &mut serde::export::Formatter, - ) -> serde::export::fmt::Result { - serde::export::Formatter::write_str(formatter, "field identifier") + formatter: &mut serde::__private::Formatter, + ) -> serde::__private::fmt::Result { + serde::__private::Formatter::write_str(formatter, "field identifier") } - fn visit_u64(self, value: u64) -> serde::export::Result + fn visit_u64(self, value: u64) -> serde::__private::Result where E: serde::de::Error, { match value { - 0u64 => serde::export::Ok(WalletField::Address), - _ => serde::export::Err(serde::de::Error::invalid_value( + 0u64 => serde::__private::Ok(WalletField::Address), + _ => serde::__private::Err(serde::de::Error::invalid_value( serde::de::Unexpected::Unsigned(value), &"field index 0 <= i < 1", )), } } - fn visit_str(self, value: &str) -> serde::export::Result + fn visit_str(self, value: &str) -> serde::__private::Result where E: serde::de::Error, { match value { - "address" => serde::export::Ok(WalletField::Address), - _ => serde::export::Ok(WalletField::__Ignore), + "address" => serde::__private::Ok(WalletField::Address), + _ => serde::__private::Ok(WalletField::__Ignore), } } - fn visit_bytes(self, value: &[u8]) -> serde::export::Result + fn visit_bytes(self, value: &[u8]) -> serde::__private::Result where E: serde::de::Error, { match value { - b"address" => serde::export::Ok(WalletField::Address), - _ => serde::export::Ok(WalletField::__Ignore), + b"address" => serde::__private::Ok(WalletField::Address), + _ => serde::__private::Ok(WalletField::__Ignore), } } } impl<'de> serde::Deserialize<'de> for WalletField { #[inline] - fn deserialize(deserializer: D) -> serde::export::Result + fn deserialize(deserializer: D) -> serde::__private::Result where D: serde::Deserializer<'de>, { @@ -321,64 +321,65 @@ impl<'de> serde::Deserialize<'de> for Wallet { } } struct WalletVisitor<'de> { - marker: serde::export::PhantomData, - lifetime: serde::export::PhantomData<&'de ()>, + marker: serde::__private::PhantomData, + lifetime: serde::__private::PhantomData<&'de ()>, human_readable: bool, } impl<'de> serde::de::Visitor<'de> for WalletVisitor<'de> { type Value = Wallet; fn expecting( &self, - formatter: &mut serde::export::Formatter, - ) -> serde::export::fmt::Result { - serde::export::Formatter::write_str(formatter, "struct Wallet") + formatter: &mut serde::__private::Formatter, + ) -> serde::__private::fmt::Result { + serde::__private::Formatter::write_str(formatter, "struct Wallet") } #[inline] - fn visit_seq(self, mut seq: A) -> serde::export::Result + fn visit_seq(self, mut seq: A) -> serde::__private::Result where A: serde::de::SeqAccess<'de>, { let address = match serde::de::SeqAccess::next_element::
(&mut seq)? { - serde::export::Some(address) => address, - serde::export::None => { - return serde::export::Err(serde::de::Error::invalid_length( + serde::__private::Some(address) => address, + serde::__private::None => { + return serde::__private::Err(serde::de::Error::invalid_length( 0usize, &"struct Wallet with 1 element", )); } }; - serde::export::Ok(Wallet { + serde::__private::Ok(Wallet { kind: WalletKind::Address(address), }) } #[inline] - fn visit_map(self, mut map: A) -> serde::export::Result + fn visit_map(self, mut map: A) -> serde::__private::Result where A: serde::de::MapAccess<'de>, { - let mut possible_address: serde::export::Option
= serde::export::None; - while let serde::export::Some(key) = + let mut possible_address: serde::__private::Option
= + serde::__private::None; + while let serde::__private::Some(key) = serde::de::MapAccess::next_key::(&mut map)? { match key { WalletField::Address => { - if serde::export::Option::is_some(&possible_address) { - return serde::export::Err( + if serde::__private::Option::is_some(&possible_address) { + return serde::__private::Err( ::duplicate_field("address"), ); } possible_address = match &self.human_readable { - true => { - serde::export::Some( - serde::de::MapAccess::next_value::
(&mut map)?, - ) - } + true => serde::__private::Some(serde::de::MapAccess::next_value::< + Address, + >( + &mut map + )?), false => { let bytes = serde::de::MapAccess::next_value::>(&mut map)?; let mut address = [0u8; 20]; address.copy_from_slice(bytes.as_slice()); - serde::export::Some(Address { 0: address }) + serde::__private::Some(Address { 0: address }) } } } @@ -390,10 +391,10 @@ impl<'de> serde::Deserialize<'de> for Wallet { } } let address = match possible_address { - serde::export::Some(address) => address, - serde::export::None => serde::private::de::missing_field("address")?, + serde::__private::Some(address) => address, + serde::__private::None => serde::__private::de::missing_field("address")?, }; - serde::export::Ok(Wallet { + serde::__private::Ok(Wallet { kind: WalletKind::Address(address), }) } @@ -405,8 +406,8 @@ impl<'de> serde::Deserialize<'de> for Wallet { "Wallet", FIELDS, WalletVisitor { - marker: serde::export::PhantomData::, - lifetime: serde::export::PhantomData, + marker: serde::__private::PhantomData::, + lifetime: serde::__private::PhantomData, human_readable, }, ) From dfd773fe56caba5639879fea6e7d7231b25b59b5 Mon Sep 17 00:00:00 2001 From: FinsaasGH Date: Fri, 12 Nov 2021 09:43:30 -0700 Subject: [PATCH 12/17] GH-496: Updated more dependencies, first actions run --- multinode_integration_tests/Cargo.toml | 16 +- .../tests/verify_bill_payment.rs | 9 +- node/Cargo.lock | 1159 ++++++++++++----- node/Cargo.toml | 36 +- node/src/accountant/payable_dao.rs | 14 +- node/src/accountant/receivable_dao.rs | 17 +- node/src/banned_dao.rs | 13 +- node/src/blockchain/raw_transaction.rs | 2 +- node/src/blockchain/test_utils.rs | 2 +- node/src/daemon/launch_verifier.rs | 8 +- node/src/database/db_initializer.rs | 41 +- node/src/database/db_migrations.rs | 26 +- node/src/db_config/config_dao.rs | 4 +- node/src/node_configurator/configurator.rs | 2 +- node/src/proxy_client/local_test_utils.rs | 2 +- node/src/test_utils/database_utils.rs | 6 +- node/tests/initialization_test.rs | 4 +- 17 files changed, 919 insertions(+), 442 deletions(-) diff --git a/multinode_integration_tests/Cargo.toml b/multinode_integration_tests/Cargo.toml index 30b2cb297..c053888e8 100644 --- a/multinode_integration_tests/Cargo.toml +++ b/multinode_integration_tests/Cargo.toml @@ -16,20 +16,20 @@ ethsign-crypto = "0.2.1" futures = "0.1.31" itertools = "0.10.1" masq_lib = { path = "../masq_lib" } -pretty-hex = "0.1.0" +pretty-hex = "0.2.1" primitive-types = {version = "0.5.0", default-features = false, features = ["default", "rlp", "serde"] } regex = "1.5.4" -rusqlite = {version = "0.20.0", features = ["bundled"]} -rustc-hex = "2.0.1" +rusqlite = {version = "0.26.1", features = ["bundled"]} +rustc-hex = "2.1.0" serde = "1.0.130" serde_derive = "1.0.130" -serde_cbor = "0.10.1" +serde_cbor = "0.11.2" sha1 = "0.6.0" -tiny-bip39 = "0.6.2" +tiny-bip39 = "0.8.2" tiny-hderive = "0.3.0" -native-tls = "0.2.3" +native-tls = "0.2.8" node = { path = "../node", features = [ "expose_test_privates" ] } -uint = "0.8.1" +uint = "0.9.1" web3 = {version = "0.8.0", default-features = false, features = ["http", "tls"]} [lib] @@ -41,4 +41,4 @@ name = "mock_node" path = "src/main.rs" [dev-dependencies] -reqwest = "0.9.19" +reqwest = "0.11.6" diff --git a/multinode_integration_tests/tests/verify_bill_payment.rs b/multinode_integration_tests/tests/verify_bill_payment.rs index 4cdc53418..8a65a9eb7 100644 --- a/multinode_integration_tests/tests/verify_bill_payment.rs +++ b/multinode_integration_tests/tests/verify_bill_payment.rs @@ -20,7 +20,6 @@ use node_lib::blockchain::raw_transaction::RawTransaction; use node_lib::database::db_initializer::{DbInitializer, DbInitializerReal}; use node_lib::sub_lib::wallet::Wallet; use node_lib::test_utils; -use rusqlite::NO_PARAMS; use rustc_hex::{FromHex, ToHex}; use std::convert::TryFrom; use std::path::{Path, PathBuf}; @@ -390,12 +389,12 @@ fn expire_payables(path: PathBuf, chain: Chain) { "update payable set last_paid_timestamp = 0 where pending_payment_transaction is null", ) .unwrap(); - statement.execute(NO_PARAMS).unwrap(); + statement.execute([]).unwrap(); let mut config_stmt = conn .prepare("update config set value = '0' where name = 'start_block'") .unwrap(); - config_stmt.execute(NO_PARAMS).unwrap(); + config_stmt.execute([]).unwrap(); } fn expire_receivables(path: PathBuf, chain: Chain) { @@ -405,12 +404,12 @@ fn expire_receivables(path: PathBuf, chain: Chain) { let mut statement = conn .prepare("update receivable set last_received_timestamp = 0") .unwrap(); - statement.execute(NO_PARAMS).unwrap(); + statement.execute([]).unwrap(); let mut config_stmt = conn .prepare("update config set value = '0' where name = 'start_block'") .unwrap(); - config_stmt.execute(NO_PARAMS).unwrap(); + config_stmt.execute([]).unwrap(); } fn open_all_file_permissions(dir: PathBuf) { diff --git a/node/Cargo.lock b/node/Cargo.lock index 044dc1735..796e3a003 100644 --- a/node/Cargo.lock +++ b/node/Cargo.lock @@ -19,7 +19,7 @@ dependencies = [ "log 0.4.14", "parking_lot 0.7.1", "smallvec 0.6.13", - "tokio", + "tokio 0.1.22", "tokio-codec", "tokio-executor", "tokio-io", @@ -78,7 +78,7 @@ checksum = "cfd7e7ae3f9a1fb5c03b389fc6bb9a51400d0c13053f0dca698c832bfd893a0d" dependencies = [ "block-cipher-trait", "byteorder", - "opaque-debug", + "opaque-debug 0.2.3", ] [[package]] @@ -88,10 +88,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f70a6b5f971e473091ab7cfb5ffac6cde81666c4556751d8d5620ead8abf100" dependencies = [ "block-cipher-trait", - "opaque-debug", + "opaque-debug 0.2.3", "stream-cipher", ] +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom 0.2.3", + "once_cell", + "version_check 0.9.2", +] + [[package]] name = "aho-corasick" version = "0.7.18" @@ -110,6 +121,12 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "anyhow" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee10e43ae4a853c0a3591d4e2ada1719e553be18199d9da9d4a83f5927c2f5c7" + [[package]] name = "arc-swap" version = "0.4.7" @@ -181,6 +198,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" +[[package]] +name = "base58" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" + [[package]] name = "base64" version = "0.9.3" @@ -241,24 +264,23 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.2.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1339a1042f5d9f295737ad4d9a6ab6bf81c84a933dba110b9200cd6d1448b814" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "byte-tools 0.2.0", - "generic-array 0.8.3", + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.3", ] [[package]] name = "block-buffer" -version = "0.7.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "block-padding", - "byte-tools 0.3.1", - "byteorder", - "generic-array 0.12.3", + "generic-array 0.14.4", ] [[package]] @@ -276,7 +298,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" dependencies = [ - "byte-tools 0.3.1", + "byte-tools", ] [[package]] @@ -286,16 +308,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5988cb1d626264ac94100be357308f29ff7cbdd3b36bda27f450a4ee3f713426" [[package]] -name = "byte-slice-cast" -version = "0.3.5" +name = "bumpalo" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0a5e3906bcbf133e33c1d4d95afc664ad37fbdb9f6568d8043e7ea8c27d93d3" +checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" [[package]] -name = "byte-tools" -version = "0.2.0" +name = "byte-slice-cast" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" +checksum = "b0a5e3906bcbf133e33c1d4d95afc664ad37fbdb9f6568d8043e7ea8c27d93d3" [[package]] name = "byte-tools" @@ -381,12 +403,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "const_fn" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce90df4c658c62f12d78f7508cf92f9173e5184a539c10bfe54a3107b3ffd0f2" - [[package]] name = "const_format" version = "0.2.22" @@ -413,34 +429,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" -[[package]] -name = "cookie" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" -dependencies = [ - "time", - "url 1.7.2", -] - -[[package]] -name = "cookie_store" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c" -dependencies = [ - "cookie", - "failure", - "idna 0.1.5", - "log 0.4.14", - "publicsuffix", - "serde", - "serde_json", - "time", - "try_from", - "url 1.7.2", -] - [[package]] name = "core-foundation" version = "0.7.0" @@ -473,6 +461,15 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +[[package]] +name = "cpufeatures" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.2.0" @@ -491,16 +488,6 @@ dependencies = [ "crossbeam-utils 0.6.6", ] -[[package]] -name = "crossbeam-channel" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" -dependencies = [ - "crossbeam-utils 0.7.2", - "maybe-uninit", -] - [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -508,7 +495,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" dependencies = [ "cfg-if 1.0.0", - "crossbeam-utils 0.8.0", + "crossbeam-utils 0.8.5", ] [[package]] @@ -517,11 +504,22 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" dependencies = [ - "crossbeam-epoch", + "crossbeam-epoch 0.8.2", "crossbeam-utils 0.7.2", "maybe-uninit", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch 0.9.5", + "crossbeam-utils 0.8.5", +] + [[package]] name = "crossbeam-epoch" version = "0.8.2" @@ -537,6 +535,19 @@ dependencies = [ "scopeguard 1.1.0", ] +[[package]] +name = "crossbeam-epoch" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils 0.8.5", + "lazy_static", + "memoffset 0.6.4", + "scopeguard 1.1.0", +] + [[package]] name = "crossbeam-queue" version = "0.2.3" @@ -571,13 +582,11 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.0" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec91540d98355f690a86367e566ecad2e9e579f230230eb7c21398372be73ea5" +checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" dependencies = [ - "autocfg 1.0.1", "cfg-if 1.0.0", - "const_fn", "lazy_static", ] @@ -589,22 +598,22 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-mac" -version = "0.4.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779015233ac67d65098614aec748ac1c756ab6677fa2e14cf8b37c08dfed1198" +checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" dependencies = [ - "constant_time_eq", - "generic-array 0.8.3", + "generic-array 0.12.3", + "subtle 1.0.0", ] [[package]] name = "crypto-mac" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.12.3", - "subtle 1.0.0", + "generic-array 0.14.4", + "subtle 2.4.1", ] [[package]] @@ -681,20 +690,20 @@ dependencies = [ [[package]] name = "digest" -version = "0.6.2" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5b29bf156f3f4b3c4f610a25ff69370616ae6e0657d416de22645483e72af0a" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "generic-array 0.8.3", + "generic-array 0.12.3", ] [[package]] name = "digest" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.12.3", + "generic-array 0.14.4", ] [[package]] @@ -738,18 +747,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "dtoa" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134951f4028bdadb9b84baf4232681efbf277da25144b9b0ad65df75946c422b" - [[package]] name = "either" version = "1.6.1" @@ -864,7 +861,7 @@ checksum = "4e62e068d05d580a2504f51e2a242a9ea4a0cd2a6ba378e13de390efcc1b1753" dependencies = [ "aes-ctr", "hmac 0.7.1", - "pbkdf2", + "pbkdf2 0.3.0", "scrypt", "sha2 0.8.2", "tiny-keccak", @@ -958,15 +955,18 @@ dependencies = [ [[package]] name = "flexi_logger" -version = "0.14.8" +version = "0.15.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "515fb7f6541dafe542c87c12a7ab6a52190cccb6c348b5951ef62d9978189ae8" +checksum = "aaab3caedb4149800f91e8e4899f29cd9ddf3b569b04c365ca9334f92f7542bf" dependencies = [ + "atty", "chrono", "flate2", "glob", + "lazy_static", "log 0.4.14", "regex", + "thiserror", "yansi", ] @@ -991,6 +991,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding 2.1.0", +] + [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -1019,6 +1029,21 @@ version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" +[[package]] +name = "futures-channel" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" + [[package]] name = "futures-cpupool" version = "0.1.8" @@ -1030,13 +1055,28 @@ dependencies = [ ] [[package]] -name = "generic-array" -version = "0.8.3" +name = "futures-sink" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" + +[[package]] +name = "futures-task" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" + +[[package]] +name = "futures-util" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fceb69994e330afed50c93524be68c42fa898c2d9fd4ee8da03bd7363acd26f2" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" dependencies = [ - "nodrop", - "typenum", + "autocfg 1.0.1", + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", ] [[package]] @@ -1048,6 +1088,16 @@ dependencies = [ "typenum", ] +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check 0.9.2", +] + [[package]] name = "getrandom" version = "0.1.15" @@ -1057,6 +1107,7 @@ dependencies = [ "cfg-if 0.1.10", "libc", "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -1100,6 +1151,25 @@ dependencies = [ "tokio-io", ] +[[package]] +name = "h2" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd819562fcebdac5afc5c113c3ec36f902840b70fd4fc458799c8ce4607ae55" +dependencies = [ + "bytes 1.1.0", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.5", + "indexmap", + "slab 0.4.2", + "tokio 1.13.0", + "tokio-util", + "tracing", +] + [[package]] name = "half" version = "1.6.0" @@ -1108,19 +1178,27 @@ checksum = "d36fab90f82edc3c747f9d438e06cf0a491055896f2a279638bb5beed6c40177" [[package]] name = "hashbrown" -version = "0.1.8" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bae29b6653b3412c2e71e9d486db9f9df5d701941d86683005efb9f2d28e3da" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "byteorder", - "scopeguard 0.3.3", + "ahash", ] [[package]] -name = "hashbrown" -version = "0.9.1" +name = "hashlink" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" +dependencies = [ + "hashbrown 0.11.2", +] [[package]] name = "heapsize" @@ -1150,15 +1228,10 @@ dependencies = [ ] [[package]] -name = "hmac" -version = "0.4.2" +name = "hex" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a13f4163aa0c5ca1be584aace0e2212b2e41be5478218d4f657f5f778b2ae2a" -dependencies = [ - "crypto-mac 0.4.0", - "digest 0.6.2", - "generic-array 0.8.3", -] +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hmac" @@ -1171,14 +1244,13 @@ dependencies = [ ] [[package]] -name = "hmac-drbg" -version = "0.1.2" +name = "hmac" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe727d41d2eec0a6574d887914347e5ff96a3b87177817e2a9820c5c87fecc2" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ - "digest 0.6.2", - "generic-array 0.8.3", - "hmac 0.4.2", + "crypto-mac 0.8.0", + "digest 0.9.0", ] [[package]] @@ -1192,6 +1264,17 @@ dependencies = [ "hmac 0.7.1", ] +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array 0.14.4", + "hmac 0.8.1", +] + [[package]] name = "hostname" version = "0.3.1" @@ -1237,11 +1320,28 @@ dependencies = [ "tokio-buf", ] +[[package]] +name = "http-body" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +dependencies = [ + "bytes 1.1.0", + "http 0.2.5", + "pin-project-lite", +] + [[package]] name = "httparse" -version = "1.3.4" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" + +[[package]] +name = "httpdate" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" [[package]] name = "hyper" @@ -1258,7 +1358,7 @@ dependencies = [ "time", "traitobject", "typeable", - "unicase 1.4.2", + "unicase", "url 1.7.2", ] @@ -1271,9 +1371,9 @@ dependencies = [ "bytes 0.4.12", "futures", "futures-cpupool", - "h2", + "h2 0.1.26", "http 0.1.21", - "http-body", + "http-body 0.1.0", "httparse", "iovec", "itoa", @@ -1281,7 +1381,7 @@ dependencies = [ "net2", "rustc_version", "time", - "tokio", + "tokio 0.1.22", "tokio-buf", "tokio-executor", "tokio-io", @@ -1289,7 +1389,31 @@ dependencies = [ "tokio-tcp", "tokio-threadpool", "tokio-timer 0.2.13", - "want", + "want 0.2.0", +] + +[[package]] +name = "hyper" +version = "0.14.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b91bb1f221b6ea1f1e4371216b70f40748774c2fb5971b450c07773fb92d26b" +dependencies = [ + "bytes 1.1.0", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.7", + "http 0.2.5", + "http-body 0.4.4", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.2", + "tokio 1.13.0", + "tower-service", + "tracing", + "want 0.3.0", ] [[package]] @@ -1305,6 +1429,19 @@ dependencies = [ "tokio-io", ] +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes 1.1.0", + "hyper 0.14.14", + "native-tls", + "tokio 1.13.0", + "tokio-native-tls", +] + [[package]] name = "idna" version = "0.1.5" @@ -1382,6 +1519,15 @@ dependencies = [ "unindent", ] +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if 1.0.0", +] + [[package]] name = "iovec" version = "0.1.4" @@ -1398,7 +1544,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08f7eadeaf4b52700de180d147c4805f199854600b36faa963d91114827b2ffc" dependencies = [ "error-chain 0.8.1", - "socket2", + "socket2 0.3.15", "widestring 0.2.2", "winapi 0.3.9", "winreg 0.5.1", @@ -1410,12 +1556,18 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" dependencies = [ - "socket2", + "socket2 0.3.15", "widestring 0.4.3", "winapi 0.3.9", "winreg 0.6.2", ] +[[package]] +name = "ipnet" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" + [[package]] name = "itertools" version = "0.10.1" @@ -1431,6 +1583,15 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" +[[package]] +name = "js-sys" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "jsonrpc-core" version = "11.0.0" @@ -1474,32 +1635,66 @@ checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" [[package]] name = "libsecp256k1" -version = "0.2.2" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688e8d65e495567c2c35ea0001b26b9debf0b4ea11f8cccc954233b75fc3428a" +checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962" dependencies = [ "arrayref", - "digest 0.6.2", - "hmac-drbg 0.1.2", - "rand 0.4.6", - "sha2 0.6.0", + "crunchy", + "digest 0.8.1", + "hmac-drbg 0.2.0", + "rand 0.7.3", + "sha2 0.8.2", + "subtle 2.4.1", "typenum", ] [[package]] name = "libsecp256k1" -version = "0.3.5" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962" +checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37" dependencies = [ "arrayref", + "base64 0.13.0", + "digest 0.9.0", + "hmac-drbg 0.3.0", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.4", + "serde", + "sha2 0.9.8", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ "crunchy", - "digest 0.8.1", - "hmac-drbg 0.2.0", - "rand 0.7.3", - "sha2 0.8.2", + "digest 0.9.0", "subtle 2.4.1", - "typenum", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", ] [[package]] @@ -1515,9 +1710,9 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.16.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5b95e89c330291768dc840238db7f9e204fd208511ab6319b56193a7f2ae25" +checksum = "abd5850c449b40bacb498b2bbdfaff648b1b055630073ba8db499caf2d0ea9f2" dependencies = [ "cc", "pkg-config", @@ -1569,6 +1764,15 @@ dependencies = [ "scopeguard 1.1.0", ] +[[package]] +name = "lock_api" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" +dependencies = [ + "scopeguard 1.1.0", +] + [[package]] name = "log" version = "0.3.9" @@ -1695,16 +1899,6 @@ version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" -[[package]] -name = "mime_guess" -version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" -dependencies = [ - "mime 0.3.16", - "unicase 2.6.0", -] - [[package]] name = "miniz_oxide" version = "0.4.3" @@ -1728,12 +1922,25 @@ dependencies = [ "kernel32-sys", "libc", "log 0.4.14", - "miow", + "miow 0.2.1", "net2", "slab 0.4.2", "winapi 0.2.8", ] +[[package]] +name = "mio" +version = "0.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" +dependencies = [ + "libc", + "log 0.4.14", + "miow 0.3.7", + "ntapi", + "winapi 0.3.9", +] + [[package]] name = "mio-uds" version = "0.6.8" @@ -1742,7 +1949,7 @@ checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" dependencies = [ "iovec", "libc", - "mio", + "mio 0.6.22", ] [[package]] @@ -1757,6 +1964,15 @@ dependencies = [ "ws2_32-sys", ] +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "mortal" version = "0.2.2" @@ -1798,15 +2014,15 @@ dependencies = [ "sha1", "tiny-bip39", "tiny-hderive", - "uint 0.8.5", + "uint 0.9.1", "web3", ] [[package]] name = "native-tls" -version = "0.2.4" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" +checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d" dependencies = [ "lazy_static", "libc", @@ -1869,7 +2085,7 @@ version = "1.0.0" dependencies = [ "actix", "backtrace", - "base58", + "base58 0.2.0", "base64 0.13.0", "bytes 0.4.12", "chrono", @@ -1892,7 +2108,7 @@ dependencies = [ "jsonrpc-core", "lazy_static", "libc", - "libsecp256k1 0.2.2", + "libsecp256k1 0.7.0", "log 0.4.14", "masq_lib", "native-tls", @@ -1900,7 +2116,7 @@ dependencies = [ "openssl", "pretty-hex", "primitive-types 0.5.1", - "rand 0.7.3", + "rand 0.8.4", "regex", "rlp", "rpassword", @@ -1919,7 +2135,7 @@ dependencies = [ "system-configuration", "tiny-bip39", "tiny-hderive", - "tokio", + "tokio 0.1.22", "tokio-core", "toml", "trust-dns", @@ -1996,36 +2212,33 @@ dependencies = [ [[package]] name = "once_cell" -version = "0.1.8" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532c29a261168a45ce28948f9537ddd7a5dd272cc513b3017b1e82a88f962c37" -dependencies = [ - "parking_lot 0.7.1", -] +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] -name = "once_cell" -version = "1.4.1" +name = "opaque-debug" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260e51e7efe62b592207e9e13a68e43692a7a279171d6ba57abd208bf23645ad" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "opaque-debug" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.30" +version = "0.10.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d575eff3665419f9b83678ff2815858ad9d11567e082f5ac1814baba4e2bcb4" +checksum = "0c7ae222234c30df141154f159066c5093ff73b63204dcda7121eb082fc56a95" dependencies = [ "bitflags", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "foreign-types", - "lazy_static", "libc", + "once_cell", "openssl-sys", ] @@ -2037,18 +2250,18 @@ checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] name = "openssl-src" -version = "111.12.0+1.1.1h" +version = "300.0.2+3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "858a4132194f8570a7ee9eb8629e85b23cbc4565f2d4a162e87556e5956abf61" +checksum = "14a760a11390b1a5daf72074d4f6ff1a6e772534ae191f999f57e9ee8146d1fb" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.58" +version = "0.9.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a842db4709b604f0fe5d1170ae3565899be2ad3d9cbc72dedc789ac0511f78de" +checksum = "c6517987b3f8226b5da3661dad65ff7f300cc59fb5ea8333ca191fc65fde3edf" dependencies = [ "autocfg 1.0.1", "cc", @@ -2121,6 +2334,17 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api 0.4.5", + "parking_lot_core 0.8.5", +] + [[package]] name = "parking_lot_core" version = "0.4.0" @@ -2165,6 +2389,20 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "parking_lot_core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall 0.2.10", + "smallvec 1.6.1", + "winapi 0.3.9", +] + [[package]] name = "pbkdf2" version = "0.3.0" @@ -2176,6 +2414,15 @@ dependencies = [ "rayon", ] +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac 0.8.0", +] + [[package]] name = "percent-encoding" version = "1.0.1" @@ -2226,6 +2473,18 @@ dependencies = [ "siphasher", ] +[[package]] +name = "pin-project-lite" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pkg-config" version = "0.3.19" @@ -2240,9 +2499,9 @@ checksum = "c36fa947111f5c62a733b652544dd0016a43ce89619538a8ef92724a6f501a20" [[package]] name = "pretty-hex" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be91bcc43e73799dc46a6c194a55e7aae1d86cc867c860fd4a436019af21bd8c" +checksum = "bc5c99d529f0d30937f6f4b8a86d988047327bb88d04d2c4afc356de74722131" [[package]] name = "primitive-types" @@ -2294,19 +2553,6 @@ dependencies = [ "unicode-xid 0.2.1", ] -[[package]] -name = "publicsuffix" -version = "1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" -dependencies = [ - "error-chain 0.12.4", - "idna 0.2.0", - "lazy_static", - "regex", - "url 2.1.1", -] - [[package]] name = "quick-error" version = "1.2.3" @@ -2347,18 +2593,6 @@ dependencies = [ "nibble_vec", ] -[[package]] -name = "rand" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" -dependencies = [ - "fuchsia-cprng", - "rand_core 0.3.1", - "rdrand", - "winapi 0.3.9", -] - [[package]] name = "rand" version = "0.5.6" @@ -2405,6 +2639,18 @@ dependencies = [ "rand_pcg 0.2.1", ] +[[package]] +name = "rand" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.3", + "rand_hc 0.3.1", +] + [[package]] name = "rand_chacha" version = "0.1.1" @@ -2425,6 +2671,16 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.3", +] + [[package]] name = "rand_core" version = "0.3.1" @@ -2449,6 +2705,15 @@ dependencies = [ "getrandom 0.1.15", ] +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom 0.2.3", +] + [[package]] name = "rand_hc" version = "0.1.0" @@ -2467,6 +2732,15 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_hc" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +dependencies = [ + "rand_core 0.6.3", +] + [[package]] name = "rand_isaac" version = "0.1.1" @@ -2531,25 +2805,25 @@ dependencies = [ [[package]] name = "rayon" -version = "1.4.1" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf6960dc9a5b4ee8d3e4c5787b4a112a8818e0290a42ff664ad60692fdf2032" +checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" dependencies = [ "autocfg 1.0.1", - "crossbeam-deque", + "crossbeam-deque 0.8.1", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c4fec834fb6e6d2dd5eece3c7b432a52f0ba887cf40e595190c4107edc08bf" +checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" dependencies = [ - "crossbeam-channel 0.4.4", - "crossbeam-deque", - "crossbeam-utils 0.7.2", + "crossbeam-channel 0.5.1", + "crossbeam-deque 0.8.1", + "crossbeam-utils 0.8.5", "lazy_static", "num_cpus", ] @@ -2627,36 +2901,37 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.9.24" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab" +checksum = "66d2927ca2f685faf0fc620ac4834690d29e7abb153add10f5812eef20b5e280" dependencies = [ - "base64 0.10.1", - "bytes 0.4.12", - "cookie", - "cookie_store", + "base64 0.13.0", + "bytes 1.1.0", "encoding_rs", - "flate2", - "futures", - "http 0.1.21", - "hyper 0.12.35", - "hyper-tls", + "futures-core", + "futures-util", + "http 0.2.5", + "http-body 0.4.4", + "hyper 0.14.14", + "hyper-tls 0.5.0", + "ipnet", + "js-sys", + "lazy_static", "log 0.4.14", "mime 0.3.16", - "mime_guess", "native-tls", + "percent-encoding 2.1.0", + "pin-project-lite", "serde", "serde_json", "serde_urlencoded", - "time", - "tokio", - "tokio-executor", - "tokio-io", - "tokio-threadpool", - "tokio-timer 0.2.13", - "url 1.7.2", - "uuid", - "winreg 0.6.2", + "tokio 1.13.0", + "tokio-native-tls", + "url 2.2.2", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg 0.7.0", ] [[package]] @@ -2680,9 +2955,9 @@ dependencies = [ [[package]] name = "rpassword" -version = "4.0.5" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f" +checksum = "ffc936cf8a7ea60c58f030fd36a612a48f440610214dc54bc36431f9ea0c3efb" dependencies = [ "libc", "winapi 0.3.9", @@ -2690,17 +2965,17 @@ dependencies = [ [[package]] name = "rusqlite" -version = "0.20.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a194373ef527035645a1bc21b10dc2125f73497e6e155771233eb187aedd051" +checksum = "8a82b0b91fad72160c56bf8da7a549b25d7c31109f52cc1437eac4c0ad2550a7" dependencies = [ "bitflags", "fallible-iterator", "fallible-streaming-iterator", + "hashlink", "libsqlite3-sys", - "lru-cache", "memchr", - "time", + "smallvec 1.6.1", ] [[package]] @@ -2721,6 +2996,12 @@ version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2610b7f643d18c87dff3b489950269617e6601a51f1f05aa5daefee36f64f0b" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -2789,10 +3070,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "656c79d0e90d0ab28ac86bf3c3d10bfbbac91450d3f190113b4e76d9fec3cfdd" dependencies = [ "base64 0.9.3", - "byte-tools 0.3.1", + "byte-tools", "byteorder", "hmac 0.7.1", - "pbkdf2", + "pbkdf2 0.3.0", "rand 0.5.6", "sha2 0.8.2", "subtle 1.0.0", @@ -2800,24 +3081,24 @@ dependencies = [ [[package]] name = "security-framework" -version = "0.4.4" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64808902d7d99f78eaddd2b4e2509713babc3dc3c85ad6f4c447680f3c01e535" +checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87" dependencies = [ "bitflags", - "core-foundation 0.7.0", - "core-foundation-sys 0.7.0", + "core-foundation 0.9.2", + "core-foundation-sys 0.8.3", "libc", "security-framework-sys", ] [[package]] name = "security-framework-sys" -version = "0.4.3" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405" +checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e" dependencies = [ - "core-foundation-sys 0.7.0", + "core-foundation-sys 0.8.3", "libc", ] @@ -2847,11 +3128,10 @@ dependencies = [ [[package]] name = "serde_cbor" -version = "0.10.2" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7081ed758ec726a6ed8ee7e92f5d3f6e6f8c3901b1f972e3a4a2f2599fad14f" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" dependencies = [ - "byteorder", "half", "serde", ] @@ -2880,33 +3160,36 @@ dependencies = [ [[package]] name = "serde_urlencoded" -version = "0.5.5" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a" +checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" dependencies = [ - "dtoa", + "form_urlencoded", "itoa", + "ryu", "serde", - "url 1.7.2", ] [[package]] name = "serial_test" -version = "0.2.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bfbc39343545618d97869d77f38ed43e48dd77432717dbc7ed39d797f3ecbe" +checksum = "e0bccbcf40c8938196944a3da0e133e031a33f4d6b72db3bda3cc556e361905d" dependencies = [ "lazy_static", + "parking_lot 0.11.2", + "serial_test_derive", ] [[package]] name = "serial_test_derive" -version = "0.2.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89dd85be2e2ad75b041c9df2892ac078fa6e0b90024028b2b9fb4125b7530f01" +checksum = "b2acd6defeddb41eb60bb468f8825d0cfd0c2a76bc03bfd235b6a1dc4f6a1ad5" dependencies = [ - "quote 0.6.13", - "syn 0.15.44", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.67", ] [[package]] @@ -2918,7 +3201,7 @@ dependencies = [ "block-buffer 0.7.3", "digest 0.8.1", "fake-simd", - "opaque-debug", + "opaque-debug 0.2.3", ] [[package]] @@ -2929,27 +3212,27 @@ checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" [[package]] name = "sha2" -version = "0.6.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d963c78ce367df26d7ea8b8cc655c651b42e8a1e584e869c1e17dae3ccb116a" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" dependencies = [ - "block-buffer 0.2.0", - "byte-tools 0.2.0", - "digest 0.6.2", + "block-buffer 0.7.3", + "digest 0.8.1", "fake-simd", - "generic-array 0.8.3", + "opaque-debug 0.2.3", ] [[package]] name = "sha2" -version = "0.8.2" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug", + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.0", ] [[package]] @@ -3030,6 +3313,16 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "socket2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" +dependencies = [ + "libc", + "winapi 0.3.9", +] + [[package]] name = "sodiumoxide" version = "0.2.6" @@ -3131,15 +3424,15 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.15.3" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67330cbee3b2a819e3365a773f05e884a136603687f812bf24db5b6c3d76b696" +checksum = "fb6c2c4a6ca462f07ca89841a2618dca6e405304d19ae238997e64915d89f513" dependencies = [ - "cfg-if 0.1.10", - "doc-comment", + "cfg-if 1.0.0", + "core-foundation-sys 0.8.3", "libc", "ntapi", - "once_cell 1.4.1", + "once_cell", "rayon", "winapi 0.3.9", ] @@ -3201,6 +3494,26 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "thiserror" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.67", +] + [[package]] name = "time" version = "0.1.44" @@ -3214,17 +3527,21 @@ dependencies = [ [[package]] name = "tiny-bip39" -version = "0.6.2" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1c5676413eaeb1ea35300a0224416f57abc3bd251657e0fafc12c47ff98c060" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" dependencies = [ - "failure", - "hashbrown 0.1.8", - "hmac 0.7.1", - "once_cell 0.1.8", - "pbkdf2", - "rand 0.6.5", - "sha2 0.8.2", + "anyhow", + "hmac 0.8.1", + "once_cell", + "pbkdf2 0.4.0", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.8", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", ] [[package]] @@ -3233,7 +3550,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01b874a4992538d4b2f4fbbac11b9419d685f4b39bdc3fed95b04e07bfd76040" dependencies = [ - "base58", + "base58 0.1.0", "hmac 0.7.1", "libsecp256k1 0.3.5", "memzero", @@ -3263,7 +3580,7 @@ checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" dependencies = [ "bytes 0.4.12", "futures", - "mio", + "mio 0.6.22", "num_cpus", "tokio-codec", "tokio-current-thread", @@ -3279,6 +3596,21 @@ dependencies = [ "tokio-uds", ] +[[package]] +name = "tokio" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "588b2d10a336da58d877567cd8fb8a14b463e2104910f8132cd054b4b96e29ee" +dependencies = [ + "autocfg 1.0.1", + "bytes 1.1.0", + "libc", + "memchr", + "mio 0.7.14", + "pin-project-lite", + "winapi 0.3.9", +] + [[package]] name = "tokio-buf" version = "0.1.1" @@ -3303,17 +3635,17 @@ dependencies = [ [[package]] name = "tokio-core" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeeffbbb94209023feaef3c196a41cbcdafa06b4a6f893f68779bb5e53796f71" +checksum = "87b1395334443abca552f63d4f61d0486f12377c2ba8b368e523f89e828cffd4" dependencies = [ "bytes 0.4.12", "futures", "iovec", "log 0.4.14", - "mio", + "mio 0.6.22", "scoped-tls", - "tokio", + "tokio 0.1.22", "tokio-executor", "tokio-io", "tokio-reactor", @@ -3362,6 +3694,16 @@ dependencies = [ "log 0.4.14", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +dependencies = [ + "native-tls", + "tokio 1.13.0", +] + [[package]] name = "tokio-reactor" version = "0.1.12" @@ -3372,7 +3714,7 @@ dependencies = [ "futures", "lazy_static", "log 0.4.14", - "mio", + "mio 0.6.22", "num_cpus", "parking_lot 0.9.0", "slab 0.4.2", @@ -3389,7 +3731,7 @@ checksum = "d0c34c6e548f101053321cba3da7cbb87a610b85555884c41b07da2eb91aff12" dependencies = [ "futures", "libc", - "mio", + "mio 0.6.22", "mio-uds", "signal-hook-registry", "tokio-executor", @@ -3417,7 +3759,7 @@ dependencies = [ "bytes 0.4.12", "futures", "iovec", - "mio", + "mio 0.6.22", "tokio-io", "tokio-reactor", ] @@ -3428,7 +3770,7 @@ version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" dependencies = [ - "crossbeam-deque", + "crossbeam-deque 0.7.3", "crossbeam-queue", "crossbeam-utils 0.7.2", "futures", @@ -3470,7 +3812,7 @@ dependencies = [ "bytes 0.4.12", "futures", "log 0.4.14", - "mio", + "mio 0.6.22", "tokio-codec", "tokio-io", "tokio-reactor", @@ -3487,13 +3829,27 @@ dependencies = [ "iovec", "libc", "log 0.4.14", - "mio", + "mio 0.6.22", "mio-uds", "tokio-codec", "tokio-io", "tokio-reactor", ] +[[package]] +name = "tokio-util" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" +dependencies = [ + "bytes 1.1.0", + "futures-core", + "futures-sink", + "log 0.4.14", + "pin-project-lite", + "tokio 1.13.0", +] + [[package]] name = "toml" version = "0.5.8" @@ -3503,6 +3859,32 @@ dependencies = [ "serde", ] +[[package]] +name = "tower-service" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" + +[[package]] +name = "tracing" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" +dependencies = [ + "cfg-if 1.0.0", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" +dependencies = [ + "lazy_static", +] + [[package]] name = "traitobject" version = "0.1.0" @@ -3524,7 +3906,7 @@ dependencies = [ "log 0.4.14", "radix_trie", "rand 0.7.3", - "tokio", + "tokio 0.1.22", "tokio-tcp", "tokio-udp", "trust-dns-proto 0.8.0", @@ -3544,7 +3926,7 @@ dependencies = [ "log 0.4.14", "rand 0.5.6", "smallvec 0.6.13", - "socket2", + "socket2 0.3.15", "tokio-executor", "tokio-io", "tokio-reactor", @@ -3568,7 +3950,7 @@ dependencies = [ "log 0.4.14", "rand 0.5.6", "smallvec 0.6.13", - "socket2", + "socket2 0.3.15", "tokio-executor", "tokio-io", "tokio-reactor", @@ -3593,14 +3975,14 @@ dependencies = [ "log 0.4.14", "rand 0.7.3", "smallvec 0.6.13", - "socket2", + "socket2 0.3.15", "tokio-executor", "tokio-io", "tokio-reactor", "tokio-tcp", "tokio-timer 0.2.13", "tokio-udp", - "url 2.1.1", + "url 2.2.2", ] [[package]] @@ -3618,7 +4000,7 @@ dependencies = [ "lru-cache", "resolv-conf", "smallvec 0.6.13", - "tokio", + "tokio 0.1.22", "trust-dns-proto 0.6.3", ] @@ -3637,7 +4019,7 @@ dependencies = [ "lru-cache", "resolv-conf", "smallvec 0.6.13", - "tokio", + "tokio 0.1.22", "tokio-executor", "tokio-tcp", "tokio-udp", @@ -3650,15 +4032,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" -[[package]] -name = "try_from" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b" -dependencies = [ - "cfg-if 0.1.10", -] - [[package]] name = "typeable" version = "0.1.2" @@ -3696,21 +4069,24 @@ dependencies = [ ] [[package]] -name = "unicase" -version = "1.4.2" +name = "uint" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" +checksum = "6470ab50f482bde894a037a57064480a246dbfdd5960bd65a44824693f08da5f" dependencies = [ - "version_check 0.1.5", + "byteorder", + "crunchy", + "hex", + "static_assertions 1.1.0", ] [[package]] name = "unicase" -version = "2.6.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" dependencies = [ - "version_check 0.9.2", + "version_check 0.1.5", ] [[package]] @@ -3774,10 +4150,11 @@ dependencies = [ [[package]] name = "url" -version = "2.1.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" dependencies = [ + "form_urlencoded", "idna 0.2.0", "matches", "percent-encoding 2.1.0", @@ -3833,6 +4210,16 @@ dependencies = [ "try-lock", ] +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log 0.4.14", + "try-lock", +] + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -3845,6 +4232,82 @@ version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +[[package]] +name = "wasm-bindgen" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +dependencies = [ + "bumpalo", + "lazy_static", + "log 0.4.14", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.67", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +dependencies = [ + "quote 1.0.7", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.67", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" + +[[package]] +name = "web-sys" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "web3" version = "0.8.0" @@ -3858,7 +4321,7 @@ dependencies = [ "ethereum-types", "futures", "hyper 0.12.35", - "hyper-tls", + "hyper-tls 0.3.2", "jsonrpc-core", "log 0.4.14", "native-tls", @@ -3885,7 +4348,7 @@ dependencies = [ "tokio-io", "tokio-reactor", "tokio-tcp", - "unicase 1.4.2", + "unicase", "url 1.7.2", "websocket-base", ] @@ -3972,6 +4435,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "winreg" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "winreg" version = "0.10.1" @@ -4002,3 +4474,18 @@ name = "zeroize" version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d68d9dcec5f9b43a30d38c49f91dfedfaac384cb8f085faca366c26207dd1619" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65f1a51723ec88c66d5d1fe80c841f17f63587d6691901d66be9bec6c3b51f73" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.67", + "synstructure", +] diff --git a/node/Cargo.toml b/node/Cargo.toml index 0cbdb644a..e7e3ff7aa 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -23,7 +23,7 @@ ethsign = {version = "0.7.3", default-features = false, features = ["pure-rust"] ethsign-crypto = "0.2.1" ethereum-types = "0.6.0" fdlimit = "0.2.1" -flexi_logger = { version = "0.14.1", features = [ "ziplogs" ] } +flexi_logger = { version = "0.15.12", features = [ "ziplogs" ] } futures = "0.1.31" heck = "0.3.3" http = "0.2.5" @@ -31,32 +31,32 @@ indoc = "1.0.3" itertools = "0.10.1" lazy_static = "1.4.0" libc = "0.2.107" -libsecp256k1 = "0.2.2" +libsecp256k1 = "0.7.0" log = "0.4.14" masq_lib = { path = "../masq_lib"} -pretty-hex = "0.1.0" +pretty-hex = "0.2.1" primitive-types = {version = "0.5.0", default-features = false, features = ["default", "rlp", "serde"]} -rand = {version = "0.7.0", features = ["getrandom", "small_rng"]} +rand = {version = "0.8.4", features = ["getrandom", "small_rng"]} regex = "1.5.4" -rlp = "0.4.2" -rpassword = "4.0.1" -rusqlite = {version = "0.20.0", features = ["bundled"]} -rustc-hex = "2.0.1" +rlp = "0.4.6" +rpassword = "5.0.1" +rusqlite = {version = "0.26.1", features = ["bundled"]} +rustc-hex = "2.1.0" serde = "1.0.130" serde_derive = "1.0.130" serde_json = "1.0.69" -serde_cbor = "0.10.1" +serde_cbor = "0.11.2" sha1 = "0.6.0" sodiumoxide = "0.2.2" -sysinfo = "0.15.0" -tiny-bip39 = "0.6.2" +sysinfo = "0.21.1" +tiny-bip39 = "0.8.2" tiny-hderive = "0.3.0" tokio = "0.1.22" -tokio-core = "0.1.17" +tokio-core = "0.1.18" toml = "0.5.8" trust-dns = "0.17.0" trust-dns-resolver = "0.12.0" -unindent = "0.1.4" +unindent = "0.1.7" web3 = {version = "0.8.0", default-features = false, features = ["http", "tls"]} websocket = {version = "0.26.2", default-features = false, features = ["async", "sync"]} @@ -67,19 +67,19 @@ core-foundation = "0.9.2" [target.'cfg(not(target_os = "windows"))'.dependencies] daemonize = "0.4.1" nix = "0.23.0" -openssl = {version = "0.10.24", features = ["vendored"]} +openssl = {version = "0.10.38", features = ["vendored"]} [target.'cfg(target_os = "windows")'.dependencies] winreg = "0.10.1" ipconfig = "0.2.2" [dev-dependencies] -base58 = "0.1.0" +base58 = "0.2.0" jsonrpc-core = "11.0.0" -native-tls = {version = "0.2.3", features = ["vendored"]} +native-tls = {version = "0.2.8", features = ["vendored"]} simple-server = "0.4.0" -serial_test_derive = "0.2.0" -serial_test = "0.2.0" +serial_test_derive = "0.5.1" +serial_test = "0.5.1" trust-dns-proto = "0.8.0" [[bin]] diff --git a/node/src/accountant/payable_dao.rs b/node/src/accountant/payable_dao.rs index ab90cc31f..ff62e7c3c 100644 --- a/node/src/accountant/payable_dao.rs +++ b/node/src/accountant/payable_dao.rs @@ -5,7 +5,7 @@ use crate::database::dao_utils; use crate::database::dao_utils::DaoFactoryReal; use crate::sub_lib::wallet::Wallet; use rusqlite::types::{ToSql, Type}; -use rusqlite::{Error, OptionalExtension, NO_PARAMS}; +use rusqlite::{Error, OptionalExtension}; use serde_json::{self, json}; use std::fmt::Debug; use std::time::SystemTime; @@ -151,7 +151,7 @@ impl PayableDao for PayableDaoReal { .prepare("select balance, last_paid_timestamp, wallet_address from payable where pending_payment_transaction is null") .expect("Internal error"); - stmt.query_map(NO_PARAMS, |row| { + stmt.query_map([], |row| { let balance_result = row.get(0); let last_paid_timestamp_result = row.get(1); let wallet_result: Result = row.get(2); @@ -236,7 +236,7 @@ impl PayableDao for PayableDaoReal { .conn .prepare("select sum(balance) from payable") .expect("Internal error"); - match stmt.query_row(NO_PARAMS, |row| { + match stmt.query_row([], |row| { let total_balance_result: Result = row.get(0); match total_balance_result { Ok(total_balance) => Ok(total_balance as u64), @@ -272,7 +272,7 @@ impl PayableDaoReal { .prepare("insert into payable (wallet_address, balance, last_paid_timestamp, pending_payment_transaction) values (:address, :balance, strftime('%s','now'), null) on conflict (wallet_address) do update set balance = balance + :balance where wallet_address = :address") .expect("Internal error"); let params: &[(&str, &dyn ToSql)] = &[(":address", &wallet), (":balance", &amount)]; - match stmt.execute_named(params) { + match stmt.execute(params) { Ok(0) => Ok(false), Ok(_) => Ok(true), Err(e) => Err(format!("{}", e)), @@ -296,7 +296,7 @@ impl PayableDaoReal { (":transaction", &format!("{:#x}", &transaction_hash)), (":address", &wallet), ]; - match stmt.execute_named(params) { + match stmt.execute(params) { Ok(0) => Ok(false), Ok(_) => Ok(true), Err(e) => Err(format!("{}", e)), @@ -313,7 +313,7 @@ mod tests { use crate::test_utils::make_wallet; use ethereum_types::BigEndianHash; use masq_lib::test_utils::utils::{ensure_node_home_directory_exists, TEST_DEFAULT_CHAIN}; - use rusqlite::{Connection, OpenFlags, NO_PARAMS}; + use rusqlite::{Connection, OpenFlags}; use std::str::FromStr; use web3::types::U256; @@ -375,7 +375,7 @@ mod tests { .unwrap(); conn.execute( "update payable set last_paid_timestamp = 0 where wallet_address = '0x000000000000000000000000000000626f6f6761'", - NO_PARAMS, + [], ) .unwrap(); subject diff --git a/node/src/accountant/receivable_dao.rs b/node/src/accountant/receivable_dao.rs index dd1590bd9..b35a3b2ad 100644 --- a/node/src/accountant/receivable_dao.rs +++ b/node/src/accountant/receivable_dao.rs @@ -11,7 +11,7 @@ use crate::sub_lib::wallet::Wallet; use indoc::indoc; use rusqlite::named_params; use rusqlite::types::{ToSql, Type}; -use rusqlite::{OptionalExtension, Row, NO_PARAMS}; +use rusqlite::{OptionalExtension, Row}; use std::time::SystemTime; #[derive(Debug, PartialEq)] @@ -134,7 +134,7 @@ impl ReceivableDao for ReceivableDaoReal { .prepare("select balance, last_received_timestamp, wallet_address from receivable") .expect("Internal error"); - stmt.query_map(NO_PARAMS, |row| { + stmt.query_map([], |row| { let balance_result = row.get(0); let last_received_timestamp_result = row.get(1); let wallet: Result = row.get(2); @@ -173,7 +173,7 @@ impl ReceivableDao for ReceivableDaoReal { " ); let mut stmt = self.conn.prepare(sql).expect("Couldn't prepare statement"); - stmt.query_map_named( + stmt.query_map( named_params! { ":slope": slope, ":sugg_and_grace": payment_curves.sugg_and_grace(now), @@ -197,7 +197,7 @@ impl ReceivableDao for ReceivableDaoReal { " ); let mut stmt = self.conn.prepare(sql).expect("Couldn't prepare statement"); - stmt.query_map_named( + stmt.query_map( named_params! { ":unban_balance": payment_curves.unban_when_balance_below_gwub, }, @@ -255,7 +255,7 @@ impl ReceivableDao for ReceivableDaoReal { .conn .prepare("select sum(balance) from receivable") .expect("Internal error"); - match stmt.query_row(NO_PARAMS, |row| { + match stmt.query_row([], |row| { let total_balance_result: Result = row.get(0); match total_balance_result { Ok(total_balance) => Ok(total_balance as u64), @@ -393,7 +393,6 @@ mod tests { use crate::test_utils::logging::TestLogHandler; use crate::test_utils::make_wallet; use masq_lib::test_utils::utils::{ensure_node_home_directory_exists, TEST_DEFAULT_CHAIN}; - use rusqlite::NO_PARAMS; use rusqlite::{Connection, Error, OpenFlags}; #[test] @@ -453,7 +452,7 @@ mod tests { .unwrap(); { let mut stmt = conn.prepare("drop table config").unwrap(); - stmt.execute(NO_PARAMS).unwrap(); + stmt.execute([]).unwrap(); } let mut subject = ReceivableDaoReal::new(conn); @@ -485,7 +484,7 @@ mod tests { .unwrap(); { let mut stmt = conn.prepare("drop table receivable").unwrap(); - stmt.execute(NO_PARAMS).unwrap(); + stmt.execute([]).unwrap(); } let mut subject = ReceivableDaoReal::new(conn); @@ -556,7 +555,7 @@ mod tests { .unwrap(); conn.execute( "update receivable set last_received_timestamp = 0 where wallet_address = '0x000000000000000000000000000000626f6f6761'", - NO_PARAMS, + [], ) .unwrap(); subject diff --git a/node/src/banned_dao.rs b/node/src/banned_dao.rs index b41dff696..d9fb60f62 100644 --- a/node/src/banned_dao.rs +++ b/node/src/banned_dao.rs @@ -3,7 +3,7 @@ use crate::database::connection_wrapper::ConnectionWrapper; use crate::database::dao_utils::DaoFactoryReal; use crate::sub_lib::wallet::Wallet; use lazy_static::lazy_static; -use rusqlite::{Error, ErrorCode, ToSql, NO_PARAMS}; +use rusqlite::{Error, ErrorCode, ToSql}; use std::collections::HashSet; use std::sync::RwLock; @@ -55,7 +55,7 @@ impl BannedCacheLoader for BannedCacheLoaderReal { let mut stmt = conn .prepare("select wallet_address from banned") .expect("Failed to prepare statement"); - stmt.query_map(NO_PARAMS, |row| row.get::(0)) + stmt.query_map([], |row| row.get::(0)) .expect("Failed to query banned table") .map(|p| p.expect("query_map magically returned an Err")) .for_each(|wallet| BAN_CACHE.insert(wallet)); @@ -94,7 +94,7 @@ impl BannedDao for BannedDaoReal { .conn .prepare("select wallet_address from banned") .expect("Failed to prepare a statement"); - stmt.query_map(NO_PARAMS, |row| row.get(0)) + stmt.query_map([], |row| row.get(0)) .expect("Couldn't retrieve delinquency-ban list: database corrupt") .flatten() .collect() @@ -154,7 +154,6 @@ mod tests { ensure_node_home_directory_does_not_exist, ensure_node_home_directory_exists, TEST_DEFAULT_CHAIN, }; - use rusqlite::NO_PARAMS; #[test] fn banned_dao_can_ban_a_wallet_address() { @@ -176,7 +175,7 @@ mod tests { .initialize(&home_dir, TEST_DEFAULT_CHAIN, true) .unwrap(); let mut stmt = conn.prepare("select wallet_address from banned").unwrap(); - let mut banned_addresses = stmt.query(NO_PARAMS).unwrap(); + let mut banned_addresses = stmt.query([]).unwrap(); assert_eq!( "0x0000000000000000646f6e616c646472756d7068", banned_addresses @@ -281,7 +280,7 @@ mod tests { .unwrap(); conn.prepare("insert into banned (wallet_address) values ('0x000000000000000000495f414d5f42414e4e4544')") .unwrap() - .execute(NO_PARAMS) + .execute([]) .unwrap(); BannedCacheLoaderReal {}.load(conn); @@ -325,7 +324,7 @@ mod tests { let unban_me_baby = make_wallet("UNBAN_ME_BABY"); conn.prepare("insert into banned (wallet_address) values ('UNBAN_ME_BABY')") .unwrap() - .execute(NO_PARAMS) + .execute([]) .unwrap(); BAN_CACHE.insert(unban_me_baby.clone()); diff --git a/node/src/blockchain/raw_transaction.rs b/node/src/blockchain/raw_transaction.rs index a0aaec6f7..caf5f546c 100644 --- a/node/src/blockchain/raw_transaction.rs +++ b/node/src/blockchain/raw_transaction.rs @@ -40,7 +40,7 @@ impl RawTransaction { tx.append(&sig.r.to_vec()); tx.append(&sig.s.to_vec()); tx.finalize_unbounded_list(); - tx.out() + tx.out().to_vec() } fn tx_hash(&self, chain_id: u64) -> Vec { diff --git a/node/src/blockchain/test_utils.rs b/node/src/blockchain/test_utils.rs index dd9683990..fbf58966e 100644 --- a/node/src/blockchain/test_utils.rs +++ b/node/src/blockchain/test_utils.rs @@ -7,6 +7,6 @@ pub fn make_meaningless_phrase() -> String { } pub fn make_meaningless_seed() -> Seed { - let mnemonic = Mnemonic::from_phrase(make_meaningless_phrase(), Language::English).unwrap(); + let mnemonic = Mnemonic::from_phrase(&make_meaningless_phrase(), Language::English).unwrap(); Seed::new(&mnemonic, "passphrase") } diff --git a/node/src/daemon/launch_verifier.rs b/node/src/daemon/launch_verifier.rs index 9ec9afa6f..416fc4ef7 100644 --- a/node/src/daemon/launch_verifier.rs +++ b/node/src/daemon/launch_verifier.rs @@ -39,7 +39,7 @@ impl VerifierTools for VerifierToolsReal { fn process_is_running(&self, process_id: u32) -> bool { let system = Self::system(); - let process_info_opt = system.get_process(Self::convert_pid(process_id)); + let process_info_opt = system.process(Self::convert_pid(process_id)); match process_info_opt { None => false, Some(process) => { @@ -50,7 +50,7 @@ impl VerifierTools for VerifierToolsReal { } fn kill_process(&self, process_id: u32) { - if let Some(process) = Self::system().get_process(Self::convert_pid(process_id)) { + if let Some(process) = Self::system().process(Self::convert_pid(process_id)) { if !process.kill(Signal::Term) && !process.kill(Signal::Kill) { error!( self.logger, @@ -109,9 +109,7 @@ impl VerifierToolsReal { #[cfg(target_os = "windows")] fn is_alive(process_status: ProcessStatus) -> bool { - match process_status { - ProcessStatus::Run => true, - } + !matches!(process_status, ProcessStatus::Dead | ProcessStatus::Zombie) } } diff --git a/node/src/database/db_initializer.rs b/node/src/database/db_initializer.rs index cd2319842..a15b4f601 100644 --- a/node/src/database/db_initializer.rs +++ b/node/src/database/db_initializer.rs @@ -9,7 +9,7 @@ use masq_lib::constants::{ }; use rand::prelude::*; use rusqlite::Error::InvalidColumnType; -use rusqlite::{Connection, OpenFlags, NO_PARAMS}; +use rusqlite::{Connection, OpenFlags}; use std::collections::HashMap; use std::fmt::Debug; use std::fs; @@ -154,12 +154,12 @@ impl DbInitializerReal { value text, encrypted integer not null )", - NO_PARAMS, + [], ) .expect("Can't create config table"); conn.execute( "create unique index if not exists idx_config_name on config (name)", - NO_PARAMS, + [], ) .expect("Can't create config name index"); } @@ -241,12 +241,12 @@ impl DbInitializerReal { last_paid_timestamp integer not null, pending_payment_transaction text null )", - NO_PARAMS, + [], ) .expect("Can't create payable table"); conn.execute( "create unique index if not exists idx_payable_wallet_address on payable (wallet_address)", - NO_PARAMS, + [], ) .expect("Can't create payable wallet_address index"); } @@ -258,12 +258,12 @@ impl DbInitializerReal { balance integer not null, last_received_timestamp integer not null )", - NO_PARAMS, + [], ) .expect("Can't create receivable table"); conn.execute( "create unique index if not exists idx_receivable_wallet_address on receivable (wallet_address)", - NO_PARAMS, + [], ) .expect("Can't create receivable wallet_address index"); } @@ -271,19 +271,19 @@ impl DbInitializerReal { fn create_banned_table(&self, conn: &Connection) { conn.execute( "create table banned ( wallet_address text primary key )", - NO_PARAMS, + [], ) .expect("Can't create banned table"); conn.execute( "create unique index idx_banned_wallet_address on banned (wallet_address)", - NO_PARAMS, + [], ) .expect("Can't create banned wallet_address index"); } fn extract_configurations(&self, conn: &Connection) -> HashMap> { let mut stmt = conn.prepare("select name, value from config").unwrap(); - let query_result = stmt.query_map(NO_PARAMS, |row| Ok((row.get(0), row.get(1)))); + let query_result = stmt.query_map([], |row| Ok((row.get(0), row.get(1)))); match query_result { Ok(rows) => rows, Err(e) => panic!("Error retrieving configuration: {}", e), @@ -380,7 +380,7 @@ impl DbInitializerReal { let mut rng = SmallRng::from_entropy(); loop { let candidate_port: u16 = - rng.gen_range(LOWEST_USABLE_INSECURE_PORT, HIGHEST_RANDOM_CLANDESTINE_PORT); + rng.gen_range(LOWEST_USABLE_INSECURE_PORT..=HIGHEST_RANDOM_CLANDESTINE_PORT); match TcpListener::bind(&SocketAddr::V4(SocketAddrV4::new( Ipv4Addr::from(0), candidate_port, @@ -409,7 +409,7 @@ impl DbInitializerReal { if encrypted { 1 } else { 0 } ) .as_str(), - NO_PARAMS, + [], ) .unwrap_or_else(|e| panic!("Can't preload config table with {}: {:?}", readable, e)); } @@ -614,7 +614,7 @@ mod tests { let conn = Connection::open_with_flags(&home_dir.join(DATABASE_FILE), flags).unwrap(); let mut stmt = conn.prepare ("select wallet_address, balance, last_paid_timestamp, pending_payment_transaction from payable").unwrap (); - let mut payable_contents = stmt.query_map(NO_PARAMS, |_| Ok(42)).unwrap(); + let mut payable_contents = stmt.query_map([], |_| Ok(42)).unwrap(); assert!(payable_contents.next().is_none()); } @@ -637,7 +637,7 @@ mod tests { let mut stmt = conn .prepare("select wallet_address, balance, last_received_timestamp from receivable") .unwrap(); - let mut receivable_contents = stmt.query_map(NO_PARAMS, |_| Ok(())).unwrap(); + let mut receivable_contents = stmt.query_map([], |_| Ok(())).unwrap(); assert!(receivable_contents.next().is_none()); } @@ -658,7 +658,7 @@ mod tests { let conn = Connection::open_with_flags(&home_dir.join(DATABASE_FILE), flags).unwrap(); let mut stmt = conn.prepare("select wallet_address from banned").unwrap(); - let mut banned_contents = stmt.query_map(NO_PARAMS, |_| Ok(42)).unwrap(); + let mut banned_contents = stmt.query_map([], |_| Ok(42)).unwrap(); assert!(banned_contents.next().is_none()); } @@ -720,7 +720,7 @@ mod tests { let conn = Connection::open_with_flags(&home_dir.join(DATABASE_FILE), flags).unwrap(); conn.execute( "insert into config (name, value, encrypted) values ('preexisting', 'yes', 0)", - NO_PARAMS, + [], ) .unwrap(); } @@ -793,11 +793,8 @@ mod tests { let mut flags = OpenFlags::empty(); flags.insert(OpenFlags::SQLITE_OPEN_READ_WRITE); let conn = Connection::open_with_flags(&home_dir.join(DATABASE_FILE), flags).unwrap(); - conn.execute( - "delete from config where name = 'schema_version'", - NO_PARAMS, - ) - .unwrap(); + conn.execute("delete from config where name = 'schema_version'", []) + .unwrap(); } let subject = DbInitializerReal::default(); @@ -828,7 +825,7 @@ mod tests { let conn = Connection::open_with_flags(&home_dir.join(DATABASE_FILE), flags).unwrap(); conn.execute( "update config set value = 'boooobles' where name = 'schema_version'", - NO_PARAMS, + [], ) .unwrap(); } diff --git a/node/src/database/db_migrations.rs b/node/src/database/db_migrations.rs index c10ee3d9e..1a4521f3e 100644 --- a/node/src/database/db_migrations.rs +++ b/node/src/database/db_migrations.rs @@ -5,7 +5,7 @@ use crate::database::db_initializer::CURRENT_SCHEMA_VERSION; use crate::sub_lib::logger::Logger; use masq_lib::blockchains::chains::Chain; use masq_lib::utils::{ExpectValue, WrapResult}; -use rusqlite::{Transaction, NO_PARAMS}; +use rusqlite::Transaction; use std::fmt::Debug; pub trait DbMigrator { @@ -154,7 +154,7 @@ impl MigDeclarationUtilities for MigDeclarationUtilitiesReal<'_> { let transaction = self.root_transaction_ref; sql_statements.iter().fold(Ok(()), |so_far, stm| { if so_far.is_ok() { - transaction.execute(stm, NO_PARAMS).map(|_| ()) + transaction.execute(stm, []).map(|_| ()) } else { so_far } @@ -283,7 +283,7 @@ impl DbMigratorReal { "UPDATE {} SET value = {} WHERE name = 'schema_version'", name_of_given_table, update_to ), - NO_PARAMS, + [], )?; Ok(()) } @@ -365,7 +365,7 @@ mod tests { use masq_lib::blockchains::chains::Chain; use masq_lib::constants::DEFAULT_CHAIN; use masq_lib::test_utils::utils::{ensure_node_home_directory_exists, TEST_DEFAULT_CHAIN}; - use rusqlite::{Connection, Error, OptionalExtension, NO_PARAMS}; + use rusqlite::{Connection, Error, OptionalExtension}; use std::cell::RefCell; use std::fmt::Debug; use std::fs::create_dir_all; @@ -700,7 +700,7 @@ mod tests { name TEXT, count TEXT )", - NO_PARAMS, + [], ) .unwrap(); let correct_statement_1 = "INSERT INTO test (name,count) VALUES ('mushrooms','270')"; @@ -728,11 +728,9 @@ mod tests { let connection = Connection::open(&db_path).unwrap(); //when an error occurs, the underlying transaction gets rolled back, and we cannot see any changes to the database let assertion: Option<(String, String)> = connection - .query_row( - "SELECT count FROM test WHERE name='mushrooms'", - NO_PARAMS, - |row| Ok((row.get(0).unwrap(), row.get(1).unwrap())), - ) + .query_row("SELECT count FROM test WHERE name='mushrooms'", [], |row| { + Ok((row.get(0).unwrap(), row.get(1).unwrap())) + }) .optional() .unwrap(); assert!(assertion.is_none()) //means no result for this query @@ -780,13 +778,13 @@ mod tests { name TEXT, value TEXT )", - NO_PARAMS, + [], ) .unwrap(); connection .execute( "INSERT INTO test (name, value) VALUES ('schema_version', '2')", - NO_PARAMS, + [], ) .unwrap(); let mut connection_wrapper = ConnectionWrapperReal::new(connection); @@ -821,7 +819,7 @@ mod tests { .unwrap() .query_row( "SELECT name, value FROM test WHERE name='schema_version'", - NO_PARAMS, + [], |row| Ok((row.get(0).unwrap(), row.get(1).unwrap())), ) .unwrap(); @@ -869,7 +867,7 @@ mod tests { name TEXT, value TEXT )", - NO_PARAMS, + [], ) .unwrap(); let mut connection_wrapper = ConnectionWrapperReal::new(connection); diff --git a/node/src/db_config/config_dao.rs b/node/src/db_config/config_dao.rs index 50dd3f708..ab518d21c 100644 --- a/node/src/db_config/config_dao.rs +++ b/node/src/db_config/config_dao.rs @@ -2,7 +2,7 @@ use crate::database::connection_wrapper::ConnectionWrapper; use crate::database::dao_utils::DaoFactoryReal; use rusqlite::types::ToSql; -use rusqlite::{Row, Rows, Statement, Transaction, NO_PARAMS}; +use rusqlite::{Row, Rows, Statement, Transaction}; #[derive(Debug, PartialEq, Clone)] pub enum ConfigDaoError { @@ -190,7 +190,7 @@ fn handle_update_execution(result: rusqlite::Result) -> Result<(), Config fn get_all(mut stmt: Statement) -> Result, ConfigDaoError> { let mut rows: Rows = stmt - .query(NO_PARAMS) + .query([]) .expect("Schema error: couldn't dump config table"); let mut results = Vec::new(); loop { diff --git a/node/src/node_configurator/configurator.rs b/node/src/node_configurator/configurator.rs index dca1f8cb1..0acc06a22 100644 --- a/node/src/node_configurator/configurator.rs +++ b/node/src/node_configurator/configurator.rs @@ -341,7 +341,7 @@ impl Configurator { ) -> Result { Self::check_preconditions(persistent_config, "recover", &msg.db_password)?; let language = Self::parse_language(&msg.mnemonic_phrase_language)?; - let mnemonic = match Mnemonic::from_phrase(msg.mnemonic_phrase.join(" "), language) { + let mnemonic = match Mnemonic::from_phrase(&msg.mnemonic_phrase.join(" "), language) { Ok(m) => m, Err(e) => { return Err(( diff --git a/node/src/proxy_client/local_test_utils.rs b/node/src/proxy_client/local_test_utils.rs index 66e0adcdc..7e50e521d 100644 --- a/node/src/proxy_client/local_test_utils.rs +++ b/node/src/proxy_client/local_test_utils.rs @@ -11,7 +11,7 @@ use std::net::IpAddr; use std::sync::Arc; use std::sync::Mutex; use trust_dns::rr::{Name, Record}; -use trust_dns_proto::op::Query; +use trust_dns_proto::op::query::Query; use trust_dns_resolver::config::ResolverConfig; use trust_dns_resolver::config::ResolverOpts; use trust_dns_resolver::error::ResolveError; diff --git a/node/src/test_utils/database_utils.rs b/node/src/test_utils/database_utils.rs index 7243c6f80..eeb36e7bc 100644 --- a/node/src/test_utils/database_utils.rs +++ b/node/src/test_utils/database_utils.rs @@ -3,7 +3,7 @@ use crate::database::connection_wrapper::ConnectionWrapper; use crate::database::db_migrations::DbMigrator; use crate::sub_lib::logger::Logger; -use rusqlite::{Connection, NO_PARAMS}; +use rusqlite::Connection; use std::cell::RefCell; use std::fs::remove_file; use std::path::PathBuf; @@ -50,7 +50,7 @@ pub fn revive_tables_of_the_version_0_and_return_the_connection_to_the_db( "create unique index idx_receivable_wallet_address on receivable (wallet_address)", "create table banned ( wallet_address text primary key )", "create unique index idx_banned_wallet_address on banned (wallet_address)" - ].iter().for_each(|statement|{connection.execute(statement,NO_PARAMS).unwrap();}); + ].iter().for_each(|statement|{connection.execute(statement,[]).unwrap();}); connection } @@ -101,7 +101,7 @@ pub fn assurance_query_for_config_table( ) -> (String, Option, u16) { let mut statement = conn.prepare(stm).unwrap(); statement - .query_row(NO_PARAMS, |r| { + .query_row([], |r| { Ok((r.get(0).unwrap(), r.get(1).unwrap(), r.get(2).unwrap())) }) .unwrap() diff --git a/node/tests/initialization_test.rs b/node/tests/initialization_test.rs index f6f14b604..8ea224e82 100644 --- a/node/tests/initialization_test.rs +++ b/node/tests/initialization_test.rs @@ -14,7 +14,7 @@ use node_lib::daemon::launch_verifier::{VerifierTools, VerifierToolsReal}; use node_lib::database::db_initializer::DATABASE_FILE; #[cfg(not(target_os = "windows"))] use node_lib::privilege_drop::{PrivilegeDropper, PrivilegeDropperReal}; -use rusqlite::{Connection, OpenFlags, NO_PARAMS}; +use rusqlite::{Connection, OpenFlags}; use std::ops::Add; use std::time::{Duration, SystemTime}; use utils::CommandConfig; @@ -164,7 +164,7 @@ fn required_chain_name_from_input_meets_different_db_chain_name_and_panics_integ .unwrap(); conn.execute( "UPDATE config SET value='eth-mainnet' WHERE name='chain_name'", - NO_PARAMS, + [], ) .unwrap(); From 918d91e4a2b0e544fab59f8cd3072191ea81dbe4 Mon Sep 17 00:00:00 2001 From: FinsaasGH Date: Fri, 12 Nov 2021 10:34:42 -0700 Subject: [PATCH 13/17] GH-496: Updated masq_real_node.rs with borrow on phrase.to_string() in get_consuming_wallet --- multinode_integration_tests/src/masq_real_node.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/multinode_integration_tests/src/masq_real_node.rs b/multinode_integration_tests/src/masq_real_node.rs index 7c5020952..0fb257eba 100644 --- a/multinode_integration_tests/src/masq_real_node.rs +++ b/multinode_integration_tests/src/masq_real_node.rs @@ -348,7 +348,7 @@ impl NodeStartupConfig { } ConsumingWalletInfo::DerivationPath(phrase, derivation_path) => { let mnemonic = - Mnemonic::from_phrase(phrase.to_string(), Language::English).unwrap(); + Mnemonic::from_phrase(&phrase.to_string(), Language::English).unwrap(); let keypair = Bip32ECKeyPair::from_raw( Seed::new(&mnemonic, "passphrase").as_ref(), derivation_path, From 8278cab39d2ede690a6b0bc7e553fc6ad6f02308 Mon Sep 17 00:00:00 2001 From: FinsaasGH Date: Fri, 12 Nov 2021 11:49:41 -0700 Subject: [PATCH 14/17] GH-496: Updated core-foundation for macOS testing --- dns_utility/Cargo.lock | 24 ++++-------------------- dns_utility/Cargo.toml | 2 +- node/Cargo.lock | 2 +- node/Cargo.toml | 2 +- 4 files changed, 7 insertions(+), 23 deletions(-) diff --git a/dns_utility/Cargo.lock b/dns_utility/Cargo.lock index d9d769ecd..4ba74ba7a 100644 --- a/dns_utility/Cargo.lock +++ b/dns_utility/Cargo.lock @@ -269,17 +269,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" dependencies = [ - "core-foundation-sys 0.7.0", - "libc", -] - -[[package]] -name = "core-foundation" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3" -dependencies = [ - "core-foundation-sys 0.8.3", + "core-foundation-sys", "libc", ] @@ -289,12 +279,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - [[package]] name = "crossbeam-channel" version = "0.3.9" @@ -422,7 +406,7 @@ dependencies = [ name = "dns_utility" version = "1.0.0" dependencies = [ - "core-foundation 0.9.2", + "core-foundation", "ipconfig 0.2.2", "libc", "masq_lib", @@ -1643,7 +1627,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd4bc0637a2b8c0b1a5145cca3e21b707865edc7e32285771536af1ade129468" dependencies = [ "bitflags", - "core-foundation 0.7.0", + "core-foundation", "system-configuration-sys", ] @@ -1653,7 +1637,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "269e271436d8e4bb2621c535a11fe03d5d012f74b19af72f80288f3a72f6180a" dependencies = [ - "core-foundation-sys 0.7.0", + "core-foundation-sys", "libc", ] diff --git a/dns_utility/Cargo.toml b/dns_utility/Cargo.toml index a109302a0..23bc79a5b 100644 --- a/dns_utility/Cargo.toml +++ b/dns_utility/Cargo.toml @@ -14,7 +14,7 @@ masq_lib = { path = "../masq_lib" } [target.'cfg(target_os = "macos")'.dependencies] system-configuration = "0.4.0" -core-foundation = "0.9.2" +core-foundation = "0.7.0" [target.'cfg(target_os = "windows")'.dependencies] winreg = "0.10.1" diff --git a/node/Cargo.lock b/node/Cargo.lock index 796e3a003..b71c2284f 100644 --- a/node/Cargo.lock +++ b/node/Cargo.lock @@ -2090,7 +2090,7 @@ dependencies = [ "bytes 0.4.12", "chrono", "clap", - "core-foundation 0.9.2", + "core-foundation 0.7.0", "crossbeam-channel 0.5.1", "daemonize", "dirs 4.0.0", diff --git a/node/Cargo.toml b/node/Cargo.toml index e7e3ff7aa..04d71a157 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -62,7 +62,7 @@ websocket = {version = "0.26.2", default-features = false, features = ["async", [target.'cfg(target_os = "macos")'.dependencies] system-configuration = "0.4.0" -core-foundation = "0.9.2" +core-foundation = "0.7.0" [target.'cfg(not(target_os = "windows"))'.dependencies] daemonize = "0.4.1" From 475b5172b3772ca42d81384e7f8983ac6f14137b Mon Sep 17 00:00:00 2001 From: FinsaasGH Date: Mon, 22 Nov 2021 13:20:20 -0700 Subject: [PATCH 15/17] GH-509: Updated actix to 0.8.3 and related code --- dns_utility/Cargo.lock | 968 ++++++++++-------- masq_lib/Cargo.toml | 2 +- node/Cargo.lock | 472 +++++---- node/Cargo.toml | 2 +- node/src/accountant/mod.rs | 34 +- node/src/actor_system_factory.rs | 18 +- node/src/blockchain/blockchain_interface.rs | 1 + node/src/daemon/crash_notification.rs | 1 + node/src/daemon/mod.rs | 1 + node/src/proxy_client/stream_handler_pool.rs | 2 +- node/src/proxy_server/mod.rs | 9 +- node/src/run_modes.rs | 4 +- node/src/run_modes_factories.rs | 1 + node/src/stream_messages.rs | 3 + node/src/sub_lib/accountant.rs | 6 + node/src/sub_lib/blockchain_bridge.rs | 2 + node/src/sub_lib/configurator.rs | 1 + node/src/sub_lib/dispatcher.rs | 2 + node/src/sub_lib/hopper.rs | 3 + node/src/sub_lib/neighborhood.rs | 6 +- node/src/sub_lib/peer_actors.rs | 2 + node/src/sub_lib/proxy_client.rs | 2 + node/src/sub_lib/proxy_server.rs | 2 + .../sub_lib/set_consuming_wallet_message.rs | 1 + node/src/sub_lib/stream_handler_pool.rs | 2 + node/src/test_utils/recorder.rs | 2 + 26 files changed, 911 insertions(+), 638 deletions(-) diff --git a/dns_utility/Cargo.lock b/dns_utility/Cargo.lock index 4ba74ba7a..b4fea9f89 100644 --- a/dns_utility/Cargo.lock +++ b/dns_utility/Cargo.lock @@ -4,45 +4,210 @@ version = 3 [[package]] name = "actix" -version = "0.7.9" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c616db5fa4b0c40702fb75201c2af7f8aa8f3a2e2c1dda3b0655772aa949666" +checksum = "671ce3d27313f236827a5dd153a1073ad03ef31fc77f562020263e7830cf1ef7" dependencies = [ + "actix-http", + "actix-rt", "actix_derive", "bitflags", "bytes", "crossbeam-channel 0.3.9", - "failure", - "fnv", + "derive_more 0.14.1", "futures", - "libc", + "hashbrown 0.3.1", + "lazy_static", "log 0.4.8", - "parking_lot 0.7.1", + "parking_lot 0.8.0", "smallvec", - "tokio", "tokio-codec", "tokio-executor", "tokio-io", - "tokio-reactor", - "tokio-signal", "tokio-tcp", - "tokio-timer 0.2.12", - "trust-dns-proto 0.5.0", + "tokio-timer 0.2.13", + "trust-dns-resolver", +] + +[[package]] +name = "actix-codec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f2c11af4b06dc935d8e1b1491dad56bfb32febc49096a91e773f8535c176453" +dependencies = [ + "bytes", + "futures", + "log 0.4.8", + "tokio-codec", + "tokio-io", +] + +[[package]] +name = "actix-connect" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fade9bd4bb46bacde89f1e726c7a3dd230536092712f5d94d77ca57c087fca0" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "derive_more 0.15.0", + "either", + "futures", + "http", + "log 0.4.8", + "tokio-current-thread", + "tokio-tcp", + "trust-dns-resolver", +] + +[[package]] +name = "actix-http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb50f77cd28240d344fd54afd205bae8760a3b0ad448b1716a2aa31e24db139" +dependencies = [ + "actix-codec", + "actix-connect", + "actix-server-config", + "actix-service", + "actix-threadpool", + "actix-utils", + "base64 0.10.1", + "bitflags", + "bytes", + "chrono", + "copyless", + "derive_more 0.15.0", + "either", + "encoding_rs", + "futures", + "h2", + "hashbrown 0.6.3", + "http", + "httparse", + "indexmap", + "language-tags", + "lazy_static", + "log 0.4.8", + "mime 0.3.16", + "percent-encoding 2.1.0", + "rand 0.7.3", + "regex", + "serde", + "serde_json", + "serde_urlencoded", + "sha1", + "slab 0.4.5", + "time", + "tokio-current-thread", + "tokio-tcp", + "tokio-timer 0.2.13", "trust-dns-resolver", - "uuid", +] + +[[package]] +name = "actix-rt" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88c9da1d06603d82ec2b6690fc5b80eb626cd2d6b573f3d9a71d5252e06d098e" +dependencies = [ + "actix-threadpool", + "copyless", + "futures", + "tokio-current-thread", + "tokio-executor", + "tokio-reactor", + "tokio-timer 0.2.13", +] + +[[package]] +name = "actix-server-config" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "483a34989c682d93142bacad6300375bb6ad8002d2e0bb249dbad86128b9ff30" +dependencies = [ + "futures", + "tokio-io", + "tokio-tcp", +] + +[[package]] +name = "actix-service" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bca5b48e928841ff7e7dce1fdb5b0d4582f6b1b976e08f4bac3f640643e0773f" +dependencies = [ + "futures", +] + +[[package]] +name = "actix-threadpool" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b5ae85d13da7e6fb86b1b7bc83185e0e3bd4cc5f421c887e1803796c034d35d" +dependencies = [ + "derive_more 0.15.0", + "futures", + "lazy_static", + "log 0.4.8", + "num_cpus", + "parking_lot 0.9.0", + "threadpool", +] + +[[package]] +name = "actix-utils" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "908c3109948f5c37a8b57fd343a37dcad5bb1d90bfd06300ac96b17bbe017b95" +dependencies = [ + "actix-codec", + "actix-service", + "bytes", + "either", + "futures", + "log 0.4.8", + "tokio-current-thread", + "tokio-timer 0.2.13", ] [[package]] name = "actix_derive" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4300e9431455322ae393d43a2ba1ef96b8080573c0fc23b196219efedfb6ba69" +checksum = "0bf5f6d7bf2d220ae8b4a7ae02a572bb35b7c4806b24049af905ab8110de156c" dependencies = [ "proc-macro2 0.4.30", "quote 0.6.13", "syn 0.15.44", ] +[[package]] +name = "addr2line" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29661b60bec623f0586702976ff4d0c9942dcb6723161c2df0eea78455cfedfb" +dependencies = [ + "const-random", +] + [[package]] name = "aho-corasick" version = "0.7.18" @@ -61,12 +226,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "arc-swap" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7b8a9123b8027467bce0099fe556c628a53c8d83df0507084c31e9ba2e39aff" - [[package]] name = "arrayref" version = "0.3.6" @@ -107,24 +266,17 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "backtrace" -version = "0.3.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4ed64ae6d9ebfd9893193c4b2532b1292ec97bd8271c9d7d0fa90cd78a34cba" -dependencies = [ - "backtrace-sys", - "cfg-if 0.1.10", - "libc", - "rustc-demangle", -] - -[[package]] -name = "backtrace-sys" -version = "0.1.32" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" +checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6" dependencies = [ + "addr2line", "cc", + "cfg-if 1.0.0", "libc", + "miniz_oxide", + "object", + "rustc-demangle", ] [[package]] @@ -203,9 +355,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.41" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dae9c4b8fedcae85592ba623c4fd08cfdab3e3b72d6df780c6ead964a69bfff" +checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" [[package]] name = "cfg-if" @@ -219,6 +371,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" +dependencies = [ + "num-integer", + "num-traits", + "time", +] + [[package]] name = "clap" version = "2.33.3" @@ -243,6 +406,28 @@ dependencies = [ "bitflags", ] +[[package]] +name = "const-random" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f590d95d011aa80b063ffe3253422ed5aa462af4e9867d43ce8337562bac77c4" +dependencies = [ + "const-random-macro", + "proc-macro-hack", +] + +[[package]] +name = "const-random-macro" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "615f6e27d000a2bffbc7f2f6a8669179378fa27ee4d0a509e985dfc0a7defb40" +dependencies = [ + "getrandom 0.2.3", + "lazy_static", + "proc-macro-hack", + "tiny-keccak 2.0.2", +] + [[package]] name = "const_format" version = "0.2.22" @@ -263,6 +448,12 @@ dependencies = [ "unicode-xid 0.2.0", ] +[[package]] +name = "copyless" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2df960f5d869b2dd8532793fde43eb5427cceb126c929747a26823ab0eeb536" + [[package]] name = "core-foundation" version = "0.7.0" @@ -298,39 +489,6 @@ dependencies = [ "crossbeam-utils 0.8.3", ] -[[package]] -name = "crossbeam-deque" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils 0.7.0", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" -dependencies = [ - "autocfg 0.1.7", - "cfg-if 0.1.10", - "crossbeam-utils 0.7.0", - "lazy_static", - "memoffset 0.5.3", - "scopeguard 1.0.0", -] - -[[package]] -name = "crossbeam-queue" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" -dependencies = [ - "crossbeam-utils 0.6.6", -] - [[package]] name = "crossbeam-utils" version = "0.6.6" @@ -343,11 +501,11 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" dependencies = [ - "autocfg 0.1.7", + "autocfg 1.0.1", "cfg-if 0.1.10", "lazy_static", ] @@ -379,6 +537,18 @@ dependencies = [ "subtle 1.0.0", ] +[[package]] +name = "derive_more" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d944ac6003ed268757ef1ee686753b57efc5fcf0ebe7b64c9fc81e7e32ff839" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "rustc_version", + "syn 0.15.44", +] + [[package]] name = "derive_more" version = "0.15.0" @@ -407,7 +577,7 @@ name = "dns_utility" version = "1.0.0" dependencies = [ "core-foundation", - "ipconfig 0.2.2", + "ipconfig", "libc", "masq_lib", "regex", @@ -415,6 +585,12 @@ dependencies = [ "winreg 0.10.1", ] +[[package]] +name = "dtoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" + [[package]] name = "either" version = "1.6.0" @@ -422,12 +598,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd56b59865bce947ac5958779cfa508f6c3b9497cc762b7e24a12d11ccde2c4f" [[package]] -name = "error-chain" -version = "0.8.1" +name = "encoding_rs" +version = "0.8.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6930e04918388a9a2e41d518c25cf679ccafe26733fb4127dbf21993f2575d46" +checksum = "a74ea89a0a1b98f6332de42c95baff457ada66d1cb4030f9ff151b2041a1c746" dependencies = [ - "backtrace", + "cfg-if 1.0.0", +] + +[[package]] +name = "enum-as-inner" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d58266c97445680766be408285e798d3401c6d4c378ec5552e78737e681e37d" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", ] [[package]] @@ -445,13 +632,13 @@ version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebdeeea85a6d217b9fcc862906d7e283c047e04114165c433756baf5dce00a6c" dependencies = [ - "error-chain 0.12.4", + "error-chain", "ethereum-types", "rustc-hex", "serde", "serde_derive", "serde_json", - "tiny-keccak", + "tiny-keccak 1.5.0", ] [[package]] @@ -464,7 +651,7 @@ dependencies = [ "fixed-hash", "impl-rlp", "impl-serde", - "tiny-keccak", + "tiny-keccak 1.5.0", ] [[package]] @@ -483,9 +670,9 @@ dependencies = [ [[package]] name = "failure" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" +checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" dependencies = [ "backtrace", "failure_derive", @@ -524,9 +711,19 @@ dependencies = [ [[package]] name = "fnv" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding 2.1.0", +] [[package]] name = "fuchsia-cprng" @@ -573,9 +770,66 @@ checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ "cfg-if 1.0.0", "libc", - "wasi", + "wasi 0.9.0+wasi-snapshot-preview1", ] +[[package]] +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.10.2+wasi-snapshot-preview1", +] + +[[package]] +name = "gimli" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" + +[[package]] +name = "h2" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" +dependencies = [ + "byteorder", + "bytes", + "fnv", + "futures", + "http", + "indexmap", + "log 0.4.8", + "slab 0.4.5", + "string", + "tokio-io", +] + +[[package]] +name = "hashbrown" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29fba9abe4742d586dfd0c06ae4f7e73a1c2d86b856933509b269d82cdf06e18" + +[[package]] +name = "hashbrown" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead" +dependencies = [ + "ahash", + "autocfg 0.1.7", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + [[package]] name = "heapsize" version = "0.4.2" @@ -617,12 +871,24 @@ dependencies = [ [[package]] name = "hostname" -version = "0.1.5" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21ceb46a83a85e824ef93669c8b390009623863b5c195d1ba747292c0c72f94e" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" dependencies = [ "libc", - "winutil", + "match_cfg", + "winapi 0.3.9", +] + +[[package]] +name = "http" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" +dependencies = [ + "bytes", + "fnv", + "itoa", ] [[package]] @@ -641,13 +907,13 @@ dependencies = [ "httparse", "language-tags", "log 0.3.9", - "mime", + "mime 0.2.6", "num_cpus", "time", "traitobject", "typeable", "unicase", - "url", + "url 1.7.2", ] [[package]] @@ -661,6 +927,17 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "impl-codec" version = "0.2.0" @@ -689,25 +966,22 @@ dependencies = [ ] [[package]] -name = "iovec" -version = "0.1.4" +name = "indexmap" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" dependencies = [ - "libc", + "autocfg 1.0.1", + "hashbrown 0.11.2", ] [[package]] -name = "ipconfig" -version = "0.1.9" +name = "iovec" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f7eadeaf4b52700de180d147c4805f199854600b36faa963d91114827b2ffc" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" dependencies = [ - "error-chain 0.8.1", - "socket2", - "widestring 0.2.2", - "winapi 0.3.9", - "winreg 0.5.1", + "libc", ] [[package]] @@ -717,7 +991,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" dependencies = [ "socket2", - "widestring 0.4.0", + "widestring", "winapi 0.3.9", "winreg 0.6.2", ] @@ -796,19 +1070,9 @@ dependencies = [ [[package]] name = "linked-hash-map" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" - -[[package]] -name = "lock_api" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" -dependencies = [ - "owning_ref", - "scopeguard 0.3.3", -] +checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" [[package]] name = "lock_api" @@ -816,7 +1080,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed946d4529956a20f2d63ebe1b69996d5a2137c91913fe3ebbeff957f5bca7ff" dependencies = [ - "scopeguard 1.0.0", + "scopeguard", ] [[package]] @@ -825,7 +1089,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" dependencies = [ - "scopeguard 1.0.0", + "scopeguard", ] [[package]] @@ -876,6 +1140,12 @@ dependencies = [ "websocket", ] +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + [[package]] name = "matches" version = "0.1.8" @@ -894,15 +1164,6 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" -[[package]] -name = "memoffset" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" -dependencies = [ - "rustc_version", -] - [[package]] name = "memoffset" version = "0.6.4" @@ -922,16 +1183,32 @@ checksum = "93c0d11ac30a033511ae414355d80f70d9f29a44a49140face477117a1ee90db" name = "mime" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" +checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" +dependencies = [ + "log 0.3.9", +] + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" dependencies = [ - "log 0.3.9", + "adler", + "autocfg 1.0.1", ] [[package]] name = "mio" -version = "0.6.21" +version = "0.6.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" +checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" dependencies = [ "cfg-if 0.1.10", "fuchsia-zircon", @@ -942,26 +1219,15 @@ dependencies = [ "log 0.4.8", "miow", "net2", - "slab 0.4.2", + "slab 0.4.5", "winapi 0.2.8", ] -[[package]] -name = "mio-uds" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" -dependencies = [ - "iovec", - "libc", - "mio", -] - [[package]] name = "miow" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" dependencies = [ "kernel32-sys", "net2", @@ -971,9 +1237,9 @@ dependencies = [ [[package]] name = "net2" -version = "0.2.33" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" dependencies = [ "cfg-if 0.1.10", "libc", @@ -990,7 +1256,7 @@ dependencies = [ "cc", "cfg-if 1.0.0", "libc", - "memoffset 0.6.4", + "memoffset", ] [[package]] @@ -999,30 +1265,49 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg 1.0.1", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg 1.0.1", +] + [[package]] name = "num_cpus" -version = "1.11.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" dependencies = [ "hermit-abi", "libc", ] [[package]] -name = "opaque-debug" -version = "0.2.3" +name = "object" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" +dependencies = [ + "memchr", +] [[package]] -name = "owning_ref" -version = "0.4.0" +name = "opaque-debug" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" -dependencies = [ - "stable_deref_trait", -] +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "parity-codec" @@ -1034,16 +1319,6 @@ dependencies = [ "serde", ] -[[package]] -name = "parking_lot" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" -dependencies = [ - "lock_api 0.1.5", - "parking_lot_core 0.4.0", -] - [[package]] name = "parking_lot" version = "0.8.0" @@ -1066,19 +1341,6 @@ dependencies = [ "rustc_version", ] -[[package]] -name = "parking_lot_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" -dependencies = [ - "libc", - "rand 0.6.5", - "rustc_version", - "smallvec", - "winapi 0.3.9", -] - [[package]] name = "parking_lot_core" version = "0.5.0" @@ -1116,6 +1378,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + [[package]] name = "ppv-lite86" version = "0.2.15" @@ -1135,6 +1403,12 @@ dependencies = [ "uint", ] +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + [[package]] name = "proc-macro2" version = "0.4.30" @@ -1215,7 +1489,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom", + "getrandom 0.1.16", "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", @@ -1263,7 +1537,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom", + "getrandom 0.1.16", ] [[package]] @@ -1371,9 +1645,9 @@ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "resolv-conf" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b263b4aa1b5de9ffc0054a2386f96992058bb6870aab516f8cdeb8a667d56dcb" +checksum = "11834e137f3b14e309437a8276714eed3a80d1ef894869e510f2c0c0b98b9f4a" dependencies = [ "hostname", "quick-error", @@ -1390,9 +1664,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.16" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustc-hex" @@ -1423,15 +1697,9 @@ checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" [[package]] name = "scopeguard" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" - -[[package]] -name = "scopeguard" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "semver" @@ -1479,6 +1747,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" +dependencies = [ + "dtoa", + "itoa", + "serde", + "url 2.2.2", +] + [[package]] name = "sha-1" version = "0.8.2" @@ -1491,6 +1771,12 @@ dependencies = [ "opaque-debug", ] +[[package]] +name = "sha1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" + [[package]] name = "sha2" version = "0.8.1" @@ -1503,26 +1789,6 @@ dependencies = [ "opaque-debug", ] -[[package]] -name = "signal-hook" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9c17dd3ba2d36023a5c9472ecddeda07e27fd0b05436e8c1e0c8f178185652" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-registry" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41" -dependencies = [ - "arc-swap", - "libc", -] - [[package]] name = "slab" version = "0.3.0" @@ -1531,9 +1797,9 @@ checksum = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" [[package]] name = "slab" -version = "0.4.2" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" [[package]] name = "smallvec" @@ -1556,18 +1822,21 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "stable_deref_trait" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" - [[package]] name = "static_assertions" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5" +[[package]] +name = "string" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" +dependencies = [ + "bytes", +] + [[package]] name = "strsim" version = "0.8.0" @@ -1610,9 +1879,9 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.12.3" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2 1.0.32", "quote 1.0.10", @@ -1650,6 +1919,15 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + [[package]] name = "time" version = "0.1.42" @@ -1683,6 +1961,15 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tinyvec" version = "1.5.0" @@ -1698,35 +1985,11 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" -[[package]] -name = "tokio" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" -dependencies = [ - "bytes", - "futures", - "mio", - "num_cpus", - "tokio-codec", - "tokio-current-thread", - "tokio-executor", - "tokio-fs", - "tokio-io", - "tokio-reactor", - "tokio-sync", - "tokio-tcp", - "tokio-threadpool", - "tokio-timer 0.2.12", - "tokio-udp", - "tokio-uds", -] - [[package]] name = "tokio-codec" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" +checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" dependencies = [ "bytes", "futures", @@ -1735,9 +1998,9 @@ dependencies = [ [[package]] name = "tokio-current-thread" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" +checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" dependencies = [ "futures", "tokio-executor", @@ -1745,30 +2008,19 @@ dependencies = [ [[package]] name = "tokio-executor" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6df436c42b0c3330a82d855d2ef017cd793090ad550a6bc2184f4b933532ab" -dependencies = [ - "crossbeam-utils 0.6.6", - "futures", -] - -[[package]] -name = "tokio-fs" -version = "0.1.6" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" +checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" dependencies = [ + "crossbeam-utils 0.7.2", "futures", - "tokio-io", - "tokio-threadpool", ] [[package]] name = "tokio-io" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" +checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" dependencies = [ "bytes", "futures", @@ -1777,45 +2029,28 @@ dependencies = [ [[package]] name = "tokio-reactor" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6732fe6b53c8d11178dcb77ac6d9682af27fc6d4cb87789449152e5377377146" +checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" dependencies = [ - "crossbeam-utils 0.6.6", + "crossbeam-utils 0.7.2", "futures", "lazy_static", "log 0.4.8", "mio", "num_cpus", "parking_lot 0.9.0", - "slab 0.4.2", + "slab 0.4.5", "tokio-executor", "tokio-io", "tokio-sync", ] -[[package]] -name = "tokio-signal" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd6dc5276ea05ce379a16de90083ec80836440d5ef8a6a39545a3207373b8296" -dependencies = [ - "futures", - "libc", - "mio", - "mio-uds", - "signal-hook", - "tokio-executor", - "tokio-io", - "tokio-reactor", - "winapi 0.3.9", -] - [[package]] name = "tokio-sync" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06554cce1ae4a50f42fba8023918afa931413aded705b560e29600ccf7c6d76" +checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" dependencies = [ "fnv", "futures", @@ -1823,9 +2058,9 @@ dependencies = [ [[package]] name = "tokio-tcp" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" +checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" dependencies = [ "bytes", "futures", @@ -1835,23 +2070,6 @@ dependencies = [ "tokio-reactor", ] -[[package]] -name = "tokio-threadpool" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c32ffea4827978e9aa392d2f743d973c1dfa3730a2ed3f22ce1e6984da848c" -dependencies = [ - "crossbeam-deque", - "crossbeam-queue", - "crossbeam-utils 0.6.6", - "futures", - "lazy_static", - "log 0.4.8", - "num_cpus", - "slab 0.4.2", - "tokio-executor", -] - [[package]] name = "tokio-timer" version = "0.1.2" @@ -1864,44 +2082,26 @@ dependencies = [ [[package]] name = "tokio-timer" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1739638e364e558128461fc1ad84d997702c8e31c2e6b18fb99842268199e827" +checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" dependencies = [ - "crossbeam-utils 0.6.6", + "crossbeam-utils 0.7.2", "futures", - "slab 0.4.2", + "slab 0.4.5", "tokio-executor", ] [[package]] name = "tokio-udp" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02298505547f73e60f568359ef0d016d5acd6e830ab9bc7c4a5b3403440121b" -dependencies = [ - "bytes", - "futures", - "log 0.4.8", - "mio", - "tokio-codec", - "tokio-io", - "tokio-reactor", -] - -[[package]] -name = "tokio-uds" -version = "0.2.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" +checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" dependencies = [ "bytes", "futures", - "iovec", - "libc", "log 0.4.8", "mio", - "mio-uds", "tokio-codec", "tokio-io", "tokio-reactor", @@ -1924,69 +2124,46 @@ checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" [[package]] name = "trust-dns-proto" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0838272e89f1c693b4df38dc353412e389cf548ceed6f9fd1af5a8d6e0e7cf74" -dependencies = [ - "byteorder", - "failure", - "futures", - "idna", - "lazy_static", - "log 0.4.8", - "rand 0.5.6", - "smallvec", - "socket2", - "tokio-executor", - "tokio-io", - "tokio-reactor", - "tokio-tcp", - "tokio-timer 0.2.12", - "tokio-udp", - "url", -] - -[[package]] -name = "trust-dns-proto" -version = "0.6.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09144f0992b0870fa8d2972cc069cbf1e3c0fda64d1f3d45c4d68d0e0b52ad4e" +checksum = "5559ebdf6c2368ddd11e20b11d6bbaf9e46deb803acd7815e93f5a7b4a6d2901" dependencies = [ "byteorder", + "enum-as-inner", "failure", "futures", - "idna", + "idna 0.1.5", "lazy_static", "log 0.4.8", - "rand 0.5.6", + "rand 0.6.5", "smallvec", "socket2", "tokio-executor", "tokio-io", "tokio-reactor", "tokio-tcp", - "tokio-timer 0.2.12", + "tokio-timer 0.2.13", "tokio-udp", - "url", + "url 1.7.2", ] [[package]] name = "trust-dns-resolver" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9f877f7a1ad821ab350505e1f1b146a4960402991787191d6d8cab2ce2de2c" +checksum = "6c9992e58dba365798803c0b91018ff6c8d3fc77e06977c4539af2a6bfe0a039" dependencies = [ "cfg-if 0.1.10", "failure", "futures", - "ipconfig 0.1.9", + "ipconfig", "lazy_static", "log 0.4.8", "lru-cache", "resolv-conf", "smallvec", - "tokio", - "trust-dns-proto 0.6.3", + "tokio-executor", + "trust-dns-proto", ] [[package]] @@ -2064,18 +2241,21 @@ version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" dependencies = [ - "idna", + "idna 0.1.5", "matches", - "percent-encoding", + "percent-encoding 1.0.1", ] [[package]] -name = "uuid" -version = "0.7.4" +name = "url" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" dependencies = [ - "rand 0.6.5", + "form_urlencoded", + "idna 0.2.3", + "matches", + "percent-encoding 2.1.0", ] [[package]] @@ -2102,6 +2282,12 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + [[package]] name = "web3" version = "0.8.0" @@ -2110,7 +2296,7 @@ checksum = "076f34ed252d74a8521e3b013254b1a39f94a98f23aae7cfc85cda6e7b395664" dependencies = [ "arrayvec", "base64 0.10.1", - "derive_more", + "derive_more 0.15.0", "ethabi", "ethereum-types", "futures", @@ -2121,7 +2307,7 @@ dependencies = [ "serde", "serde_json", "tokio-timer 0.1.2", - "url", + "url 1.7.2", ] [[package]] @@ -2133,7 +2319,7 @@ dependencies = [ "hyper", "rand 0.6.5", "unicase", - "url", + "url 1.7.2", "websocket-base", ] @@ -2150,12 +2336,6 @@ dependencies = [ "sha-1", ] -[[package]] -name = "widestring" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7157704c2e12e3d2189c507b7482c52820a16dfa4465ba91add92f266667cadb" - [[package]] name = "widestring" version = "0.4.0" @@ -2196,15 +2376,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "winreg" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27a759395c1195c4cc5cda607ef6f8f6498f64e78f7900f5de0a127a424704a" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "winreg" version = "0.6.2" @@ -2223,15 +2394,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "winutil" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7daf138b6b14196e3830a588acf1e86966c694d3e8fb026fb105b8b5dca07e6e" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "ws2_32-sys" version = "0.2.1" diff --git a/masq_lib/Cargo.toml b/masq_lib/Cargo.toml index 2cfbf99ed..9670594c1 100644 --- a/masq_lib/Cargo.toml +++ b/masq_lib/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" workspace = "../node" [dependencies] -actix = "0.7.9" +actix = "0.8.3" clap = "2.33.3" const_format = "0.2.22" crossbeam-channel = "0.5.1" diff --git a/node/Cargo.lock b/node/Cargo.lock index b71c2284f..0c653979d 100644 --- a/node/Cargo.lock +++ b/node/Cargo.lock @@ -4,39 +4,180 @@ version = 3 [[package]] name = "actix" -version = "0.7.9" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c616db5fa4b0c40702fb75201c2af7f8aa8f3a2e2c1dda3b0655772aa949666" +checksum = "671ce3d27313f236827a5dd153a1073ad03ef31fc77f562020263e7830cf1ef7" dependencies = [ + "actix-http", + "actix-rt", "actix_derive", "bitflags", "bytes 0.4.12", "crossbeam-channel 0.3.9", - "failure", - "fnv", + "derive_more 0.14.1", "futures", - "libc", + "hashbrown 0.3.1", + "lazy_static", "log 0.4.14", - "parking_lot 0.7.1", + "parking_lot 0.8.0", "smallvec 0.6.13", - "tokio 0.1.22", "tokio-codec", "tokio-executor", "tokio-io", + "tokio-tcp", + "tokio-timer 0.2.13", + "trust-dns-resolver 0.11.1", +] + +[[package]] +name = "actix-codec" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f2c11af4b06dc935d8e1b1491dad56bfb32febc49096a91e773f8535c176453" +dependencies = [ + "bytes 0.4.12", + "futures", + "log 0.4.14", + "tokio-codec", + "tokio-io", +] + +[[package]] +name = "actix-connect" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fade9bd4bb46bacde89f1e726c7a3dd230536092712f5d94d77ca57c087fca0" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "derive_more 0.15.0", + "either", + "futures", + "http 0.1.21", + "log 0.4.14", + "tokio-current-thread", + "tokio-tcp", + "trust-dns-resolver 0.11.1", +] + +[[package]] +name = "actix-http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb50f77cd28240d344fd54afd205bae8760a3b0ad448b1716a2aa31e24db139" +dependencies = [ + "actix-codec", + "actix-connect", + "actix-server-config", + "actix-service", + "actix-threadpool", + "actix-utils", + "base64 0.10.1", + "bitflags", + "bytes 0.4.12", + "chrono", + "copyless", + "derive_more 0.15.0", + "either", + "encoding_rs", + "futures", + "h2 0.1.26", + "hashbrown 0.6.3", + "http 0.1.21", + "httparse", + "indexmap", + "language-tags", + "lazy_static", + "log 0.4.14", + "mime 0.3.16", + "percent-encoding 2.1.0", + "rand 0.7.3", + "regex", + "serde", + "serde_json", + "serde_urlencoded 0.6.1", + "sha1", + "slab 0.4.2", + "time", + "tokio-current-thread", + "tokio-tcp", + "tokio-timer 0.2.13", + "trust-dns-resolver 0.11.1", +] + +[[package]] +name = "actix-rt" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88c9da1d06603d82ec2b6690fc5b80eb626cd2d6b573f3d9a71d5252e06d098e" +dependencies = [ + "actix-threadpool", + "copyless", + "futures", + "tokio-current-thread", + "tokio-executor", "tokio-reactor", - "tokio-signal", + "tokio-timer 0.2.13", +] + +[[package]] +name = "actix-server-config" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "483a34989c682d93142bacad6300375bb6ad8002d2e0bb249dbad86128b9ff30" +dependencies = [ + "futures", + "tokio-io", "tokio-tcp", +] + +[[package]] +name = "actix-service" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bca5b48e928841ff7e7dce1fdb5b0d4582f6b1b976e08f4bac3f640643e0773f" +dependencies = [ + "futures", +] + +[[package]] +name = "actix-threadpool" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b5ae85d13da7e6fb86b1b7bc83185e0e3bd4cc5f421c887e1803796c034d35d" +dependencies = [ + "derive_more 0.15.0", + "futures", + "lazy_static", + "log 0.4.14", + "num_cpus", + "parking_lot 0.9.0", + "threadpool", +] + +[[package]] +name = "actix-utils" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "908c3109948f5c37a8b57fd343a37dcad5bb1d90bfd06300ac96b17bbe017b95" +dependencies = [ + "actix-codec", + "actix-service", + "bytes 0.4.12", + "either", + "futures", + "log 0.4.14", + "tokio-current-thread", "tokio-timer 0.2.13", - "trust-dns-proto 0.5.0", - "trust-dns-resolver 0.10.3", - "uuid", ] [[package]] name = "actix_derive" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4300e9431455322ae393d43a2ba1ef96b8080573c0fc23b196219efedfb6ba69" +checksum = "0bf5f6d7bf2d220ae8b4a7ae02a572bb35b7c4806b24049af905ab8110de156c" dependencies = [ "proc-macro2 0.4.30", "quote 0.6.13", @@ -92,6 +233,15 @@ dependencies = [ "stream-cipher", ] +[[package]] +name = "ahash" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29661b60bec623f0586702976ff4d0c9942dcb6723161c2df0eea78455cfedfb" +dependencies = [ + "const-random", +] + [[package]] name = "ahash" version = "0.7.6" @@ -127,12 +277,6 @@ version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee10e43ae4a853c0a3591d4e2ada1719e553be18199d9da9d4a83f5927c2f5c7" -[[package]] -name = "arc-swap" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d25d88fd6b8041580a654f9d0c581a047baee2b3efee13275f2fc392fc75034" - [[package]] name = "arrayref" version = "0.3.6" @@ -403,6 +547,28 @@ dependencies = [ "bitflags", ] +[[package]] +name = "const-random" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f590d95d011aa80b063ffe3253422ed5aa462af4e9867d43ce8337562bac77c4" +dependencies = [ + "const-random-macro", + "proc-macro-hack", +] + +[[package]] +name = "const-random-macro" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "615f6e27d000a2bffbc7f2f6a8669179378fa27ee4d0a509e985dfc0a7defb40" +dependencies = [ + "getrandom 0.2.3", + "lazy_static", + "proc-macro-hack", + "tiny-keccak 2.0.2", +] + [[package]] name = "const_format" version = "0.2.22" @@ -429,6 +595,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +[[package]] +name = "copyless" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2df960f5d869b2dd8532793fde43eb5427cceb126c929747a26823ab0eeb536" + [[package]] name = "core-foundation" version = "0.7.0" @@ -532,7 +704,7 @@ dependencies = [ "lazy_static", "maybe-uninit", "memoffset 0.5.6", - "scopeguard 1.1.0", + "scopeguard", ] [[package]] @@ -545,7 +717,7 @@ dependencies = [ "crossbeam-utils 0.8.5", "lazy_static", "memoffset 0.6.4", - "scopeguard 1.1.0", + "scopeguard", ] [[package]] @@ -674,6 +846,18 @@ dependencies = [ "syn 1.0.67", ] +[[package]] +name = "derive_more" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d944ac6003ed268757ef1ee686753b57efc5fcf0ebe7b64c9fc81e7e32ff839" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "rustc_version", + "syn 0.15.44", +] + [[package]] name = "derive_more" version = "0.15.0" @@ -747,6 +931,12 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "dtoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" + [[package]] name = "either" version = "1.6.1" @@ -779,15 +969,6 @@ dependencies = [ "syn 0.15.44", ] -[[package]] -name = "error-chain" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6930e04918388a9a2e41d518c25cf679ccafe26733fb4127dbf21993f2575d46" -dependencies = [ - "backtrace", -] - [[package]] name = "error-chain" version = "0.12.4" @@ -803,13 +984,13 @@ version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebdeeea85a6d217b9fcc862906d7e283c047e04114165c433756baf5dce00a6c" dependencies = [ - "error-chain 0.12.4", + "error-chain", "ethereum-types", "rustc-hex", "serde", "serde_derive", "serde_json", - "tiny-keccak", + "tiny-keccak 1.5.0", ] [[package]] @@ -822,7 +1003,7 @@ dependencies = [ "fixed-hash 0.3.2", "impl-rlp", "impl-serde", - "tiny-keccak", + "tiny-keccak 1.5.0", ] [[package]] @@ -864,7 +1045,7 @@ dependencies = [ "pbkdf2 0.3.0", "scrypt", "sha2 0.8.2", - "tiny-keccak", + "tiny-keccak 1.5.0", ] [[package]] @@ -1176,6 +1357,22 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d36fab90f82edc3c747f9d438e06cf0a491055896f2a279638bb5beed6c40177" +[[package]] +name = "hashbrown" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29fba9abe4742d586dfd0c06ae4f7e73a1c2d86b856933509b269d82cdf06e18" + +[[package]] +name = "hashbrown" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead" +dependencies = [ + "ahash 0.2.19", + "autocfg 0.1.7", +] + [[package]] name = "hashbrown" version = "0.9.1" @@ -1188,7 +1385,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "ahash", + "ahash 0.7.6", ] [[package]] @@ -1537,19 +1734,6 @@ dependencies = [ "libc", ] -[[package]] -name = "ipconfig" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f7eadeaf4b52700de180d147c4805f199854600b36faa963d91114827b2ffc" -dependencies = [ - "error-chain 0.8.1", - "socket2 0.3.15", - "widestring 0.2.2", - "winapi 0.3.9", - "winreg 0.5.1", -] - [[package]] name = "ipconfig" version = "0.2.2" @@ -1557,7 +1741,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" dependencies = [ "socket2 0.3.15", - "widestring 0.4.3", + "widestring", "winapi 0.3.9", "winreg 0.6.2", ] @@ -1736,23 +1920,13 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" -[[package]] -name = "lock_api" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" -dependencies = [ - "owning_ref", - "scopeguard 0.3.3", -] - [[package]] name = "lock_api" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed946d4529956a20f2d63ebe1b69996d5a2137c91913fe3ebbeff957f5bca7ff" dependencies = [ - "scopeguard 1.1.0", + "scopeguard", ] [[package]] @@ -1761,7 +1935,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" dependencies = [ - "scopeguard 1.1.0", + "scopeguard", ] [[package]] @@ -1770,7 +1944,7 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" dependencies = [ - "scopeguard 1.1.0", + "scopeguard", ] [[package]] @@ -2103,7 +2277,7 @@ dependencies = [ "heck", "http 0.2.5", "indoc", - "ipconfig 0.2.2", + "ipconfig", "itertools", "jsonrpc-core", "lazy_static", @@ -2271,15 +2445,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "owning_ref" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "parity-codec" version = "3.5.4" @@ -2302,16 +2467,6 @@ dependencies = [ "serde", ] -[[package]] -name = "parking_lot" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" -dependencies = [ - "lock_api 0.1.5", - "parking_lot_core 0.4.0", -] - [[package]] name = "parking_lot" version = "0.8.0" @@ -2345,19 +2500,6 @@ dependencies = [ "parking_lot_core 0.8.5", ] -[[package]] -name = "parking_lot_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" -dependencies = [ - "libc", - "rand 0.6.5", - "rustc_version", - "smallvec 0.6.13", - "winapi 0.3.9", -] - [[package]] name = "parking_lot_core" version = "0.5.0" @@ -2924,7 +3066,7 @@ dependencies = [ "pin-project-lite", "serde", "serde_json", - "serde_urlencoded", + "serde_urlencoded 0.7.0", "tokio 1.13.0", "tokio-native-tls", "url 2.2.2", @@ -3051,12 +3193,6 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" -[[package]] -name = "scopeguard" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" - [[package]] name = "scopeguard" version = "1.1.0" @@ -3158,6 +3294,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" +dependencies = [ + "dtoa", + "itoa", + "serde", + "url 2.2.2", +] + [[package]] name = "serde_urlencoded" version = "0.7.0" @@ -3235,16 +3383,6 @@ dependencies = [ "opaque-debug 0.3.0", ] -[[package]] -name = "signal-hook-registry" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e12110bc539e657a646068aaf5eb5b63af9d0c1f7b29c97113fad80e15f035" -dependencies = [ - "arc-swap", - "libc", -] - [[package]] name = "simple-server" version = "0.4.0" @@ -3334,12 +3472,6 @@ dependencies = [ "serde", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - [[package]] name = "static_assertions" version = "0.2.5" @@ -3514,6 +3646,15 @@ dependencies = [ "syn 1.0.67", ] +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + [[package]] name = "time" version = "0.1.44" @@ -3566,6 +3707,15 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tinyvec" version = "0.3.4" @@ -3723,23 +3873,6 @@ dependencies = [ "tokio-sync", ] -[[package]] -name = "tokio-signal" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0c34c6e548f101053321cba3da7cbb87a610b85555884c41b07da2eb91aff12" -dependencies = [ - "futures", - "libc", - "mio 0.6.22", - "mio-uds", - "signal-hook-registry", - "tokio-executor", - "tokio-io", - "tokio-reactor", - "winapi 0.3.9", -] - [[package]] name = "tokio-sync" version = "0.1.8" @@ -3914,41 +4047,18 @@ dependencies = [ [[package]] name = "trust-dns-proto" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0838272e89f1c693b4df38dc353412e389cf548ceed6f9fd1af5a8d6e0e7cf74" -dependencies = [ - "byteorder", - "failure", - "futures", - "idna 0.1.5", - "lazy_static", - "log 0.4.14", - "rand 0.5.6", - "smallvec 0.6.13", - "socket2 0.3.15", - "tokio-executor", - "tokio-io", - "tokio-reactor", - "tokio-tcp", - "tokio-timer 0.2.13", - "tokio-udp", - "url 1.7.2", -] - -[[package]] -name = "trust-dns-proto" -version = "0.6.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09144f0992b0870fa8d2972cc069cbf1e3c0fda64d1f3d45c4d68d0e0b52ad4e" +checksum = "5559ebdf6c2368ddd11e20b11d6bbaf9e46deb803acd7815e93f5a7b4a6d2901" dependencies = [ "byteorder", + "enum-as-inner", "failure", "futures", "idna 0.1.5", "lazy_static", "log 0.4.14", - "rand 0.5.6", + "rand 0.6.5", "smallvec 0.6.13", "socket2 0.3.15", "tokio-executor", @@ -3987,21 +4097,21 @@ dependencies = [ [[package]] name = "trust-dns-resolver" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9f877f7a1ad821ab350505e1f1b146a4960402991787191d6d8cab2ce2de2c" +checksum = "6c9992e58dba365798803c0b91018ff6c8d3fc77e06977c4539af2a6bfe0a039" dependencies = [ "cfg-if 0.1.10", "failure", "futures", - "ipconfig 0.1.9", + "ipconfig", "lazy_static", "log 0.4.14", "lru-cache", "resolv-conf", "smallvec 0.6.13", - "tokio 0.1.22", - "trust-dns-proto 0.6.3", + "tokio-executor", + "trust-dns-proto 0.7.4", ] [[package]] @@ -4013,7 +4123,7 @@ dependencies = [ "cfg-if 0.1.10", "failure", "futures", - "ipconfig 0.2.2", + "ipconfig", "lazy_static", "log 0.4.14", "lru-cache", @@ -4160,15 +4270,6 @@ dependencies = [ "percent-encoding 2.1.0", ] -[[package]] -name = "uuid" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a" -dependencies = [ - "rand 0.6.5", -] - [[package]] name = "vcpkg" version = "0.2.10" @@ -4316,7 +4417,7 @@ checksum = "076f34ed252d74a8521e3b013254b1a39f94a98f23aae7cfc85cda6e7b395664" dependencies = [ "arrayvec 0.4.12", "base64 0.10.1", - "derive_more", + "derive_more 0.15.0", "ethabi", "ethereum-types", "futures", @@ -4371,12 +4472,6 @@ dependencies = [ "tokio-tcp", ] -[[package]] -name = "widestring" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7157704c2e12e3d2189c507b7482c52820a16dfa4465ba91add92f266667cadb" - [[package]] name = "widestring" version = "0.4.3" @@ -4417,15 +4512,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "winreg" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27a759395c1195c4cc5cda607ef6f8f6498f64e78f7900f5de0a127a424704a" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "winreg" version = "0.6.2" diff --git a/node/Cargo.toml b/node/Cargo.toml index 04d71a157..a3066de0b 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -11,7 +11,7 @@ edition = "2021" members = ["../multinode_integration_tests", "../masq_lib", "../masq"] [dependencies] -actix = "= 0.7.9" +actix = "0.8.3" backtrace = "0.3.62" base64 = "0.13.0" bytes = "0.4.12" diff --git a/node/src/accountant/mod.rs b/node/src/accountant/mod.rs index c21b31840..d72d8f603 100644 --- a/node/src/accountant/mod.rs +++ b/node/src/accountant/mod.rs @@ -27,14 +27,7 @@ use crate::sub_lib::logger::Logger; use crate::sub_lib::peer_actors::{BindMessage, StartMessage}; use crate::sub_lib::utils::NODE_MAILBOX_CAPACITY; use crate::sub_lib::wallet::Wallet; -use actix::Actor; -use actix::Addr; -use actix::AsyncContext; -use actix::Context; -use actix::Handler; -use actix::Message; -use actix::Recipient; -use futures::future::Future; +use actix::{Actor, Addr, AsyncContext, Context, Handler, Message, Recipient}; use itertools::Itertools; use lazy_static::lazy_static; use masq_lib::messages::UiMessageError::UnexpectedMessage; @@ -47,6 +40,7 @@ use receivable_dao::ReceivableDao; use std::ops::Add; use std::thread; use std::time::{Duration, SystemTime}; +use futures::Future; pub const CRASH_KEY: &str = "ACCOUNTANT"; pub const DEFAULT_PAYABLE_SCAN_INTERVAL: u64 = 3600; // one hour @@ -111,11 +105,13 @@ impl Actor for Accountant { } #[derive(Debug, Eq, Message, PartialEq)] + pub struct ReceivedPayments { payments: Vec, } #[derive(Debug, Eq, Message, PartialEq)] + pub struct SentPayments { pub payments: Vec>, } @@ -805,7 +801,7 @@ impl Accountant { // segfaults on the Mac when using u64::try_from (i64). This is an attempt to // work around that. pub fn jackass_unsigned_to_signed(unsigned: u64) -> Result { - if unsigned <= (std::i64::MAX as u64) { + if unsigned <= (i64::MAX as u64) { Ok(unsigned as i64) } else { Err(PaymentError::SignConversion(unsigned)) @@ -2905,12 +2901,12 @@ pub mod tests { None, ); - subject.record_service_provided(std::i64::MAX as u64, 1, 2, &wallet); + subject.record_service_provided(i64::MAX as u64, 1, 2, &wallet); TestLogHandler::new().exists_log_containing(&format!( "ERROR: Accountant: Overflow error trying to record service provided to Node with consuming wallet {}: service rate {}, byte rate 1, payload size 2. Skipping", wallet, - std::i64::MAX as u64 + i64::MAX as u64 )); } @@ -2929,12 +2925,12 @@ pub mod tests { None, ); - subject.record_service_consumed(std::i64::MAX as u64, 1, 2, &wallet); + subject.record_service_consumed(i64::MAX as u64, 1, 2, &wallet); TestLogHandler::new().exists_log_containing(&format!( "ERROR: Accountant: Overflow error trying to record service consumed from Node with earning wallet {}: service rate {}, byte rate 1, payload size 2. Skipping", wallet, - std::i64::MAX as u64 + i64::MAX as u64 )); } @@ -2945,7 +2941,7 @@ pub mod tests { let payments = SentPayments { payments: vec![Ok(Payment::new( wallet.clone(), - std::u64::MAX, + u64::MAX, H256::from_uint(&U256::from(1)), ))], }; @@ -2963,7 +2959,7 @@ pub mod tests { TestLogHandler::new().exists_log_containing(&format!( "ERROR: Accountant: Overflow error trying to record payment of {} sent to earning wallet {} (transaction {}). Skipping", - std::u64::MAX, + u64::MAX, wallet, H256::from_uint(&U256::from(1)) )); @@ -3048,15 +3044,15 @@ pub mod tests { #[test] fn jackass_unsigned_to_signed_handles_max_allowable() { - let result = jackass_unsigned_to_signed(std::i64::MAX as u64); + let result = jackass_unsigned_to_signed(i64::MAX as u64); - assert_eq!(result, Ok(std::i64::MAX)); + assert_eq!(result, Ok(i64::MAX)); } #[test] fn jackass_unsigned_to_signed_handles_max_plus_one() { - let attempt = (std::i64::MAX as u64) + 1; - let result = jackass_unsigned_to_signed((std::i64::MAX as u64) + 1); + let attempt = (i64::MAX as u64) + 1; + let result = jackass_unsigned_to_signed((i64::MAX as u64) + 1); assert_eq!(result, Err(PaymentError::SignConversion(attempt))); } diff --git a/node/src/actor_system_factory.rs b/node/src/actor_system_factory.rs index 15fc24100..7022b116a 100644 --- a/node/src/actor_system_factory.rs +++ b/node/src/actor_system_factory.rs @@ -44,7 +44,7 @@ use crate::sub_lib::ui_gateway::UiGatewayConfig; use crate::sub_lib::ui_gateway::UiGatewaySubs; use actix::Addr; use actix::Recipient; -use actix::{Actor, Arbiter}; +use actix::prelude::Actor; use crossbeam_channel::{unbounded, Sender}; use masq_lib::blockchains::chains::Chain; use masq_lib::ui_gateway::NodeFromUiMessage; @@ -252,7 +252,7 @@ impl ActorFactory for ActorFactoryReal { ) -> (DispatcherSubs, Recipient) { let crash_point = config.crash_point; let descriptor = config.node_descriptor_opt.clone(); - let addr: Addr = Arbiter::start(move |_| { + let addr: Addr = Actor::create(move |_| { Dispatcher::new(crash_point, descriptor.expect_v("node descriptor")) }); ( @@ -268,7 +268,7 @@ impl ActorFactory for ActorFactoryReal { is_decentralized: bool, consuming_wallet_balance: Option, ) -> ProxyServerSubs { - let addr: Addr = Arbiter::start(move |_| { + let addr: Addr = Actor::create(move |_| { ProxyServer::new( main_cryptde, alias_cryptde, @@ -280,7 +280,7 @@ impl ActorFactory for ActorFactoryReal { } fn make_and_start_hopper(&self, config: HopperConfig) -> HopperSubs { - let addr: Addr = Arbiter::start(|_| Hopper::new(config)); + let addr: Addr = Actor::create(|_| Hopper::new(config)); Hopper::make_subs_from(&addr) } @@ -291,7 +291,7 @@ impl ActorFactory for ActorFactoryReal { ) -> NeighborhoodSubs { let config_clone = config.clone(); let addr: Addr = - Arbiter::start(move |_| Neighborhood::new(cryptde, &config_clone)); + Actor::create(move |_| Neighborhood::new(cryptde, &config_clone)); Neighborhood::make_subs_from(&addr) } @@ -318,7 +318,7 @@ impl ActorFactory for ActorFactoryReal { )); let config_dao_factory = DaoFactoryReal::new(data_directory, config.blockchain_bridge_config.chain, false); - let addr: Addr = Arbiter::start(move |_| { + let addr: Addr = Actor::create(move |_| { Accountant::new( &cloned_config, Box::new(payable_dao_factory), @@ -332,7 +332,7 @@ impl ActorFactory for ActorFactoryReal { fn make_and_start_ui_gateway(&self, config: UiGatewayConfig) -> UiGatewaySubs { let ui_gateway = UiGateway::new(&config); - let addr: Addr = Arbiter::start(|_| ui_gateway); + let addr: Addr = Actor::create(|_| ui_gateway); UiGateway::make_subs_from(&addr) } @@ -341,12 +341,12 @@ impl ActorFactory for ActorFactoryReal { clandestine_discriminator_factories: Vec>, ) -> StreamHandlerPoolSubs { let addr: Addr = - Arbiter::start(|_| StreamHandlerPool::new(clandestine_discriminator_factories)); + Actor::create(|_| StreamHandlerPool::new(clandestine_discriminator_factories)); StreamHandlerPool::make_subs_from(&addr) } fn make_and_start_proxy_client(&self, config: ProxyClientConfig) -> ProxyClientSubs { - let addr: Addr = Arbiter::start(|_| ProxyClient::new(config)); + let addr: Addr = Actor::create(|_| ProxyClient::new(config)); ProxyClient::make_subs_from(&addr) } diff --git a/node/src/blockchain/blockchain_interface.rs b/node/src/blockchain/blockchain_interface.rs index 8bdeec276..b4f0c8e8c 100644 --- a/node/src/blockchain/blockchain_interface.rs +++ b/node/src/blockchain/blockchain_interface.rs @@ -30,6 +30,7 @@ const TRANSACTION_LITERAL: H256 = H256 { const TRANSFER_METHOD_ID: [u8; 4] = [0xa9, 0x05, 0x9c, 0xbb]; #[derive(Clone, Debug, Eq, Message, PartialEq)] + pub struct Transaction { pub block_number: u64, pub from: Wallet, diff --git a/node/src/daemon/crash_notification.rs b/node/src/daemon/crash_notification.rs index 6eda537c2..f7597d437 100644 --- a/node/src/daemon/crash_notification.rs +++ b/node/src/daemon/crash_notification.rs @@ -17,6 +17,7 @@ trait Recognizer: Sync { } #[derive(Message, Clone, Debug, PartialEq)] + pub struct CrashNotification { pub process_id: u32, pub exit_code: Option, diff --git a/node/src/daemon/mod.rs b/node/src/daemon/mod.rs index 71b08875d..b66c4cef5 100644 --- a/node/src/daemon/mod.rs +++ b/node/src/daemon/mod.rs @@ -89,6 +89,7 @@ pub trait Launcher { } #[derive(Message, PartialEq, Clone)] + pub struct DaemonBindMessage { pub to_ui_message_recipient: Recipient, // for everybody to send UI-bound messages to pub from_ui_message_recipient: Recipient, // for the WebsocketSupervisor to send inbound UI messages to the UiGateway diff --git a/node/src/proxy_client/stream_handler_pool.rs b/node/src/proxy_client/stream_handler_pool.rs index 6abf77ca3..ab2172fb6 100644 --- a/node/src/proxy_client/stream_handler_pool.rs +++ b/node/src/proxy_client/stream_handler_pool.rs @@ -544,7 +544,7 @@ mod tests { actix::run(move || { subject.process_package(payload, paying_wallet); ok(()) - }) + }); } #[test] diff --git a/node/src/proxy_server/mod.rs b/node/src/proxy_server/mod.rs index 2f196c858..8540d5013 100644 --- a/node/src/proxy_server/mod.rs +++ b/node/src/proxy_server/mod.rs @@ -40,16 +40,13 @@ use crate::sub_lib::stream_key::StreamKey; use crate::sub_lib::ttl_hashmap::TtlHashMap; use crate::sub_lib::utils::NODE_MAILBOX_CAPACITY; use crate::sub_lib::wallet::Wallet; -use actix::Actor; -use actix::Addr; -use actix::Context; -use actix::Handler; -use actix::Recipient; + use pretty_hex::PrettyHex; use std::collections::HashMap; use std::net::SocketAddr; use std::rc::Rc; use std::time::Duration; +use actix::{Actor, Addr, Context, Handler, Recipient}; use tokio::prelude::Future; pub const CRASH_KEY: &str = "PROXYSERVER"; @@ -532,7 +529,7 @@ impl ProxyServer { Err(e) => { error!( logger, - "Neighborhood refused to answer route request: {}", e + "Neighborhood refused to answer route request: {:?}", e ); } }; diff --git a/node/src/run_modes.rs b/node/src/run_modes.rs index e44c844eb..f37be411c 100644 --- a/node/src/run_modes.rs +++ b/node/src/run_modes.rs @@ -231,8 +231,8 @@ impl Runner for RunnerReal { System::current().stop_with_code(1); })); match system.run() { - 0 => Ok(()), - num_e => Err(RunnerError::Numeric(num_e)), + Ok(_) => Ok(()), + Err(_) => return Err(RunnerError::Numeric(1)) } } diff --git a/node/src/run_modes_factories.rs b/node/src/run_modes_factories.rs index 9dbc4fecf..8c19fe002 100644 --- a/node/src/run_modes_factories.rs +++ b/node/src/run_modes_factories.rs @@ -128,6 +128,7 @@ pub struct ClusteredParams { #[cfg(test)] mod tests { + use std::ptr::addr_of; use crate::daemon::daemon_initializer::{ DaemonInitializerReal, RecipientsFactoryReal, RerunnerReal, }; diff --git a/node/src/stream_messages.rs b/node/src/stream_messages.rs index 97948695b..3ad6f726c 100644 --- a/node/src/stream_messages.rs +++ b/node/src/stream_messages.rs @@ -11,6 +11,7 @@ use std::fmt::Formatter; use std::net::SocketAddr; #[derive(Message)] + pub struct AddStreamMsg { pub connection_info: ConnectionInfo, pub origin_port: Option, @@ -44,6 +45,7 @@ pub enum RemovedStreamType { } #[derive(PartialEq, Message)] + pub struct RemoveStreamMsg { pub local_addr: SocketAddr, pub peer_addr: SocketAddr, @@ -62,6 +64,7 @@ impl Debug for RemoveStreamMsg { } #[derive(Message, Clone)] + pub struct PoolBindMessage { pub dispatcher_subs: DispatcherSubs, pub stream_handler_pool_subs: StreamHandlerPoolSubs, diff --git a/node/src/sub_lib/accountant.rs b/node/src/sub_lib/accountant.rs index be371d657..e1a330666 100644 --- a/node/src/sub_lib/accountant.rs +++ b/node/src/sub_lib/accountant.rs @@ -44,6 +44,7 @@ impl Debug for AccountantSubs { } #[derive(Clone, PartialEq, Debug, Message)] + pub struct ReportRoutingServiceProvidedMessage { pub paying_wallet: Wallet, pub payload_size: usize, @@ -52,6 +53,7 @@ pub struct ReportRoutingServiceProvidedMessage { } #[derive(Clone, PartialEq, Debug, Message)] + pub struct ReportExitServiceProvidedMessage { pub paying_wallet: Wallet, pub payload_size: usize, @@ -60,6 +62,7 @@ pub struct ReportExitServiceProvidedMessage { } #[derive(Clone, PartialEq, Debug, Message)] + pub struct ReportRoutingServiceConsumedMessage { pub earning_wallet: Wallet, pub payload_size: usize, @@ -68,6 +71,7 @@ pub struct ReportRoutingServiceConsumedMessage { } #[derive(Clone, PartialEq, Debug, Message)] + pub struct ReportExitServiceConsumedMessage { pub earning_wallet: Wallet, pub payload_size: usize, @@ -76,11 +80,13 @@ pub struct ReportExitServiceConsumedMessage { } #[derive(Clone, PartialEq, Debug, Message)] + pub struct GetFinancialStatisticsMessage { pub client_id: u64, } #[derive(Clone, PartialEq, Debug, Message, Serialize, Deserialize)] + #[serde(rename_all = "camelCase")] pub struct FinancialStatisticsMessage { pub pending_credit: i64, diff --git a/node/src/sub_lib/blockchain_bridge.rs b/node/src/sub_lib/blockchain_bridge.rs index 1485d7d65..088cbabf4 100644 --- a/node/src/sub_lib/blockchain_bridge.rs +++ b/node/src/sub_lib/blockchain_bridge.rs @@ -42,12 +42,14 @@ impl Message for ReportAccountsPayable { } #[derive(Clone, PartialEq, Debug, Message)] + pub struct SetDbPasswordMsg { pub client_id: u64, pub password: String, } #[derive(Clone, PartialEq, Debug, Message)] + pub struct SetGasPriceMsg { pub client_id: u64, pub gas_price: String, diff --git a/node/src/sub_lib/configurator.rs b/node/src/sub_lib/configurator.rs index 12db5e0cd..61fbc119e 100644 --- a/node/src/sub_lib/configurator.rs +++ b/node/src/sub_lib/configurator.rs @@ -7,6 +7,7 @@ use std::fmt; use std::fmt::{Debug, Formatter}; #[derive(Debug, actix::Message, Clone, PartialEq)] + pub struct NewPasswordMessage { pub new_password: String, } diff --git a/node/src/sub_lib/dispatcher.rs b/node/src/sub_lib/dispatcher.rs index 8026dbd0f..7b18abef6 100644 --- a/node/src/sub_lib/dispatcher.rs +++ b/node/src/sub_lib/dispatcher.rs @@ -112,6 +112,7 @@ pub enum DispatcherError { } #[derive(PartialEq, Clone, Message)] + pub struct InboundClientData { pub peer_addr: SocketAddr, pub reception_port: Option, @@ -150,6 +151,7 @@ impl InboundClientData { } #[derive(PartialEq, Clone, Message, Debug)] + pub struct StreamShutdownMsg { pub peer_addr: SocketAddr, pub stream_type: RemovedStreamType, diff --git a/node/src/sub_lib/hopper.rs b/node/src/sub_lib/hopper.rs index d0c3b1764..7f655b146 100644 --- a/node/src/sub_lib/hopper.rs +++ b/node/src/sub_lib/hopper.rs @@ -31,6 +31,7 @@ use std::net::SocketAddr; /// of PublicKeys destined to be looked up in the database by the Dispatcher. /// This struct can be used only for single-hop traffic. #[derive(Clone, Debug, PartialEq, Message)] + pub struct NoLookupIncipientCoresPackage { pub public_key: PublicKey, pub node_addr: NodeAddr, @@ -58,6 +59,7 @@ impl NoLookupIncipientCoresPackage { /// New CORES package about to be sent to the Hopper and thence put on the MASQ Network #[derive(Clone, Debug, PartialEq, Message)] + pub struct IncipientCoresPackage { pub route: Route, pub payload: CryptData, @@ -93,6 +95,7 @@ impl IncipientCoresPackage { /// CORES package that has traversed the MASQ Network and is arriving at its destination #[derive(Clone, Debug, PartialEq, Message)] + pub struct ExpiredCoresPackage { pub immediate_neighbor: SocketAddr, pub paying_wallet: Option, diff --git a/node/src/sub_lib/neighborhood.rs b/node/src/sub_lib/neighborhood.rs index cd23dad87..f81c417c7 100644 --- a/node/src/sub_lib/neighborhood.rs +++ b/node/src/sub_lib/neighborhood.rs @@ -369,11 +369,8 @@ impl NodeQueryResponseMetadata { } } -//TODO probably dead code? #[derive(Clone, Debug, Message, PartialEq)] -pub struct BootstrapNeighborhoodNowMessage {} -#[derive(Clone, Debug, Message, PartialEq)] pub struct NeighborhoodDotGraphRequest { pub client_id: u64, } @@ -389,6 +386,7 @@ impl Message for NodeQueryMessage { } #[derive(Message, Clone)] + pub struct DispatcherNodeQueryMessage { pub query: NodeQueryMessage, pub context: TransmitDataMsg, @@ -438,11 +436,13 @@ pub struct RouteQueryResponse { } #[derive(Clone, Debug, Message, PartialEq)] + pub struct RemoveNeighborMessage { pub public_key: PublicKey, } #[derive(Clone, Debug, Message, PartialEq)] + pub enum NodeRecordMetadataMessage { Desirable(PublicKey, bool), } diff --git a/node/src/sub_lib/peer_actors.rs b/node/src/sub_lib/peer_actors.rs index 3a49f50a7..4e69d95b8 100644 --- a/node/src/sub_lib/peer_actors.rs +++ b/node/src/sub_lib/peer_actors.rs @@ -33,11 +33,13 @@ impl Debug for PeerActors { } #[derive(Debug, Message, Clone)] + pub struct BindMessage { pub peer_actors: PeerActors, } #[derive(Message, Clone)] + pub struct StartMessage {} #[cfg(test)] diff --git a/node/src/sub_lib/proxy_client.rs b/node/src/sub_lib/proxy_client.rs index 7a5a505d9..630667cad 100644 --- a/node/src/sub_lib/proxy_client.rs +++ b/node/src/sub_lib/proxy_client.rs @@ -34,6 +34,7 @@ pub struct ClientResponsePayload_0v1 { } #[derive(Message, Clone, Debug, PartialEq, Deserialize, Serialize)] + #[allow(non_camel_case_types)] pub struct DnsResolveFailure_0v1 { pub stream_key: StreamKey, @@ -91,6 +92,7 @@ impl ClientResponsePayload_0v1 { } #[derive(PartialEq, Clone, Message, Debug)] + pub struct InboundServerData { pub stream_key: StreamKey, pub last_data: bool, diff --git a/node/src/sub_lib/proxy_server.rs b/node/src/sub_lib/proxy_server.rs index 36334f49b..105aaee3f 100644 --- a/node/src/sub_lib/proxy_server.rs +++ b/node/src/sub_lib/proxy_server.rs @@ -55,6 +55,7 @@ impl ClientRequestPayload_0v1 { } #[derive(Message, Debug, PartialEq, Eq)] + pub struct AddReturnRouteMessage { pub return_route_id: u32, pub expected_services: Vec, @@ -63,6 +64,7 @@ pub struct AddReturnRouteMessage { } #[derive(Message, Debug, PartialEq)] + pub struct AddRouteMessage { pub stream_key: StreamKey, pub route: RouteQueryResponse, diff --git a/node/src/sub_lib/set_consuming_wallet_message.rs b/node/src/sub_lib/set_consuming_wallet_message.rs index a241ed49e..c90755a83 100644 --- a/node/src/sub_lib/set_consuming_wallet_message.rs +++ b/node/src/sub_lib/set_consuming_wallet_message.rs @@ -4,6 +4,7 @@ use crate::sub_lib::wallet::Wallet; use actix::Message; #[derive(Clone, PartialEq, Debug, Message)] + pub struct SetConsumingWalletMessage { pub wallet: Wallet, } diff --git a/node/src/sub_lib/stream_handler_pool.rs b/node/src/sub_lib/stream_handler_pool.rs index 8be26cb86..c8214cdc3 100644 --- a/node/src/sub_lib/stream_handler_pool.rs +++ b/node/src/sub_lib/stream_handler_pool.rs @@ -4,6 +4,7 @@ use crate::sub_lib::neighborhood::NodeQueryResponseMetadata; use actix::Message; #[derive(PartialEq, Debug, Message, Clone)] + pub struct TransmitDataMsg { pub endpoint: Endpoint, pub last_data: bool, @@ -12,6 +13,7 @@ pub struct TransmitDataMsg { } #[derive(Message, Clone)] + pub struct DispatcherNodeQueryResponse { pub result: Option, pub context: TransmitDataMsg, diff --git a/node/src/test_utils/recorder.rs b/node/src/test_utils/recorder.rs index 41133cdd8..bcc2f9f16 100644 --- a/node/src/test_utils/recorder.rs +++ b/node/src/test_utils/recorder.rs @@ -547,6 +547,7 @@ mod tests { use actix::System; #[derive(Debug, PartialEq, Message)] + struct FirstMessageType { string: String, } @@ -554,6 +555,7 @@ mod tests { recorder_message_handler!(FirstMessageType); #[derive(Debug, PartialEq, Message)] + struct SecondMessageType { size: usize, flag: bool, From fa4ba73eb5381305da9ccf3729ca37f9ca45c58d Mon Sep 17 00:00:00 2001 From: FinsaasGH Date: Wed, 24 Nov 2021 10:19:37 -0700 Subject: [PATCH 16/17] GH-509: Updated actix to 0.12.0 and related code --- dns_utility/Cargo.lock | 1043 +++-------------- masq_lib/Cargo.toml | 2 +- masq_lib/src/ui_gateway.rs | 2 + node/Cargo.lock | 410 +------ node/Cargo.toml | 2 +- node/src/accountant/mod.rs | 377 ++++-- node/src/actor_system_factory.rs | 74 +- node/src/blockchain/blockchain_bridge.rs | 93 +- node/src/blockchain/blockchain_interface.rs | 2 +- node/src/bootstrapper.rs | 14 +- node/src/crash_test_dummy.rs | 3 +- node/src/daemon/crash_notification.rs | 2 +- node/src/daemon/daemon_initializer.rs | 29 +- node/src/daemon/launcher.rs | 41 +- node/src/daemon/mod.rs | 263 ++++- node/src/dispatcher.rs | 118 +- node/src/hopper/consuming_service.rs | 55 +- node/src/hopper/mod.rs | 27 +- node/src/hopper/routing_service.rs | 269 ++++- node/src/listener_handler.rs | 28 +- node/src/neighborhood/mod.rs | 570 +++++++-- node/src/node_configurator/configurator.rs | 92 +- node/src/proxy_client/mod.rs | 144 ++- node/src/proxy_client/stream_establisher.rs | 14 +- node/src/proxy_client/stream_handler_pool.rs | 46 +- node/src/proxy_client/stream_reader.rs | 53 +- node/src/proxy_server/mod.rs | 531 +++++++-- node/src/run_modes.rs | 4 +- node/src/run_modes_factories.rs | 2 +- node/src/stream_handler_pool.rs | 231 +++- node/src/stream_messages.rs | 8 +- node/src/stream_reader.rs | 133 ++- node/src/sub_lib/accountant.rs | 12 +- node/src/sub_lib/blockchain_bridge.rs | 4 +- node/src/sub_lib/configurator.rs | 2 +- node/src/sub_lib/dispatcher.rs | 4 +- node/src/sub_lib/hopper.rs | 6 +- node/src/sub_lib/neighborhood.rs | 8 +- node/src/sub_lib/peer_actors.rs | 6 +- node/src/sub_lib/proxy_client.rs | 4 +- node/src/sub_lib/proxy_server.rs | 4 +- .../sub_lib/set_consuming_wallet_message.rs | 2 +- node/src/sub_lib/stream_handler_pool.rs | 4 +- node/src/test_utils/recorder.rs | 18 +- node/src/ui_gateway/mod.rs | 27 +- node/src/ui_gateway/websocket_supervisor.rs | 161 ++- 46 files changed, 3093 insertions(+), 1851 deletions(-) diff --git a/dns_utility/Cargo.lock b/dns_utility/Cargo.lock index b4fea9f89..3d138a18d 100644 --- a/dns_utility/Cargo.lock +++ b/dns_utility/Cargo.lock @@ -4,208 +4,47 @@ version = 3 [[package]] name = "actix" -version = "0.8.3" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671ce3d27313f236827a5dd153a1073ad03ef31fc77f562020263e7830cf1ef7" +checksum = "3720d0064a0ce5c0de7bd93bdb0a6caebab2a9b5668746145d7b3b0c5da02914" dependencies = [ - "actix-http", "actix-rt", "actix_derive", "bitflags", "bytes", - "crossbeam-channel 0.3.9", - "derive_more 0.14.1", - "futures", - "hashbrown 0.3.1", - "lazy_static", + "crossbeam-channel", + "futures-core", + "futures-sink", + "futures-task", + "futures-util", "log 0.4.8", - "parking_lot 0.8.0", - "smallvec", - "tokio-codec", - "tokio-executor", - "tokio-io", - "tokio-tcp", - "tokio-timer 0.2.13", - "trust-dns-resolver", -] - -[[package]] -name = "actix-codec" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f2c11af4b06dc935d8e1b1491dad56bfb32febc49096a91e773f8535c176453" -dependencies = [ - "bytes", - "futures", - "log 0.4.8", - "tokio-codec", - "tokio-io", -] - -[[package]] -name = "actix-connect" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fade9bd4bb46bacde89f1e726c7a3dd230536092712f5d94d77ca57c087fca0" -dependencies = [ - "actix-codec", - "actix-rt", - "actix-service", - "actix-utils", - "derive_more 0.15.0", - "either", - "futures", - "http", - "log 0.4.8", - "tokio-current-thread", - "tokio-tcp", - "trust-dns-resolver", -] - -[[package]] -name = "actix-http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb50f77cd28240d344fd54afd205bae8760a3b0ad448b1716a2aa31e24db139" -dependencies = [ - "actix-codec", - "actix-connect", - "actix-server-config", - "actix-service", - "actix-threadpool", - "actix-utils", - "base64 0.10.1", - "bitflags", - "bytes", - "chrono", - "copyless", - "derive_more 0.15.0", - "either", - "encoding_rs", - "futures", - "h2", - "hashbrown 0.6.3", - "http", - "httparse", - "indexmap", - "language-tags", - "lazy_static", - "log 0.4.8", - "mime 0.3.16", - "percent-encoding 2.1.0", - "rand 0.7.3", - "regex", - "serde", - "serde_json", - "serde_urlencoded", - "sha1", - "slab 0.4.5", - "time", - "tokio-current-thread", - "tokio-tcp", - "tokio-timer 0.2.13", - "trust-dns-resolver", + "once_cell", + "parking_lot 0.11.2", + "pin-project-lite", + "smallvec 1.7.0", + "tokio", + "tokio-util", ] [[package]] name = "actix-rt" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c9da1d06603d82ec2b6690fc5b80eb626cd2d6b573f3d9a71d5252e06d098e" -dependencies = [ - "actix-threadpool", - "copyless", - "futures", - "tokio-current-thread", - "tokio-executor", - "tokio-reactor", - "tokio-timer 0.2.13", -] - -[[package]] -name = "actix-server-config" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483a34989c682d93142bacad6300375bb6ad8002d2e0bb249dbad86128b9ff30" -dependencies = [ - "futures", - "tokio-io", - "tokio-tcp", -] - -[[package]] -name = "actix-service" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca5b48e928841ff7e7dce1fdb5b0d4582f6b1b976e08f4bac3f640643e0773f" -dependencies = [ - "futures", -] - -[[package]] -name = "actix-threadpool" -version = "0.1.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b5ae85d13da7e6fb86b1b7bc83185e0e3bd4cc5f421c887e1803796c034d35d" +checksum = "05c2f80ce8d0c990941c7a7a931f69fd0701b76d521f8d36298edf59cd3fbf1f" dependencies = [ - "derive_more 0.15.0", - "futures", - "lazy_static", - "log 0.4.8", - "num_cpus", - "parking_lot 0.9.0", - "threadpool", -] - -[[package]] -name = "actix-utils" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908c3109948f5c37a8b57fd343a37dcad5bb1d90bfd06300ac96b17bbe017b95" -dependencies = [ - "actix-codec", - "actix-service", - "bytes", - "either", - "futures", - "log 0.4.8", - "tokio-current-thread", - "tokio-timer 0.2.13", + "futures-core", + "tokio", ] [[package]] name = "actix_derive" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf5f6d7bf2d220ae8b4a7ae02a572bb35b7c4806b24049af905ab8110de156c" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "syn 0.15.44", -] - -[[package]] -name = "addr2line" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.2.19" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29661b60bec623f0586702976ff4d0c9942dcb6723161c2df0eea78455cfedfb" +checksum = "6d44b8fee1ced9671ba043476deddef739dd0959bf77030b26b738cc591737a7" dependencies = [ - "const-random", + "proc-macro2 1.0.32", + "quote 1.0.10", + "syn 1.0.81", ] [[package]] @@ -223,7 +62,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -249,7 +88,7 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi", "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -264,21 +103,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "backtrace" -version = "0.3.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6" -dependencies = [ - "addr2line", - "cc", - "cfg-if 1.0.0", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - [[package]] name = "base58" version = "0.1.0" @@ -345,13 +169,9 @@ checksum = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" [[package]] name = "bytes" -version = "0.4.12" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -dependencies = [ - "byteorder", - "iovec", -] +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "cc" @@ -371,17 +191,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chrono" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" -dependencies = [ - "num-integer", - "num-traits", - "time", -] - [[package]] name = "clap" version = "2.33.3" @@ -406,28 +215,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "const-random" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f590d95d011aa80b063ffe3253422ed5aa462af4e9867d43ce8337562bac77c4" -dependencies = [ - "const-random-macro", - "proc-macro-hack", -] - -[[package]] -name = "const-random-macro" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "615f6e27d000a2bffbc7f2f6a8669179378fa27ee4d0a509e985dfc0a7defb40" -dependencies = [ - "getrandom 0.2.3", - "lazy_static", - "proc-macro-hack", - "tiny-keccak 2.0.2", -] - [[package]] name = "const_format" version = "0.2.22" @@ -448,12 +235,6 @@ dependencies = [ "unicode-xid 0.2.0", ] -[[package]] -name = "copyless" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2df960f5d869b2dd8532793fde43eb5427cceb126c929747a26823ab0eeb536" - [[package]] name = "core-foundation" version = "0.7.0" @@ -470,15 +251,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" -[[package]] -name = "crossbeam-channel" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa" -dependencies = [ - "crossbeam-utils 0.6.6", -] - [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -486,28 +258,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" dependencies = [ "cfg-if 1.0.0", - "crossbeam-utils 0.8.3", -] - -[[package]] -name = "crossbeam-utils" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" -dependencies = [ - "cfg-if 0.1.10", - "lazy_static", -] - -[[package]] -name = "crossbeam-utils" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" -dependencies = [ - "autocfg 1.0.1", - "cfg-if 0.1.10", - "lazy_static", + "crossbeam-utils", ] [[package]] @@ -537,18 +288,6 @@ dependencies = [ "subtle 1.0.0", ] -[[package]] -name = "derive_more" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d944ac6003ed268757ef1ee686753b57efc5fcf0ebe7b64c9fc81e7e32ff839" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "rustc_version", - "syn 0.15.44", -] - [[package]] name = "derive_more" version = "0.15.0" @@ -585,38 +324,12 @@ dependencies = [ "winreg 0.10.1", ] -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - [[package]] name = "either" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd56b59865bce947ac5958779cfa508f6c3b9497cc762b7e24a12d11ccde2c4f" -[[package]] -name = "encoding_rs" -version = "0.8.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a74ea89a0a1b98f6332de42c95baff457ada66d1cb4030f9ff151b2041a1c746" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "enum-as-inner" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d58266c97445680766be408285e798d3401c6d4c378ec5552e78737e681e37d" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "syn 0.15.44", -] - [[package]] name = "error-chain" version = "0.12.4" @@ -638,7 +351,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "tiny-keccak 1.5.0", + "tiny-keccak", ] [[package]] @@ -651,7 +364,7 @@ dependencies = [ "fixed-hash", "impl-rlp", "impl-serde", - "tiny-keccak 1.5.0", + "tiny-keccak", ] [[package]] @@ -668,28 +381,6 @@ dependencies = [ "uint", ] -[[package]] -name = "failure" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" -dependencies = [ - "backtrace", - "failure_derive", -] - -[[package]] -name = "failure_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" -dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", - "syn 1.0.81", - "synstructure", -] - [[package]] name = "fake-simd" version = "0.1.2" @@ -710,48 +401,46 @@ dependencies = [ ] [[package]] -name = "fnv" -version = "1.0.7" +name = "fuchsia-cprng" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" [[package]] -name = "form_urlencoded" -version = "1.0.1" +name = "futures" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" -dependencies = [ - "matches", - "percent-encoding 2.1.0", -] +checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" [[package]] -name = "fuchsia-cprng" -version = "0.1.1" +name = "futures-core" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +checksum = "629316e42fe7c2a0b9a65b47d159ceaa5453ab14e8f0a3c5eedbb8cd55b4a445" [[package]] -name = "fuchsia-zircon" -version = "0.3.3" +name = "futures-sink" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags", - "fuchsia-zircon-sys", -] +checksum = "996c6442437b62d21a32cd9906f9c41e7dc1e19a9579843fad948696769305af" [[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" +name = "futures-task" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +checksum = "dabf1872aaab32c886832f2276d2f5399887e2bd613698a02359e4ea83f8de12" [[package]] -name = "futures" -version = "0.1.29" +name = "futures-util" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" +checksum = "41d22213122356472061ac0f1ab2cee28d2bac8491410fd68c2af53d1cedb83e" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] [[package]] name = "generic-array" @@ -770,73 +459,16 @@ checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ "cfg-if 1.0.0", "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.10.2+wasi-snapshot-preview1", -] - -[[package]] -name = "gimli" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" - -[[package]] -name = "h2" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" -dependencies = [ - "byteorder", - "bytes", - "fnv", - "futures", - "http", - "indexmap", - "log 0.4.8", - "slab 0.4.5", - "string", - "tokio-io", -] - -[[package]] -name = "hashbrown" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29fba9abe4742d586dfd0c06ae4f7e73a1c2d86b856933509b269d82cdf06e18" - -[[package]] -name = "hashbrown" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead" -dependencies = [ - "ahash", - "autocfg 0.1.7", + "wasi", ] -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" - [[package]] name = "heapsize" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -869,28 +501,6 @@ dependencies = [ "hmac", ] -[[package]] -name = "hostname" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" -dependencies = [ - "libc", - "match_cfg", - "winapi 0.3.9", -] - -[[package]] -name = "http" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "httparse" version = "1.3.4" @@ -907,13 +517,13 @@ dependencies = [ "httparse", "language-tags", "log 0.3.9", - "mime 0.2.6", + "mime", "num_cpus", "time", "traitobject", "typeable", "unicase", - "url 1.7.2", + "url", ] [[package]] @@ -927,17 +537,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "impl-codec" version = "0.2.0" @@ -966,22 +565,12 @@ dependencies = [ ] [[package]] -name = "indexmap" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" -dependencies = [ - "autocfg 1.0.1", - "hashbrown 0.11.2", -] - -[[package]] -name = "iovec" -version = "0.1.4" +name = "instant" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "libc", + "cfg-if 1.0.0", ] [[package]] @@ -992,7 +581,7 @@ checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" dependencies = [ "socket2", "widestring", - "winapi 0.3.9", + "winapi", "winreg 0.6.2", ] @@ -1024,16 +613,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - [[package]] name = "language-tags" version = "0.2.2" @@ -1068,12 +647,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "linked-hash-map" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" - [[package]] name = "lock_api" version = "0.2.0" @@ -1085,9 +658,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.3.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" +checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" dependencies = [ "scopeguard", ] @@ -1110,15 +683,6 @@ dependencies = [ "cfg-if 0.1.10", ] -[[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", -] - [[package]] name = "masq_lib" version = "1.0.0" @@ -1126,7 +690,7 @@ dependencies = [ "actix", "clap", "const_format", - "crossbeam-channel 0.5.1", + "crossbeam-channel", "itertools", "lazy_static", "nix", @@ -1140,12 +704,6 @@ dependencies = [ "websocket", ] -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - [[package]] name = "matches" version = "0.1.8" @@ -1188,62 +746,26 @@ dependencies = [ "log 0.3.9", ] -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "miniz_oxide" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" -dependencies = [ - "adler", - "autocfg 1.0.1", -] - [[package]] name = "mio" -version = "0.6.23" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" +checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", "libc", "log 0.4.8", "miow", - "net2", - "slab 0.4.5", - "winapi 0.2.8", + "ntapi", + "winapi", ] [[package]] name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", -] - -[[package]] -name = "net2" -version = "0.2.37" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1266,22 +788,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" [[package]] -name = "num-integer" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" -dependencies = [ - "autocfg 1.0.1", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.14" +name = "ntapi" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" dependencies = [ - "autocfg 1.0.1", + "winapi", ] [[package]] @@ -1295,13 +807,10 @@ dependencies = [ ] [[package]] -name = "object" -version = "0.27.1" +name = "once_cell" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" -dependencies = [ - "memchr", -] +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] name = "opaque-debug" @@ -1332,13 +841,13 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.9.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ - "lock_api 0.3.4", - "parking_lot_core 0.6.2", - "rustc_version", + "instant", + "lock_api 0.4.5", + "parking_lot_core 0.8.5", ] [[package]] @@ -1351,25 +860,24 @@ dependencies = [ "cloudabi", "libc", "rand 0.6.5", - "redox_syscall", + "redox_syscall 0.1.56", "rustc_version", - "smallvec", - "winapi 0.3.9", + "smallvec 0.6.13", + "winapi", ] [[package]] name = "parking_lot_core" -version = "0.6.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" dependencies = [ - "cfg-if 0.1.10", - "cloudabi", + "cfg-if 1.0.0", + "instant", "libc", - "redox_syscall", - "rustc_version", - "smallvec", - "winapi 0.3.9", + "redox_syscall 0.2.10", + "smallvec 1.7.0", + "winapi", ] [[package]] @@ -1379,10 +887,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" [[package]] -name = "percent-encoding" -version = "2.1.0" +name = "pin-project-lite" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" + +[[package]] +name = "pin-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "ppv-lite86" @@ -1403,12 +917,6 @@ dependencies = [ "uint", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - [[package]] name = "proc-macro2" version = "0.4.30" @@ -1427,12 +935,6 @@ dependencies = [ "unicode-xid 0.2.0", ] -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - [[package]] name = "quote" version = "0.6.13" @@ -1461,7 +963,7 @@ dependencies = [ "fuchsia-cprng", "libc", "rand_core 0.3.1", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1480,7 +982,7 @@ dependencies = [ "rand_os", "rand_pcg", "rand_xorshift", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1489,7 +991,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom 0.1.16", + "getrandom", "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", @@ -1537,7 +1039,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom 0.1.16", + "getrandom", ] [[package]] @@ -1575,7 +1077,7 @@ checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" dependencies = [ "libc", "rand_core 0.4.2", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1589,7 +1091,7 @@ dependencies = [ "libc", "rand_core 0.4.2", "rdrand", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1626,6 +1128,15 @@ version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" +[[package]] +name = "redox_syscall" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +dependencies = [ + "bitflags", +] + [[package]] name = "regex" version = "1.5.4" @@ -1643,16 +1154,6 @@ version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" -[[package]] -name = "resolv-conf" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11834e137f3b14e309437a8276714eed3a80d1ef894869e510f2c0c0b98b9f4a" -dependencies = [ - "hostname", - "quick-error", -] - [[package]] name = "rlp" version = "0.4.6" @@ -1662,12 +1163,6 @@ dependencies = [ "rustc-hex", ] -[[package]] -name = "rustc-demangle" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" - [[package]] name = "rustc-hex" version = "2.1.0" @@ -1747,18 +1242,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_urlencoded" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" -dependencies = [ - "dtoa", - "itoa", - "serde", - "url 2.2.2", -] - [[package]] name = "sha-1" version = "0.8.2" @@ -1771,12 +1254,6 @@ dependencies = [ "opaque-debug", ] -[[package]] -name = "sha1" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" - [[package]] name = "sha2" version = "0.8.1" @@ -1790,16 +1267,19 @@ dependencies = [ ] [[package]] -name = "slab" -version = "0.3.0" +name = "signal-hook-registry" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] [[package]] name = "slab" -version = "0.4.5" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" [[package]] name = "smallvec" @@ -1810,6 +1290,12 @@ dependencies = [ "maybe-uninit", ] +[[package]] +name = "smallvec" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" + [[package]] name = "socket2" version = "0.3.11" @@ -1818,8 +1304,8 @@ checksum = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85" dependencies = [ "cfg-if 0.1.10", "libc", - "redox_syscall", - "winapi 0.3.9", + "redox_syscall 0.1.56", + "winapi", ] [[package]] @@ -1828,15 +1314,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c19be23126415861cb3a23e501d34a708f7f9b2183c5252d690941c2e69199d5" -[[package]] -name = "string" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" -dependencies = [ - "bytes", -] - [[package]] name = "strsim" version = "0.8.0" @@ -1877,18 +1354,6 @@ dependencies = [ "unicode-xid 0.2.0", ] -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2 1.0.32", - "quote 1.0.10", - "syn 1.0.81", - "unicode-xid 0.2.0", -] - [[package]] name = "system-configuration" version = "0.4.0" @@ -1919,15 +1384,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - [[package]] name = "time" version = "0.1.42" @@ -1935,8 +1391,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" dependencies = [ "libc", - "redox_syscall", - "winapi 0.3.9", + "redox_syscall 0.1.56", + "winapi", ] [[package]] @@ -1961,15 +1417,6 @@ dependencies = [ "crunchy", ] -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - [[package]] name = "tinyvec" version = "1.5.0" @@ -1986,88 +1433,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] -name = "tokio-codec" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" -dependencies = [ - "bytes", - "futures", - "tokio-io", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" -dependencies = [ - "futures", - "tokio-executor", -] - -[[package]] -name = "tokio-executor" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures", -] - -[[package]] -name = "tokio-io" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" -dependencies = [ - "bytes", - "futures", - "log 0.4.8", -] - -[[package]] -name = "tokio-reactor" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures", - "lazy_static", - "log 0.4.8", - "mio", - "num_cpus", - "parking_lot 0.9.0", - "slab 0.4.5", - "tokio-executor", - "tokio-io", - "tokio-sync", -] - -[[package]] -name = "tokio-sync" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" -dependencies = [ - "fnv", - "futures", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.4" +name = "tokio" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" +checksum = "70e992e41e0d2fb9f755b37446f20900f64446ef54874f40a60c78f021ac6144" dependencies = [ + "autocfg 1.0.1", "bytes", - "futures", - "iovec", + "libc", + "memchr", "mio", - "tokio-io", - "tokio-reactor", + "once_cell", + "parking_lot 0.11.2", + "pin-project-lite", + "signal-hook-registry", + "winapi", ] [[package]] @@ -2077,34 +1457,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6131e780037787ff1b3f8aad9da83bca02438b72277850dd6ad0d455e0e20efc" dependencies = [ "futures", - "slab 0.3.0", + "slab", ] [[package]] -name = "tokio-timer" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" -dependencies = [ - "crossbeam-utils 0.7.2", - "futures", - "slab 0.4.5", - "tokio-executor", -] - -[[package]] -name = "tokio-udp" -version = "0.1.6" +name = "tokio-util" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" +checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" dependencies = [ "bytes", - "futures", + "futures-core", + "futures-sink", "log 0.4.8", - "mio", - "tokio-codec", - "tokio-io", - "tokio-reactor", + "pin-project-lite", + "tokio", ] [[package]] @@ -2122,50 +1489,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" -[[package]] -name = "trust-dns-proto" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5559ebdf6c2368ddd11e20b11d6bbaf9e46deb803acd7815e93f5a7b4a6d2901" -dependencies = [ - "byteorder", - "enum-as-inner", - "failure", - "futures", - "idna 0.1.5", - "lazy_static", - "log 0.4.8", - "rand 0.6.5", - "smallvec", - "socket2", - "tokio-executor", - "tokio-io", - "tokio-reactor", - "tokio-tcp", - "tokio-timer 0.2.13", - "tokio-udp", - "url 1.7.2", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c9992e58dba365798803c0b91018ff6c8d3fc77e06977c4539af2a6bfe0a039" -dependencies = [ - "cfg-if 0.1.10", - "failure", - "futures", - "ipconfig", - "lazy_static", - "log 0.4.8", - "lru-cache", - "resolv-conf", - "smallvec", - "tokio-executor", - "trust-dns-proto", -] - [[package]] name = "typeable" version = "0.1.2" @@ -2241,21 +1564,9 @@ version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" dependencies = [ - "idna 0.1.5", - "matches", - "percent-encoding 1.0.1", -] - -[[package]] -name = "url" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" -dependencies = [ - "form_urlencoded", - "idna 0.2.3", + "idna", "matches", - "percent-encoding 2.1.0", + "percent-encoding", ] [[package]] @@ -2282,12 +1593,6 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - [[package]] name = "web3" version = "0.8.0" @@ -2296,7 +1601,7 @@ checksum = "076f34ed252d74a8521e3b013254b1a39f94a98f23aae7cfc85cda6e7b395664" dependencies = [ "arrayvec", "base64 0.10.1", - "derive_more 0.15.0", + "derive_more", "ethabi", "ethereum-types", "futures", @@ -2306,8 +1611,8 @@ dependencies = [ "rustc-hex", "serde", "serde_json", - "tokio-timer 0.1.2", - "url 1.7.2", + "tokio-timer", + "url", ] [[package]] @@ -2319,7 +1624,7 @@ dependencies = [ "hyper", "rand 0.6.5", "unicase", - "url 1.7.2", + "url", "websocket-base", ] @@ -2342,12 +1647,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "effc0e4ff8085673ea7b9b2e3c73f6bd4d118810c9009ed8f1e16bd96c331db6" -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - [[package]] name = "winapi" version = "0.3.9" @@ -2358,12 +1657,6 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -2382,7 +1675,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2391,15 +1684,5 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -dependencies = [ - "winapi 0.2.8", - "winapi-build", + "winapi", ] diff --git a/masq_lib/Cargo.toml b/masq_lib/Cargo.toml index 9670594c1..589b0d42f 100644 --- a/masq_lib/Cargo.toml +++ b/masq_lib/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" workspace = "../node" [dependencies] -actix = "0.8.3" +actix = "0.12.0" clap = "2.33.3" const_format = "0.2.22" crossbeam-channel = "0.5.1" diff --git a/masq_lib/src/ui_gateway.rs b/masq_lib/src/ui_gateway.rs index 9cc439b8a..0a8a2c1a7 100644 --- a/masq_lib/src/ui_gateway.rs +++ b/masq_lib/src/ui_gateway.rs @@ -24,12 +24,14 @@ pub struct MessageBody { } #[derive(Message, PartialEq, Clone, Debug)] +#[rtype(result = "")] pub struct NodeFromUiMessage { pub client_id: u64, pub body: MessageBody, } #[derive(Message, PartialEq, Clone, Debug)] +#[rtype(result = "")] pub struct NodeToUiMessage { pub target: MessageTarget, pub body: MessageBody, diff --git a/node/Cargo.lock b/node/Cargo.lock index 0c653979d..3964400eb 100644 --- a/node/Cargo.lock +++ b/node/Cargo.lock @@ -4,184 +4,47 @@ version = 3 [[package]] name = "actix" -version = "0.8.3" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671ce3d27313f236827a5dd153a1073ad03ef31fc77f562020263e7830cf1ef7" +checksum = "3720d0064a0ce5c0de7bd93bdb0a6caebab2a9b5668746145d7b3b0c5da02914" dependencies = [ - "actix-http", "actix-rt", "actix_derive", "bitflags", - "bytes 0.4.12", - "crossbeam-channel 0.3.9", - "derive_more 0.14.1", - "futures", - "hashbrown 0.3.1", - "lazy_static", - "log 0.4.14", - "parking_lot 0.8.0", - "smallvec 0.6.13", - "tokio-codec", - "tokio-executor", - "tokio-io", - "tokio-tcp", - "tokio-timer 0.2.13", - "trust-dns-resolver 0.11.1", -] - -[[package]] -name = "actix-codec" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f2c11af4b06dc935d8e1b1491dad56bfb32febc49096a91e773f8535c176453" -dependencies = [ - "bytes 0.4.12", - "futures", - "log 0.4.14", - "tokio-codec", - "tokio-io", -] - -[[package]] -name = "actix-connect" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fade9bd4bb46bacde89f1e726c7a3dd230536092712f5d94d77ca57c087fca0" -dependencies = [ - "actix-codec", - "actix-rt", - "actix-service", - "actix-utils", - "derive_more 0.15.0", - "either", - "futures", - "http 0.1.21", - "log 0.4.14", - "tokio-current-thread", - "tokio-tcp", - "trust-dns-resolver 0.11.1", -] - -[[package]] -name = "actix-http" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb50f77cd28240d344fd54afd205bae8760a3b0ad448b1716a2aa31e24db139" -dependencies = [ - "actix-codec", - "actix-connect", - "actix-server-config", - "actix-service", - "actix-threadpool", - "actix-utils", - "base64 0.10.1", - "bitflags", - "bytes 0.4.12", - "chrono", - "copyless", - "derive_more 0.15.0", - "either", - "encoding_rs", - "futures", - "h2 0.1.26", - "hashbrown 0.6.3", - "http 0.1.21", - "httparse", - "indexmap", - "language-tags", - "lazy_static", + "bytes 1.1.0", + "crossbeam-channel", + "futures-core", + "futures-sink", + "futures-task", + "futures-util", "log 0.4.14", - "mime 0.3.16", - "percent-encoding 2.1.0", - "rand 0.7.3", - "regex", - "serde", - "serde_json", - "serde_urlencoded 0.6.1", - "sha1", - "slab 0.4.2", - "time", - "tokio-current-thread", - "tokio-tcp", - "tokio-timer 0.2.13", - "trust-dns-resolver 0.11.1", + "once_cell", + "parking_lot 0.11.2", + "pin-project-lite", + "smallvec 1.6.1", + "tokio 1.13.0", + "tokio-util", ] [[package]] name = "actix-rt" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c9da1d06603d82ec2b6690fc5b80eb626cd2d6b573f3d9a71d5252e06d098e" -dependencies = [ - "actix-threadpool", - "copyless", - "futures", - "tokio-current-thread", - "tokio-executor", - "tokio-reactor", - "tokio-timer 0.2.13", -] - -[[package]] -name = "actix-server-config" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483a34989c682d93142bacad6300375bb6ad8002d2e0bb249dbad86128b9ff30" -dependencies = [ - "futures", - "tokio-io", - "tokio-tcp", -] - -[[package]] -name = "actix-service" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca5b48e928841ff7e7dce1fdb5b0d4582f6b1b976e08f4bac3f640643e0773f" -dependencies = [ - "futures", -] - -[[package]] -name = "actix-threadpool" -version = "0.1.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b5ae85d13da7e6fb86b1b7bc83185e0e3bd4cc5f421c887e1803796c034d35d" +checksum = "05c2f80ce8d0c990941c7a7a931f69fd0701b76d521f8d36298edf59cd3fbf1f" dependencies = [ - "derive_more 0.15.0", - "futures", - "lazy_static", - "log 0.4.14", - "num_cpus", - "parking_lot 0.9.0", - "threadpool", -] - -[[package]] -name = "actix-utils" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "908c3109948f5c37a8b57fd343a37dcad5bb1d90bfd06300ac96b17bbe017b95" -dependencies = [ - "actix-codec", - "actix-service", - "bytes 0.4.12", - "either", - "futures", - "log 0.4.14", - "tokio-current-thread", - "tokio-timer 0.2.13", + "futures-core", + "tokio 1.13.0", ] [[package]] name = "actix_derive" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf5f6d7bf2d220ae8b4a7ae02a572bb35b7c4806b24049af905ab8110de156c" +checksum = "6d44b8fee1ced9671ba043476deddef739dd0959bf77030b26b738cc591737a7" dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "syn 0.15.44", + "proc-macro2 1.0.24", + "quote 1.0.7", + "syn 1.0.67", ] [[package]] @@ -233,15 +96,6 @@ dependencies = [ "stream-cipher", ] -[[package]] -name = "ahash" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29661b60bec623f0586702976ff4d0c9942dcb6723161c2df0eea78455cfedfb" -dependencies = [ - "const-random", -] - [[package]] name = "ahash" version = "0.7.6" @@ -547,28 +401,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "const-random" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f590d95d011aa80b063ffe3253422ed5aa462af4e9867d43ce8337562bac77c4" -dependencies = [ - "const-random-macro", - "proc-macro-hack", -] - -[[package]] -name = "const-random-macro" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "615f6e27d000a2bffbc7f2f6a8669179378fa27ee4d0a509e985dfc0a7defb40" -dependencies = [ - "getrandom 0.2.3", - "lazy_static", - "proc-macro-hack", - "tiny-keccak 2.0.2", -] - [[package]] name = "const_format" version = "0.2.22" @@ -595,12 +427,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" -[[package]] -name = "copyless" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2df960f5d869b2dd8532793fde43eb5427cceb126c929747a26823ab0eeb536" - [[package]] name = "core-foundation" version = "0.7.0" @@ -651,15 +477,6 @@ dependencies = [ "cfg-if 0.1.10", ] -[[package]] -name = "crossbeam-channel" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa" -dependencies = [ - "crossbeam-utils 0.6.6", -] - [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -731,16 +548,6 @@ dependencies = [ "maybe-uninit", ] -[[package]] -name = "crossbeam-utils" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" -dependencies = [ - "cfg-if 0.1.10", - "lazy_static", -] - [[package]] name = "crossbeam-utils" version = "0.7.2" @@ -846,18 +653,6 @@ dependencies = [ "syn 1.0.67", ] -[[package]] -name = "derive_more" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d944ac6003ed268757ef1ee686753b57efc5fcf0ebe7b64c9fc81e7e32ff839" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "rustc_version", - "syn 0.15.44", -] - [[package]] name = "derive_more" version = "0.15.0" @@ -931,12 +726,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - [[package]] name = "either" version = "1.6.1" @@ -990,7 +779,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "tiny-keccak 1.5.0", + "tiny-keccak", ] [[package]] @@ -1003,7 +792,7 @@ dependencies = [ "fixed-hash 0.3.2", "impl-rlp", "impl-serde", - "tiny-keccak 1.5.0", + "tiny-keccak", ] [[package]] @@ -1045,7 +834,7 @@ dependencies = [ "pbkdf2 0.3.0", "scrypt", "sha2 0.8.2", - "tiny-keccak 1.5.0", + "tiny-keccak", ] [[package]] @@ -1212,18 +1001,18 @@ checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" [[package]] name = "futures-channel" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" +checksum = "7fc8cd39e3dbf865f7340dce6a2d401d24fd37c6fe6c4f0ee0de8bfca2252d27" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" +checksum = "629316e42fe7c2a0b9a65b47d159ceaa5453ab14e8f0a3c5eedbb8cd55b4a445" [[package]] name = "futures-cpupool" @@ -1237,23 +1026,22 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" +checksum = "996c6442437b62d21a32cd9906f9c41e7dc1e19a9579843fad948696769305af" [[package]] name = "futures-task" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" +checksum = "dabf1872aaab32c886832f2276d2f5399887e2bd613698a02359e4ea83f8de12" [[package]] name = "futures-util" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" +checksum = "41d22213122356472061ac0f1ab2cee28d2bac8491410fd68c2af53d1cedb83e" dependencies = [ - "autocfg 1.0.1", "futures-core", "futures-task", "pin-project-lite", @@ -1357,22 +1145,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d36fab90f82edc3c747f9d438e06cf0a491055896f2a279638bb5beed6c40177" -[[package]] -name = "hashbrown" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29fba9abe4742d586dfd0c06ae4f7e73a1c2d86b856933509b269d82cdf06e18" - -[[package]] -name = "hashbrown" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead" -dependencies = [ - "ahash 0.2.19", - "autocfg 0.1.7", -] - [[package]] name = "hashbrown" version = "0.9.1" @@ -1385,7 +1157,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "ahash 0.7.6", + "ahash", ] [[package]] @@ -1979,7 +1751,7 @@ name = "masq" version = "1.0.0" dependencies = [ "clap", - "crossbeam-channel 0.5.1", + "crossbeam-channel", "ctrlc", "lazy_static", "linefeed", @@ -1996,7 +1768,7 @@ dependencies = [ "actix", "clap", "const_format", - "crossbeam-channel 0.5.1", + "crossbeam-channel", "itertools", "lazy_static", "nix 0.23.0", @@ -2168,7 +1940,7 @@ name = "multinode_integration_tests" version = "1.0.0" dependencies = [ "base64 0.13.0", - "crossbeam-channel 0.5.1", + "crossbeam-channel", "ethereum-types", "ethsign-crypto", "futures", @@ -2265,7 +2037,7 @@ dependencies = [ "chrono", "clap", "core-foundation 0.7.0", - "crossbeam-channel 0.5.1", + "crossbeam-channel", "daemonize", "dirs 4.0.0", "ethereum-types", @@ -2313,8 +2085,8 @@ dependencies = [ "tokio-core", "toml", "trust-dns", - "trust-dns-proto 0.8.0", - "trust-dns-resolver 0.12.0", + "trust-dns-proto", + "trust-dns-resolver", "unindent", "web3", "websocket", @@ -2963,7 +2735,7 @@ version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" dependencies = [ - "crossbeam-channel 0.5.1", + "crossbeam-channel", "crossbeam-deque 0.8.1", "crossbeam-utils 0.8.5", "lazy_static", @@ -3066,7 +2838,7 @@ dependencies = [ "pin-project-lite", "serde", "serde_json", - "serde_urlencoded 0.7.0", + "serde_urlencoded", "tokio 1.13.0", "tokio-native-tls", "url 2.2.2", @@ -3294,18 +3066,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_urlencoded" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" -dependencies = [ - "dtoa", - "itoa", - "serde", - "url 2.2.2", -] - [[package]] name = "serde_urlencoded" version = "0.7.0" @@ -3383,6 +3143,15 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "signal-hook-registry" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] + [[package]] name = "simple-server" version = "0.4.0" @@ -3646,15 +3415,6 @@ dependencies = [ "syn 1.0.67", ] -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - [[package]] name = "time" version = "0.1.44" @@ -3707,15 +3467,6 @@ dependencies = [ "crunchy", ] -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - [[package]] name = "tinyvec" version = "0.3.4" @@ -3757,7 +3508,10 @@ dependencies = [ "libc", "memchr", "mio 0.7.14", + "once_cell", + "parking_lot 0.11.2", "pin-project-lite", + "signal-hook-registry", "winapi 0.3.9", ] @@ -4042,32 +3796,7 @@ dependencies = [ "tokio 0.1.22", "tokio-tcp", "tokio-udp", - "trust-dns-proto 0.8.0", -] - -[[package]] -name = "trust-dns-proto" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5559ebdf6c2368ddd11e20b11d6bbaf9e46deb803acd7815e93f5a7b4a6d2901" -dependencies = [ - "byteorder", - "enum-as-inner", - "failure", - "futures", - "idna 0.1.5", - "lazy_static", - "log 0.4.14", - "rand 0.6.5", - "smallvec 0.6.13", - "socket2 0.3.15", - "tokio-executor", - "tokio-io", - "tokio-reactor", - "tokio-tcp", - "tokio-timer 0.2.13", - "tokio-udp", - "url 1.7.2", + "trust-dns-proto", ] [[package]] @@ -4095,25 +3824,6 @@ dependencies = [ "url 2.2.2", ] -[[package]] -name = "trust-dns-resolver" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c9992e58dba365798803c0b91018ff6c8d3fc77e06977c4539af2a6bfe0a039" -dependencies = [ - "cfg-if 0.1.10", - "failure", - "futures", - "ipconfig", - "lazy_static", - "log 0.4.14", - "lru-cache", - "resolv-conf", - "smallvec 0.6.13", - "tokio-executor", - "trust-dns-proto 0.7.4", -] - [[package]] name = "trust-dns-resolver" version = "0.12.0" @@ -4133,7 +3843,7 @@ dependencies = [ "tokio-executor", "tokio-tcp", "tokio-udp", - "trust-dns-proto 0.8.0", + "trust-dns-proto", ] [[package]] @@ -4417,7 +4127,7 @@ checksum = "076f34ed252d74a8521e3b013254b1a39f94a98f23aae7cfc85cda6e7b395664" dependencies = [ "arrayvec 0.4.12", "base64 0.10.1", - "derive_more 0.15.0", + "derive_more", "ethabi", "ethereum-types", "futures", diff --git a/node/Cargo.toml b/node/Cargo.toml index a3066de0b..74ac2f5f7 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -11,7 +11,7 @@ edition = "2021" members = ["../multinode_integration_tests", "../masq_lib", "../masq"] [dependencies] -actix = "0.8.3" +actix = "0.12.0" backtrace = "0.3.62" base64 = "0.13.0" bytes = "0.4.12" diff --git a/node/src/accountant/mod.rs b/node/src/accountant/mod.rs index d72d8f603..e108692cd 100644 --- a/node/src/accountant/mod.rs +++ b/node/src/accountant/mod.rs @@ -6,8 +6,8 @@ pub mod receivable_dao; #[cfg(test)] pub mod test_utils; -use crate::accountant::payable_dao::{PayableAccount, PayableDaoFactory, Payment}; -use crate::accountant::receivable_dao::{ReceivableAccount, ReceivableDaoFactory}; +use crate::accountant::payable_dao::{PayableAccount, PayableDao, PayableDaoFactory, Payment}; +use crate::accountant::receivable_dao::{ReceivableAccount, ReceivableDao, ReceivableDaoFactory}; use crate::banned_dao::{BannedDao, BannedDaoFactory}; use crate::blockchain::blockchain_bridge::RetrieveTransactions; use crate::blockchain::blockchain_interface::{BlockchainError, Transaction}; @@ -27,7 +27,7 @@ use crate::sub_lib::logger::Logger; use crate::sub_lib::peer_actors::{BindMessage, StartMessage}; use crate::sub_lib::utils::NODE_MAILBOX_CAPACITY; use crate::sub_lib::wallet::Wallet; -use actix::{Actor, Addr, AsyncContext, Context, Handler, Message, Recipient}; + use itertools::Itertools; use lazy_static::lazy_static; use masq_lib::messages::UiMessageError::UnexpectedMessage; @@ -35,12 +35,10 @@ use masq_lib::messages::{FromMessageBody, ToMessageBody, UiFinancialsRequest, Ui use masq_lib::messages::{UiFinancialsResponse, UiPayableAccount, UiReceivableAccount}; use masq_lib::ui_gateway::MessageTarget::ClientId; use masq_lib::ui_gateway::{NodeFromUiMessage, NodeToUiMessage}; -use payable_dao::PayableDao; -use receivable_dao::ReceivableDao; use std::ops::Add; use std::thread; use std::time::{Duration, SystemTime}; -use futures::Future; +use actix::{Actor, Addr, AsyncContext, Context, Handler, Message, Recipient}; pub const CRASH_KEY: &str = "ACCOUNTANT"; pub const DEFAULT_PAYABLE_SCAN_INTERVAL: u64 = 3600; // one hour @@ -105,13 +103,13 @@ impl Actor for Accountant { } #[derive(Debug, Eq, Message, PartialEq)] - +#[rtype(result = "")] pub struct ReceivedPayments { payments: Vec, } #[derive(Debug, Eq, Message, PartialEq)] - +#[rtype(result = "")] pub struct SentPayments { pub payments: Vec>, } @@ -830,7 +828,7 @@ pub mod tests { use crate::test_utils::recorder::make_recorder; use crate::test_utils::recorder::peer_actors_builder; use crate::test_utils::recorder::Recorder; - use actix::System; + use actix::{Actor, System}; use ethereum_types::BigEndianHash; use ethsign_crypto::Keccak256; use masq_lib::ui_gateway::MessagePath::{Conversation, FireAndForget}; @@ -1350,7 +1348,7 @@ pub mod tests { }, ]) .total_result(98765432); - let system = System::new("test"); + let system = System::new(); let subject = make_subject( Some(bc_from_ac_plus_earning_wallet( AccountantConfig { @@ -1380,7 +1378,16 @@ pub mod tests { subject_addr.try_send(ui_message).unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let payable_top_records_parameters = payable_top_records_parameters_arc.lock().unwrap(); assert_eq!(*payable_top_records_parameters, vec![(50001, 50002)]); let receivable_top_records_parameters = @@ -1435,7 +1442,7 @@ pub mod tests { #[test] fn unexpected_ui_message_is_ignored() { init_test_logging(); - let system = System::new("test"); + let system = System::new(); let subject = make_subject( Some(bc_from_ac_plus_earning_wallet( AccountantConfig { @@ -1466,7 +1473,16 @@ pub mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); assert_eq!(ui_gateway_recording.len(), 0); TestLogHandler::new().exists_log_containing( @@ -1484,7 +1500,7 @@ pub mod tests { .payment_sent_parameters(payment_sent_parameters_inner) .payment_sent_result(Ok(())); - let system = System::new("accountant_calls_payable_dao_payment_sent_when_sent_payments"); + let system = System::new(); let accountant = make_subject( Some(bc_from_ac_plus_earning_wallet( @@ -1518,7 +1534,16 @@ pub mod tests { .try_send(send_payments) .expect("unexpected actix error"); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let sent_payment_to = payment_sent_parameters.lock().unwrap(); let actual = sent_payment_to.get(0).unwrap(); @@ -1532,7 +1557,7 @@ pub mod tests { init_test_logging(); let payable_dao = PayableDaoMock::new().non_pending_payables_result(vec![]); - let system = System::new("accountant_calls_payable_dao_payment_sent_when_sent_payments"); + let system = System::new(); let accountant = make_subject( Some(bc_from_ac_plus_earning_wallet( @@ -1560,7 +1585,16 @@ pub mod tests { .try_send(send_payments) .expect("unexpected actix error"); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().await_log_containing( r#"WARN: Accountant: Blockchain TransactionFailed("Payment attempt failed"). Please check your blockchain service URL configuration."#, @@ -1603,9 +1637,7 @@ pub mod tests { let (accountant_mock, accountant_mock_awaiter, accountant_recording_arc) = make_recorder(); thread::spawn(move || { - let system = System::new( - "accountant_reports_sent_payments_when_blockchain_bridge_reports_account_payable", - ); + let system = System::new(); let peer_actors = peer_actors_builder() .blockchain_bridge(blockchain_bridge) @@ -1630,7 +1662,16 @@ pub mod tests { send_bind_message!(accountant_subs, peer_actors); send_start_message!(accountant_subs); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); accountant_mock_awaiter.await_message_count(1); @@ -1679,9 +1720,7 @@ pub mod tests { let (accountant_mock, _, accountant_recording_arc) = make_recorder(); thread::spawn(move || { - let system = System::new( - "accountant_reports_sent_payments_when_blockchain_bridge_reports_account_payable", - ); + let system = System::new(); let peer_actors = peer_actors_builder() .blockchain_bridge(blockchain_bridge) @@ -1706,7 +1745,16 @@ pub mod tests { send_bind_message!(subject_subs, peer_actors); send_start_message!(subject_subs); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); TestLogHandler::new() @@ -1740,9 +1788,7 @@ pub mod tests { ); thread::spawn(move || { - let system = System::new( - "accountant_payment_received_scan_timer_triggers_scanning_for_payments", - ); + let system = System::new(); let payable_dao = PayableDaoMock::new().non_pending_payables_result(vec![]); let receivable_dao = ReceivableDaoMock::new() .new_delinquencies_result(vec![]) @@ -1765,7 +1811,16 @@ pub mod tests { send_bind_message!(subject_subs, peer_actors); send_start_message!(subject_subs); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); blockchain_bridge_awaiter.await_message_count(1); @@ -1809,7 +1864,7 @@ pub mod tests { ); thread::spawn(move || { - let system = System::new("accountant_logs_if_no_transactions_were_detected"); + let system = System::new(); let payable_dao = PayableDaoMock::new().non_pending_payables_result(vec![]); let receivable_dao = ReceivableDaoMock::new() .new_delinquencies_result(vec![]) @@ -1832,7 +1887,16 @@ pub mod tests { send_bind_message!(subject_subs, peer_actors); send_start_message!(subject_subs); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); blockchain_bridge_awaiter.await_message_count(1); @@ -1872,7 +1936,7 @@ pub mod tests { thread::spawn(move || { let system = - System::new("accountant_logs_error_when_blockchain_bridge_responds_with_error"); + System::new(); let payable_dao = PayableDaoMock::new().non_pending_payables_result(vec![]); let receivable_dao = ReceivableDaoMock::new() .new_delinquencies_result(vec![]) @@ -1894,7 +1958,16 @@ pub mod tests { send_bind_message!(subject_subs, peer_actors); send_start_message!(subject_subs); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); blockchain_bridge_awaiter.await_message_count(1); @@ -1937,7 +2010,7 @@ pub mod tests { None, ); - let system = System::new("accountant_receives_new_payments_to_the_receivables_dao"); + let system = System::new(); let subject = accountant.start(); subject @@ -1946,7 +2019,16 @@ pub mod tests { }) .expect("unexpected actix error"); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let more_money_received_params = more_money_received_params_arc.lock().unwrap(); assert_eq!(1, more_money_received_params.len()); @@ -1971,7 +2053,7 @@ pub mod tests { thread::spawn(move || { let system = - System::new("accountant_payable_scan_timer_triggers_scanning_for_payables"); + System::new(); let config = bc_from_ac_plus_earning_wallet( AccountantConfig { payable_scan_interval: Duration::from_millis(100), @@ -2010,7 +2092,16 @@ pub mod tests { send_bind_message!(subject_subs, peer_actors); send_start_message!(subject_subs); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); blockchain_bridge_awaiter.await_message_count(1); @@ -2022,7 +2113,7 @@ pub mod tests { init_test_logging(); let (blockchain_bridge, _, _) = make_recorder(); - let system = System::new("accountant_scans_after_startup"); + let system = System::new(); let config = bc_from_ac_plus_wallets( AccountantConfig { payable_scan_interval: Duration::from_secs(1000), @@ -2042,7 +2133,16 @@ pub mod tests { send_start_message!(subject_subs); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let tlh = TestLogHandler::new(); tlh.await_log_containing("DEBUG: Accountant: Scanning for payables", 1000u64); @@ -2097,9 +2197,7 @@ pub mod tests { .non_pending_payables_result(accounts.clone()) .non_pending_payables_result(vec![]); let (blockchain_bridge, _, blockchain_bridge_recordings_arc) = make_recorder(); - let system = System::new( - "scan_for_payables_message_does_not_trigger_payment_for_balances_below_the_curve", - ); + let system = System::new(); let blockchain_bridge_addr: Addr = blockchain_bridge.start(); let report_accounts_payable_sub = blockchain_bridge_addr.recipient::(); @@ -2109,7 +2207,16 @@ pub mod tests { subject.scan_for_payables(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let blockchain_bridge_recordings = blockchain_bridge_recordings_arc.lock().unwrap(); assert_eq!(blockchain_bridge_recordings.len(), 0); @@ -2156,9 +2263,7 @@ pub mod tests { .report_accounts_payable_response(Ok(vec![])); thread::spawn(move || { - let system = System::new( - "scan_for_payables_message_triggers_payment_for_balances_over_the_curve", - ); + let system = System::new(); let peer_actors = peer_actors_builder() .blockchain_bridge(blockchain_bridge) @@ -2170,7 +2275,16 @@ pub mod tests { send_bind_message!(accountant_subs, peer_actors); send_start_message!(accountant_subs); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); blockchain_bridge_awaiter.await_message_count(1); @@ -2187,7 +2301,7 @@ pub mod tests { let ban_parameters_arc_inner = ban_parameters_arc.clone(); let blockchain_bridge = Recorder::new().retrieve_transactions_response(Ok(vec![])); thread::spawn(move || { - let system = System::new("payment_received_scan_triggers_scan_for_delinquencies"); + let system = System::new(); let config = bc_from_ac_plus_earning_wallet( AccountantConfig { payable_scan_interval: Duration::from_secs(10_000), @@ -2219,7 +2333,16 @@ pub mod tests { send_bind_message!(subject_subs, peer_actors); send_start_message!(subject_subs); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); thread::sleep(Duration::from_millis(200)); @@ -2325,7 +2448,7 @@ pub mod tests { None, None, ); - let system = System::new("report_routing_service_message_is_received"); + let system = System::new(); let subject_addr: Addr = subject.start(); subject_addr .try_send(BindMessage { @@ -2344,7 +2467,16 @@ pub mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let more_money_receivable_parameters = more_money_receivable_parameters_arc.lock().unwrap(); assert_eq!( more_money_receivable_parameters[0], @@ -2379,7 +2511,7 @@ pub mod tests { None, None, ); - let system = System::new("report_routing_service_message_is_received"); + let system = System::new(); let subject_addr: Addr = subject.start(); subject_addr .try_send(BindMessage { @@ -2397,7 +2529,16 @@ pub mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert!(more_money_receivable_parameters_arc .lock() .unwrap() @@ -2431,7 +2572,7 @@ pub mod tests { None, None, ); - let system = System::new("report_routing_service_message_is_received"); + let system = System::new(); let subject_addr: Addr = subject.start(); subject_addr .try_send(BindMessage { @@ -2449,7 +2590,16 @@ pub mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert!(more_money_receivable_parameters_arc .lock() .unwrap() @@ -2477,7 +2627,7 @@ pub mod tests { .more_money_payable_parameters(more_money_payable_parameters_arc.clone()) .more_money_payable_result(Ok(())); let subject = make_subject(Some(config), Some(payable_dao_mock), None, None, None); - let system = System::new("report_routing_service_consumed_message_is_received"); + let system = System::new(); let subject_addr: Addr = subject.start(); subject_addr .try_send(BindMessage { @@ -2496,7 +2646,16 @@ pub mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let more_money_payable_parameters = more_money_payable_parameters_arc.lock().unwrap(); assert_eq!( more_money_payable_parameters[0], @@ -2524,7 +2683,7 @@ pub mod tests { .non_pending_payables_result(vec![]) .more_money_payable_parameters(more_money_payable_parameters_arc.clone()); let subject = make_subject(Some(config), Some(payable_dao_mock), None, None, None); - let system = System::new("report_routing_service_consumed_message_is_received"); + let system = System::new(); let subject_addr: Addr = subject.start(); subject_addr .try_send(BindMessage { @@ -2542,7 +2701,16 @@ pub mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert!(more_money_payable_parameters_arc.lock().unwrap().is_empty()); TestLogHandler::new().exists_log_containing(&format!( @@ -2567,7 +2735,7 @@ pub mod tests { .non_pending_payables_result(vec![]) .more_money_payable_parameters(more_money_payable_parameters_arc.clone()); let subject = make_subject(Some(config), Some(payable_dao_mock), None, None, None); - let system = System::new("report_routing_service_consumed_message_is_received"); + let system = System::new(); let subject_addr: Addr = subject.start(); subject_addr .try_send(BindMessage { @@ -2585,7 +2753,16 @@ pub mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert!(more_money_payable_parameters_arc.lock().unwrap().is_empty()); TestLogHandler::new().exists_log_containing(&format!( @@ -2616,7 +2793,7 @@ pub mod tests { None, None, ); - let system = System::new("report_exit_service_provided_message_is_received"); + let system = System::new(); let subject_addr: Addr = subject.start(); subject_addr .try_send(BindMessage { @@ -2635,7 +2812,16 @@ pub mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let more_money_receivable_parameters = more_money_receivable_parameters_arc.lock().unwrap(); assert_eq!( more_money_receivable_parameters[0], @@ -2670,7 +2856,7 @@ pub mod tests { None, None, ); - let system = System::new("report_exit_service_provided_message_is_received"); + let system = System::new(); let subject_addr: Addr = subject.start(); subject_addr .try_send(BindMessage { @@ -2688,7 +2874,16 @@ pub mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert!(more_money_receivable_parameters_arc .lock() .unwrap() @@ -2722,7 +2917,7 @@ pub mod tests { None, None, ); - let system = System::new("report_exit_service_provided_message_is_received"); + let system = System::new(); let subject_addr: Addr = subject.start(); subject_addr .try_send(BindMessage { @@ -2740,7 +2935,16 @@ pub mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert!(more_money_receivable_parameters_arc .lock() .unwrap() @@ -2768,7 +2972,7 @@ pub mod tests { .more_money_payable_parameters(more_money_payable_parameters_arc.clone()) .more_money_payable_result(Ok(())); let subject = make_subject(Some(config), Some(payable_dao_mock), None, None, None); - let system = System::new("report_exit_service_consumed_message_is_received"); + let system = System::new(); let subject_addr: Addr = subject.start(); subject_addr .try_send(BindMessage { @@ -2787,7 +2991,16 @@ pub mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let more_money_payable_parameters = more_money_payable_parameters_arc.lock().unwrap(); assert_eq!( more_money_payable_parameters[0], @@ -2816,7 +3029,7 @@ pub mod tests { .non_pending_payables_result(vec![]) .more_money_payable_parameters(more_money_payable_parameters_arc.clone()); let subject = make_subject(Some(config), Some(payable_dao_mock), None, None, None); - let system = System::new("report_exit_service_consumed_message_is_received"); + let system = System::new(); let subject_addr: Addr = subject.start(); subject_addr .try_send(BindMessage { @@ -2834,7 +3047,16 @@ pub mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert!(more_money_payable_parameters_arc.lock().unwrap().is_empty()); TestLogHandler::new().exists_log_containing(&format!( @@ -2859,7 +3081,7 @@ pub mod tests { .non_pending_payables_result(vec![]) .more_money_payable_parameters(more_money_payable_parameters_arc.clone()); let subject = make_subject(Some(config), Some(payable_dao_mock), None, None, None); - let system = System::new("report_exit_service_consumed_message_is_received"); + let system = System::new(); let subject_addr: Addr = subject.start(); subject_addr .try_send(BindMessage { @@ -2877,7 +3099,16 @@ pub mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert!(more_money_payable_parameters_arc.lock().unwrap().is_empty()); TestLogHandler::new().exists_log_containing(&format!( diff --git a/node/src/actor_system_factory.rs b/node/src/actor_system_factory.rs index 7022b116a..107cd11bf 100644 --- a/node/src/actor_system_factory.rs +++ b/node/src/actor_system_factory.rs @@ -42,9 +42,7 @@ use crate::sub_lib::proxy_client::ProxyClientSubs; use crate::sub_lib::proxy_server::ProxyServerSubs; use crate::sub_lib::ui_gateway::UiGatewayConfig; use crate::sub_lib::ui_gateway::UiGatewaySubs; -use actix::Addr; -use actix::Recipient; -use actix::prelude::Actor; +use actix::{Actor, Addr, Arbiter, Recipient, SyncArbiter, System}; use crossbeam_channel::{unbounded, Sender}; use masq_lib::blockchains::chains::Chain; use masq_lib::ui_gateway::NodeFromUiMessage; @@ -252,7 +250,7 @@ impl ActorFactory for ActorFactoryReal { ) -> (DispatcherSubs, Recipient) { let crash_point = config.crash_point; let descriptor = config.node_descriptor_opt.clone(); - let addr: Addr = Actor::create(move |_| { + let addr: Addr = Arbiter::start(move |_| { Dispatcher::new(crash_point, descriptor.expect_v("node descriptor")) }); ( @@ -268,7 +266,7 @@ impl ActorFactory for ActorFactoryReal { is_decentralized: bool, consuming_wallet_balance: Option, ) -> ProxyServerSubs { - let addr: Addr = Actor::create(move |_| { + let addr: Addr = Arbiter::start(move |_| { ProxyServer::new( main_cryptde, alias_cryptde, @@ -280,7 +278,7 @@ impl ActorFactory for ActorFactoryReal { } fn make_and_start_hopper(&self, config: HopperConfig) -> HopperSubs { - let addr: Addr = Actor::create(|_| Hopper::new(config)); + let addr: Addr = Arbiter::start(|_| Hopper::new(config)); Hopper::make_subs_from(&addr) } @@ -291,7 +289,7 @@ impl ActorFactory for ActorFactoryReal { ) -> NeighborhoodSubs { let config_clone = config.clone(); let addr: Addr = - Actor::create(move |_| Neighborhood::new(cryptde, &config_clone)); + Arbiter::start(move |_| Neighborhood::new(cryptde, &config_clone)); Neighborhood::make_subs_from(&addr) } @@ -318,7 +316,7 @@ impl ActorFactory for ActorFactoryReal { )); let config_dao_factory = DaoFactoryReal::new(data_directory, config.blockchain_bridge_config.chain, false); - let addr: Addr = Actor::create(move |_| { + let addr: Addr = Arbiter::start(move |_| { Accountant::new( &cloned_config, Box::new(payable_dao_factory), @@ -332,7 +330,7 @@ impl ActorFactory for ActorFactoryReal { fn make_and_start_ui_gateway(&self, config: UiGatewayConfig) -> UiGatewaySubs { let ui_gateway = UiGateway::new(&config); - let addr: Addr = Actor::create(|_| ui_gateway); + let addr: Addr = Arbiter::start(|_| ui_gateway); UiGateway::make_subs_from(&addr) } @@ -341,12 +339,12 @@ impl ActorFactory for ActorFactoryReal { clandestine_discriminator_factories: Vec>, ) -> StreamHandlerPoolSubs { let addr: Addr = - Actor::create(|_| StreamHandlerPool::new(clandestine_discriminator_factories)); + Arbiter::start(|_| StreamHandlerPool::new(clandestine_discriminator_factories)); StreamHandlerPool::make_subs_from(&addr) } fn make_and_start_proxy_client(&self, config: ProxyClientConfig) -> ProxyClientSubs { - let addr: Addr = Actor::create(|_| ProxyClient::new(config)); + let addr: Addr = Arbiter::start(|_| ProxyClient::new(config)); ProxyClient::make_subs_from(&addr) } @@ -489,7 +487,7 @@ mod tests { use std::path::PathBuf; use std::sync::{Arc, Mutex}; use std::thread; - use std::time::Duration; + use std::time::{Duration, SystemTime}; #[derive(Default)] struct BannedCacheLoaderMock { @@ -889,10 +887,19 @@ mod tests { ); let subject = ActorSystemFactoryReal {}; - let system = System::new("test"); + let system = System::new(); subject.make_and_start_actors(config, Box::new(actor_factory)); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } thread::sleep(Duration::from_millis(100)); Recording::get::(&recordings.dispatcher, 0); @@ -943,7 +950,7 @@ mod tests { }, }; let (tx, rx) = unbounded(); - let system = System::new("MASQNode"); + let system = System::new(); ActorSystemFactoryReal::prepare_initial_messages( main_cryptde(), @@ -954,7 +961,16 @@ mod tests { ); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } check_bind_message(&recordings.dispatcher, false); check_bind_message(&recordings.hopper, false); check_bind_message(&recordings.proxy_client, false); @@ -1053,7 +1069,7 @@ mod tests { mode: NeighborhoodMode::ConsumeOnly(vec![]), }, }; - let system = System::new("MASQNode"); + let system = System::new(); ActorSystemFactoryReal::prepare_initial_messages( main_cryptde(), @@ -1064,7 +1080,16 @@ mod tests { ); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let messages = recordings.proxy_client.lock().unwrap(); assert!(messages.is_empty()); @@ -1116,7 +1141,7 @@ mod tests { }, }; let (tx, _) = unbounded(); - let system = System::new("MASQNode"); + let system = System::new(); ActorSystemFactoryReal::prepare_initial_messages( main_cryptde(), @@ -1127,7 +1152,16 @@ mod tests { ); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let (_, _, _, consuming_wallet_balance) = Parameters::get(parameters.proxy_server_params); assert_eq!(consuming_wallet_balance, None); } diff --git a/node/src/blockchain/blockchain_bridge.rs b/node/src/blockchain/blockchain_bridge.rs index caac75072..96ad4caf9 100644 --- a/node/src/blockchain/blockchain_bridge.rs +++ b/node/src/blockchain/blockchain_bridge.rs @@ -206,7 +206,7 @@ mod tests { use crate::test_utils::pure_test_utils::make_default_persistent_configuration; use crate::test_utils::recorder::peer_actors_builder; use crate::test_utils::{make_paying_wallet, make_wallet}; - use actix::Addr; + use actix::{Addr, ContextFutureSpawner}; use actix::System; use ethsign::SecretKey; use ethsign_crypto::Keccak256; @@ -238,7 +238,7 @@ mod tests { Box::new(make_default_persistent_configuration()), ); - let system = System::new("blockchain_bridge_receives_bind_message"); + let system = System::new(); let addr: Addr = subject.start(); addr.try_send(BindMessage { @@ -247,7 +247,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_containing(&format!( "DEBUG: BlockchainBridge: Received BindMessage; consuming wallet address {}", consuming_wallet @@ -264,7 +273,7 @@ mod tests { Box::new(PersistentConfigurationMock::default()), ); - let system = System::new("blockchain_bridge_receives_bind_message"); + let system = System::new(); let addr: Addr = subject.start(); addr.try_send(BindMessage { @@ -273,7 +282,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_containing( "DEBUG: BlockchainBridge: Received BindMessage; no consuming wallet address specified", ); @@ -365,7 +383,7 @@ mod tests { #[test] fn ask_me_about_my_transactions() { - let system = System::new("ask_me_about_my_transactions"); + let system = System::new(); let block_no = 37; let expected_results = vec![Transaction { block_number: 42u64, @@ -392,7 +410,16 @@ mod tests { recipient: wallet.clone(), }); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let retrieve_transactions_parameters = retrieve_transactions_parameters.lock().unwrap(); assert_eq!((block_no, wallet), retrieve_transactions_parameters[0]); @@ -404,7 +431,7 @@ mod tests { #[test] fn report_accounts_payable_sends_transactions_to_blockchain_interface() { let system = - System::new("report_accounts_payable_sends_transactions_to_blockchain_interface"); + System::new(); let blockchain_interface_mock = BlockchainInterfaceMock::default() .get_transaction_count_result(Ok(U256::from(1))) @@ -447,7 +474,16 @@ mod tests { ], }); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert_eq!( send_parameters.lock().unwrap()[0], @@ -627,7 +663,7 @@ mod tests { #[test] fn cant_be_crashed_if_key_doesnt_match() { - let system = System::new("test"); + let system = System::new(); let mut config = BootstrapperConfig::new(); config.crash_point = CrashPoint::Message; let subject = BlockchainBridge::new( @@ -644,14 +680,23 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } // no panic: test passes } #[test] fn cant_be_crashed_if_not_crashable() { init_test_logging(); - let system = System::new("test"); + let system = System::new(); let subject = BlockchainBridge::new( &BootstrapperConfig::new(), Box::new(BlockchainInterfaceMock::default()), @@ -666,7 +711,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_containing( "INFO: BlockchainBridge: Rejected crash attempt: 'panic message'", ); @@ -675,7 +729,7 @@ mod tests { #[test] #[should_panic(expected = "panic message")] fn can_be_crashed() { - let system = System::new("test"); + let system = System::new(); let mut config = BootstrapperConfig::new(); config.crash_point = CrashPoint::Message; let subject = BlockchainBridge::new( @@ -692,7 +746,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } fn bc_from_wallet(consuming_wallet: Option) -> BootstrapperConfig { diff --git a/node/src/blockchain/blockchain_interface.rs b/node/src/blockchain/blockchain_interface.rs index b4f0c8e8c..6f73925b2 100644 --- a/node/src/blockchain/blockchain_interface.rs +++ b/node/src/blockchain/blockchain_interface.rs @@ -30,7 +30,7 @@ const TRANSACTION_LITERAL: H256 = H256 { const TRANSFER_METHOD_ID: [u8; 4] = [0xa9, 0x05, 0x9c, 0xbb]; #[derive(Clone, Debug, Eq, Message, PartialEq)] - +#[rtype(result = "")] pub struct Transaction { pub block_number: u64, pub from: Wallet, diff --git a/node/src/bootstrapper.rs b/node/src/bootstrapper.rs index 89f5bc0a2..9b84b7a13 100644 --- a/node/src/bootstrapper.rs +++ b/node/src/bootstrapper.rs @@ -593,6 +593,7 @@ mod tests { use std::str::FromStr; use std::sync::{Arc, Mutex}; use std::thread; + use std::time::SystemTime; use actix::Recipient; use actix::System; @@ -1878,7 +1879,7 @@ mod tests { fn new() -> ActorSystemFactoryMock { let (tx, rx) = unbounded(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let stream_handler_pool_cluster = { let (stream_handler_pool, awaiter, recording) = make_recorder(); @@ -1890,7 +1891,16 @@ mod tests { }; tx.send(stream_handler_pool_cluster).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let stream_handler_pool_cluster = rx.recv().unwrap(); ActorSystemFactoryMock { diff --git a/node/src/crash_test_dummy.rs b/node/src/crash_test_dummy.rs index ec7ddffe5..1f619e1b2 100644 --- a/node/src/crash_test_dummy.rs +++ b/node/src/crash_test_dummy.rs @@ -1,7 +1,8 @@ // Copyright (c) 2019, MASQ (https://masq.ai) and/or its affiliates. All rights reserved. +use tokio::prelude::Async; use crate::sub_lib::logger::Logger; -use futures::Async; + use masq_lib::crash_point::CrashPoint; use tokio::prelude::future::Future; diff --git a/node/src/daemon/crash_notification.rs b/node/src/daemon/crash_notification.rs index f7597d437..fa0b9e9b0 100644 --- a/node/src/daemon/crash_notification.rs +++ b/node/src/daemon/crash_notification.rs @@ -17,7 +17,7 @@ trait Recognizer: Sync { } #[derive(Message, Clone, Debug, PartialEq)] - +#[rtype(result = "")] pub struct CrashNotification { pub process_id: u32, pub exit_code: Option, diff --git a/node/src/daemon/daemon_initializer.rs b/node/src/daemon/daemon_initializer.rs index ac7132bfc..dc840f929 100644 --- a/node/src/daemon/daemon_initializer.rs +++ b/node/src/daemon/daemon_initializer.rs @@ -22,6 +22,7 @@ use std::collections::HashMap; use masq_lib::utils::ExpectValue; #[cfg(test)] use std::any::Any; +use std::time::SystemTime; pub trait RecipientsFactory { fn make(&self, launcher: Box, ui_port: u16) -> Recipients; @@ -75,7 +76,7 @@ impl DaemonInitializer for DaemonInitializerReal { let message = format!("There appears to be a process already listening on port {}; are you sure there's not a Daemon already running?", self.config.ui_port); return Err(ConfiguratorError::required("ui-port", message.as_str())); } - let system = System::new("daemon"); + let system = System::new(); let (sender, receiver) = self.channel_factory.make(); self.bind(sender); @@ -146,7 +147,16 @@ impl DaemonInitializerReal { } fn split(&mut self, system: SystemRunner, receiver: Receiver>) { - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let param_map = receiver.recv().expect("Daemon is dead"); let param_vec = param_map .into_iter() @@ -252,7 +262,7 @@ mod tests { ); let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); let (daemon, _, daemon_recording_arc) = make_recorder(); - let system = System::new("bind_binds_everything_together"); + let system = System::new(); let recipients = make_recipients(ui_gateway, daemon); let dirs_wrapper = DirsWrapperMock::new() .home_dir_result(Some(data_dir.clone())) @@ -275,7 +285,16 @@ mod tests { subject.bind(unbounded().0); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let daemon_recording = daemon_recording_arc.lock().unwrap(); let _ = ui_gateway_recording.get_record::(0); @@ -291,7 +310,7 @@ mod tests { "split_accepts_parameters_upon_system_shutdown_and_calls_main_with_args", ); let system = - System::new("split_accepts_parameters_upon_system_shutdown_and_calls_main_with_args"); + System::new(); let dirs_wrapper = DirsWrapperMock::new() .home_dir_result(Some(data_dir.clone())) .data_dir_result(Some(data_dir)); diff --git a/node/src/daemon/launcher.rs b/node/src/daemon/launcher.rs index 733dfb3ce..f2b6e5ce0 100644 --- a/node/src/daemon/launcher.rs +++ b/node/src/daemon/launcher.rs @@ -210,7 +210,7 @@ mod tests { use std::process::ExitStatus; use std::sync::{Arc, Mutex}; use std::thread; - use std::time::Duration; + use std::time::{Duration, SystemTime}; struct ChildWrapperMock { wait_latency_ms: u64, @@ -347,14 +347,23 @@ mod tests { subject.spawn_wrapper = Box::new(spawn_wrapper); let (result_tx, result_rx) = unbounded(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let crashed_recipient = daemon.start().recipient(); result_tx .send(subject.exec(inner_params, crashed_recipient)) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let result = result_rx.recv().unwrap(); assert_eq!(result, Ok(1234)); @@ -404,14 +413,23 @@ mod tests { subject.spawn_wrapper = Box::new(spawn_wrapper); let (result_tx, result_rx) = unbounded(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let crashed_recipient = daemon.start().recipient(); result_tx .send(subject.exec(inner_params, crashed_recipient)) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let result = result_rx.recv().unwrap(); assert_eq!(result, Ok(1234)); @@ -432,7 +450,7 @@ mod tests { #[test] fn launch_calls_execer_and_verifier_and_returns_success() { let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let crashed_recipient = ui_gateway.start().recipient(); let exec_params_arc = Arc::new(Mutex::new(vec![])); let execer = ExecerMock::new() @@ -482,7 +500,16 @@ mod tests { }; (*exec_params)[0].1.try_send(msg.clone()).unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); assert_eq!( *ui_gateway_recording.get_record::(0), diff --git a/node/src/daemon/mod.rs b/node/src/daemon/mod.rs index b66c4cef5..b01c9670b 100644 --- a/node/src/daemon/mod.rs +++ b/node/src/daemon/mod.rs @@ -89,7 +89,7 @@ pub trait Launcher { } #[derive(Message, PartialEq, Clone)] - +#[rtype(result = "")] pub struct DaemonBindMessage { pub to_ui_message_recipient: Recipient, // for everybody to send UI-bound messages to pub from_ui_message_recipient: Recipient, // for the WebsocketSupervisor to send inbound UI messages to the UiGateway @@ -457,6 +457,7 @@ mod tests { use std::collections::HashSet; use std::iter::FromIterator; use std::sync::{Arc, Mutex}; + use std::time::SystemTime; struct LauncherMock { launch_params: Arc, Recipient)>>>, @@ -602,7 +603,7 @@ mod tests { let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); let verifier_tools = VerifierToolsMock::new().process_is_running_result(true); let setup_reporter = SetupReporterMock::new(); // will panic if called - let system = System::new("test"); + let system = System::new(); let mut subject = Daemon::new(Box::new(LauncherMock::new())); subject.verifier_tools = Box::new(verifier_tools); subject.setup_reporter = Box::new(setup_reporter); @@ -629,7 +630,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let record = ui_gateway_recording .get_record::(0) @@ -667,7 +677,7 @@ mod tests { ("consuming-private-key", "secret value", Set), ]); let setup_reporter = SetupReporterMock::new().get_modified_setup_result(Ok(combined_setup)); - let system = System::new("test"); + let system = System::new(); let mut subject = Daemon::new(Box::new(LauncherMock::new())); subject.verifier_tools = Box::new(verifier_tools); subject.setup_reporter = Box::new(setup_reporter); @@ -696,7 +706,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let expected_combined_setup = vec![ UiSetupResponseValue::new( "consuming-private-key", @@ -735,7 +754,7 @@ mod tests { "setup_judges_node_not_running_when_port_and_pid_are_none_without_checking_os", ); let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let verifier_tools = VerifierToolsMock::new(); let mut subject = Daemon::new(Box::new(LauncherMock::new())); subject.node_ui_port = None; @@ -767,7 +786,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let record = ui_gateway_recording .get_record::(0) @@ -803,7 +831,7 @@ mod tests { "setup_judges_node_not_running_when_port_and_pid_are_set_but_os_says_different", ); let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let verifier_tools = VerifierToolsMock::new().process_is_running_result(false); // only consulted once; second time, we already know let mut subject = Daemon::new(Box::new(LauncherMock::new())); subject.node_ui_port = Some(1234); @@ -829,7 +857,16 @@ mod tests { subject_addr.try_send(msg.clone()).unwrap(); // accepted without asking because we already know Node is down System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let get_record = |idx: usize| { ui_gateway_recording @@ -881,13 +918,22 @@ mod tests { lame_setup, ConfiguratorError::required("parameter", "message"), )))); - let system = System::new("test"); + let system = System::new(); subject.ui_gateway_sub = Some(ui_gateway.start().recipient()); subject.handle_setup(47, 74, UiSetupRequest::new(vec![])); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let message: &NodeToUiMessage = ui_gateway_recording.get_record(0); assert_eq!( @@ -921,13 +967,22 @@ mod tests { subject.setup_reporter = Box::new( SetupReporterMock::new().get_modified_setup_result(Ok(modified_setup.clone())), ); - let system = System::new("test"); + let system = System::new(); subject.ui_gateway_sub = Some(ui_gateway.start().recipient()); subject.handle_setup(47, 74, UiSetupRequest::new(vec![])); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let message: &NodeToUiMessage = ui_gateway_recording.get_record(0); assert_eq!( @@ -966,13 +1021,22 @@ mod tests { .collect(); subject.setup_reporter = Box::new(SetupReporterMock::new().get_modified_setup_result(Ok(incoming_setup))); - let system = System::new("test"); + let system = System::new(); subject.ui_gateway_sub = Some(ui_gateway.start().recipient()); subject.handle_setup(47, 74, UiSetupRequest::new(vec![])); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let message: &NodeToUiMessage = ui_gateway_recording.get_record(0); assert_eq!( @@ -1016,13 +1080,22 @@ mod tests { subject.setup_reporter = Box::new( SetupReporterMock::new().get_modified_setup_result(Ok(modified_setup.clone())), ); - let system = System::new("test"); + let system = System::new(); subject.ui_gateway_sub = Some(ui_gateway.start().recipient()); subject.handle_setup(47, 74, UiSetupRequest::new(vec![])); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let message: &NodeToUiMessage = ui_gateway_recording.get_record(0); assert_eq!( @@ -1071,7 +1144,7 @@ mod tests { redirect_ui_port: 5432, }))); let verifier_tools = VerifierToolsMock::new(); - let system = System::new("test"); + let system = System::new(); let mut subject = Daemon::new(Box::new(launcher)); subject.params.insert( "db-password".to_string(), @@ -1091,7 +1164,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let launch_params = launch_params_arc.lock().unwrap(); assert_eq!( (*launch_params) @@ -1126,7 +1208,7 @@ mod tests { let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); let launcher = LauncherMock::new().launch_result(Ok(None)); let verifier_tools = VerifierToolsMock::new(); - let system = System::new("test"); + let system = System::new(); let mut subject = Daemon::new(Box::new(launcher)); subject.params.insert( "db-password".to_string(), @@ -1146,7 +1228,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); assert_eq!(ui_gateway_recording.len(), 0); } @@ -1168,7 +1259,7 @@ mod tests { .process_is_running_result(false) .process_is_running_result(false) .process_is_running_result(false); - let system = System::new("test"); + let system = System::new(); let mut subject = Daemon::new(Box::new(launcher)); subject.params.insert( "db-password".to_string(), @@ -1212,7 +1303,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); // ------ let record = ui_gateway_recording @@ -1240,7 +1340,7 @@ mod tests { let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); let launcher = LauncherMock::new().launch_result(Err("booga".to_string())); let verifier_tools = VerifierToolsMock::new(); - let system = System::new("test"); + let system = System::new(); let mut subject = Daemon::new(Box::new(launcher)); subject.params.insert( "db-password".to_string(), @@ -1260,7 +1360,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let record = ui_gateway_recording .get_record::(0) @@ -1276,7 +1385,7 @@ mod tests { let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); let launcher = LauncherMock::new().launch_result(Err("booga".to_string())); let verifier_tools = VerifierToolsMock::new().process_is_running_result(true); - let system = System::new("test"); + let system = System::new(); let mut subject = Daemon::new(Box::new(launcher)); subject.params.insert( "db-password".to_string(), @@ -1298,7 +1407,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let record = ui_gateway_recording .get_record::(0) @@ -1354,13 +1472,22 @@ mod tests { exit_code: None, stderr: None, }; - let system = System::new("test"); + let system = System::new(); launch_params[0] .1 .try_send(crashed_msg_to_daemon.clone()) .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let gateway_recording = gateway_recording_arc.lock().unwrap(); let start_msg = NodeToUiMessage { target: MessageTarget::ClientId(1234), @@ -1380,7 +1507,7 @@ mod tests { #[test] fn accepts_shutdown_order_after_start_and_returns_redirect() { let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let process_is_running_params_arc = Arc::new(Mutex::new(vec![])); let verifier_tools = VerifierToolsMock::new() .process_is_running_params(&process_is_running_params_arc) @@ -1403,7 +1530,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let record = ui_gateway_recording .get_record::(0) @@ -1444,7 +1580,7 @@ mod tests { fn accepts_unexpected_message_discovers_non_running_node_and_returns_conversational_answer_of_error( ) { let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let verifier_tools = VerifierToolsMock::new().process_is_running_result(false); // only consulted once; second time, we already know let mut subject = Daemon::new(Box::new(LauncherMock::new())); subject.node_ui_port = Some(7777); @@ -1464,7 +1600,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let record = ui_gateway_recording .get_record::(0) @@ -1485,7 +1630,7 @@ mod tests { //fire and forget message that could be sent from UI to Node does not exist so far, //this is a touch of the future let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let verifier_tools = VerifierToolsMock::new().process_is_running_result(false); let mut subject = Daemon::new(Box::new(LauncherMock::new())); subject.node_ui_port = Some(7777); @@ -1508,7 +1653,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let record = ui_gateway_recording .get_record::(0) @@ -1530,7 +1684,7 @@ mod tests { #[test] fn accepts_financials_request_before_start_and_returns_error() { let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let verifier_tools = VerifierToolsMock::new(); let mut subject = Daemon::new(Box::new(LauncherMock::new())); subject.node_ui_port = None; @@ -1556,7 +1710,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let record = ui_gateway_recording .get_record::(0) @@ -1574,7 +1737,7 @@ mod tests { #[test] fn accepts_crash_notification_when_not_in_setup_mode_and_sends_ui_notification() { let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let verifier_tools = VerifierToolsMock::new(); let mut subject = Daemon::new(Box::new(LauncherMock::new())); subject.node_ui_port = Some(1234); @@ -1599,7 +1762,16 @@ mod tests { }) .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let record = ui_gateway_recording.get_record::(0); assert_eq!(record.target, MessageTarget::AllClients); @@ -1634,7 +1806,7 @@ mod tests { #[test] fn accepts_crash_notification_in_setup_mode_and_swallows() { let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let ui_gateway_sub = ui_gateway.start().recipient(); let verifier_tools = VerifierToolsMock::new(); let mut subject = Daemon::new(Box::new(LauncherMock::new())); @@ -1650,7 +1822,16 @@ mod tests { }); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); assert_eq!(ui_gateway_recording.len(), 0); } diff --git a/node/src/dispatcher.rs b/node/src/dispatcher.rs index 7a5b91e32..c129127b9 100644 --- a/node/src/dispatcher.rs +++ b/node/src/dispatcher.rs @@ -191,10 +191,11 @@ mod tests { use std::net::SocketAddr; use std::str::FromStr; use std::thread; + use std::time::SystemTime; #[test] fn sends_inbound_data_for_proxy_server_to_proxy_server() { - let system = System::new("test"); + let system = System::new(); let subject = Dispatcher::new(CrashPoint::None, "descriptor".to_string()); let subject_addr: Addr = subject.start(); let subject_ibcd = subject_addr.clone().recipient::(); @@ -219,7 +220,16 @@ mod tests { subject_ibcd.try_send(ibcd_in).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } awaiter.await_message_count(1); let recording = recording_arc.lock().unwrap(); @@ -235,7 +245,7 @@ mod tests { #[test] fn sends_inbound_data_for_hopper_to_hopper() { - let system = System::new("test"); + let system = System::new(); let subject = Dispatcher::new(CrashPoint::None, "descriptor".to_string()); let subject_addr: Addr = subject.start(); let (hopper, hopper_awaiter, hopper_recording_arc) = make_recorder(); @@ -257,7 +267,16 @@ mod tests { subject_addr.try_send(ibcd_in).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } hopper_awaiter.await_message_count(1); let hopper_recording = hopper_recording_arc.lock().unwrap(); @@ -274,7 +293,7 @@ mod tests { #[test] #[should_panic(expected = "ProxyServer unbound in Dispatcher")] fn inbound_client_data_handler_panics_when_proxy_server_is_unbound() { - let system = System::new("test"); + let system = System::new(); let subject = Dispatcher::new(CrashPoint::None, "descriptor".to_string()); let subject_addr: Addr = subject.start(); let subject_ibcd = subject_addr.recipient::(); @@ -293,13 +312,22 @@ mod tests { subject_ibcd.try_send(ibcd_in).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } #[test] #[should_panic(expected = "Hopper unbound in Dispatcher")] fn inbound_client_data_handler_panics_when_hopper_is_unbound() { - let system = System::new("test"); + let system = System::new(); let subject = Dispatcher::new(CrashPoint::None, "descriptor".to_string()); let subject_addr: Addr = subject.start(); let subject_ibcd = subject_addr.recipient::(); @@ -318,13 +346,22 @@ mod tests { subject_ibcd.try_send(ibcd_in).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } #[test] #[should_panic(expected = "StreamHandlerPool unbound in Dispatcher")] fn panics_when_stream_handler_pool_is_unbound() { - let system = System::new("test"); + let system = System::new(); let subject = Dispatcher::new(CrashPoint::None, "descriptor".to_string()); let subject_addr: Addr = subject.start(); let subject_obcd = subject_addr.recipient::(); @@ -340,12 +377,21 @@ mod tests { subject_obcd.try_send(obcd).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } #[test] fn forwards_outbound_data_to_stream_handler_pool() { - let system = System::new("test"); + let system = System::new(); let subject = Dispatcher::new(CrashPoint::None, "descriptor".to_string()); let subject_addr: Addr = subject.start(); let subject_obcd = subject_addr.clone().recipient::(); @@ -376,7 +422,16 @@ mod tests { subject_obcd.try_send(obcd).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } awaiter.await_message_count(1); let recording = recording_arc.lock().unwrap(); @@ -392,7 +447,7 @@ mod tests { #[test] fn handle_stream_shutdown_msg_routes_non_clandestine_to_proxy_server() { - let system = System::new("test"); + let system = System::new(); let subject = Dispatcher::new(CrashPoint::None, "descriptor".to_string()); let addr = subject.start(); let (proxy_server, _, proxy_server_recording_arc) = make_recorder(); @@ -414,7 +469,16 @@ mod tests { addr.try_send(msg.clone()).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let proxy_server_recording = proxy_server_recording_arc.lock().unwrap(); assert_eq!( proxy_server_recording.get_record::(0), @@ -426,7 +490,7 @@ mod tests { #[test] fn handle_stream_shutdown_msg_routes_clandestine_to_neighborhood() { - let system = System::new("test"); + let system = System::new(); let subject = Dispatcher::new(CrashPoint::None, "descriptor".to_string()); let addr = subject.start(); let (proxy_server, _, proxy_server_recording_arc) = make_recorder(); @@ -445,7 +509,16 @@ mod tests { addr.try_send(msg.clone()).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let proxy_server_recording = proxy_server_recording_arc.lock().unwrap(); assert_eq!(proxy_server_recording.len(), 0); let neighborhood_recording = neighborhood_recording_arc.lock().unwrap(); @@ -458,7 +531,7 @@ mod tests { #[test] //joined with inspecting whether dispatcher obtains the information of the descriptor correctly fn descriptor_request_results_in_descriptor_response() { - let system = System::new("test"); + let system = System::new(); let (ui_gateway, _, ui_gateway_recording_arc) = make_recorder(); let mut bootstrapper_config = BootstrapperConfig::new(); bootstrapper_config.node_descriptor_opt = Some("abcdef1234".to_string()); @@ -479,7 +552,16 @@ mod tests { thread::sleep(std::time::Duration::from_millis(15)); //Required to break unknown race condition, probably inside actix. System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let response = ui_gateway_recording.get_record::(0); assert_eq!( diff --git a/node/src/hopper/consuming_service.rs b/node/src/hopper/consuming_service.rs index 387e6bbdb..778e7f76b 100644 --- a/node/src/hopper/consuming_service.rs +++ b/node/src/hopper/consuming_service.rs @@ -144,6 +144,7 @@ mod tests { use masq_lib::test_utils::utils::TEST_DEFAULT_CHAIN; use std::net::{IpAddr, Ipv4Addr}; use std::str::FromStr; + use std::time::SystemTime; #[test] fn converts_no_lookup_incipient_message_to_live_and_sends_to_dispatcher() { @@ -157,7 +158,7 @@ mod tests { make_meaningless_message_type(), ) .unwrap(); - let system = System::new(""); + let system = System::new(); let peer_actors = peer_actors_builder().dispatcher(dispatcher).build(); let subject = ConsumingService::new( main_cryptde(), @@ -168,7 +169,16 @@ mod tests { subject.consume_no_lookup(package.clone()); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let dispatcher_recording = dispatcher_recording_arc.lock().unwrap(); let transmit_data_msg = dispatcher_recording.get_record::(0); let (lcp, _) = LiveCoresPackage::from_no_lookup_incipient(package, main_cryptde()).unwrap(); @@ -193,7 +203,7 @@ mod tests { node_addr: target_node_addr.clone(), payload: CryptData::new(b""), }; - let system = System::new(""); + let system = System::new(); let peer_actors = peer_actors_builder().build(); let subject = ConsumingService::new( main_cryptde(), @@ -204,7 +214,16 @@ mod tests { subject.consume_no_lookup(package); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new ().exists_log_containing ("ERROR: ConsumingService: Could not accept CORES package for transmission: EncryptionError(EmptyKey)"); } @@ -227,7 +246,7 @@ mod tests { let payload = make_meaningless_message_type(); let incipient_cores_package = IncipientCoresPackage::new(cryptde, route.clone(), payload, &destination_key).unwrap(); - let system = System::new("converts_incipient_message_to_live_and_sends_to_dispatcher"); + let system = System::new(); let peer_actors = peer_actors_builder().dispatcher(dispatcher).build(); let subject = ConsumingService::new( cryptde, @@ -238,7 +257,16 @@ mod tests { subject.consume(incipient_cores_package.clone()); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let dispatcher_recording = dispatcher_recording_arc.lock().unwrap(); let record = dispatcher_recording.get_record::(0); let (expected_lcp, _) = @@ -274,7 +302,7 @@ mod tests { let payload = make_meaningless_message_type(); let incipient_cores_package = IncipientCoresPackage::new(cryptde, route.clone(), payload, &destination_key).unwrap(); - let system = System::new("consume_sends_zero_hop_incipient_directly_to_hopper"); + let system = System::new(); let peer_actors = peer_actors_builder().hopper(hopper).build(); let subject = ConsumingService::new( cryptde, @@ -285,7 +313,16 @@ mod tests { subject.consume(incipient_cores_package.clone()); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let hopper_recording = hopper_recording_arc.lock().unwrap(); let record = hopper_recording.get_record::(0); let (expected_lcp, _) = @@ -307,7 +344,7 @@ mod tests { #[test] fn consume_logs_error_when_given_bad_input_data() { init_test_logging(); - let _system = System::new("consume_logs_error_when_given_bad_input_data"); + let _system = System::new(); let peer_actors = peer_actors_builder().build(); let to_dispatcher = peer_actors.dispatcher.from_dispatcher_client; let to_hopper = peer_actors.hopper.from_dispatcher; diff --git a/node/src/hopper/mod.rs b/node/src/hopper/mod.rs index e3b8c05e0..391a049b0 100644 --- a/node/src/hopper/mod.rs +++ b/node/src/hopper/mod.rs @@ -146,6 +146,7 @@ mod tests { use masq_lib::test_utils::utils::TEST_DEFAULT_CHAIN; use std::net::SocketAddr; use std::str::FromStr; + use std::time::SystemTime; #[test] #[should_panic(expected = "Hopper unbound: no RoutingService")] @@ -176,7 +177,7 @@ mod tests { sequence_number: None, data: encrypted_package, }; - let system = System::new("panics_if_routing_service_is_unbound"); + let system = System::new(); let subject = Hopper::new(HopperConfig { main_cryptde, alias_cryptde, @@ -189,7 +190,16 @@ mod tests { subject_addr.try_send(inbound_client_data).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } #[test] @@ -216,7 +226,7 @@ mod tests { &main_cryptde.public_key(), ) .unwrap(); - let system = System::new("panics_if_consuming_service_is_unbound"); + let system = System::new(); let subject = Hopper::new(HopperConfig { main_cryptde, alias_cryptde, @@ -229,6 +239,15 @@ mod tests { subject_addr.try_send(incipient_package).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } } diff --git a/node/src/hopper/routing_service.rs b/node/src/hopper/routing_service.rs index b3b53069e..ced2a1985 100644 --- a/node/src/hopper/routing_service.rs +++ b/node/src/hopper/routing_service.rs @@ -537,6 +537,7 @@ mod tests { use masq_lib::test_utils::utils::TEST_DEFAULT_CHAIN; use std::net::SocketAddr; use std::str::FromStr; + use std::time::SystemTime; #[test] fn dns_resolution_failures_are_reported_to_the_proxy_server() { @@ -568,7 +569,7 @@ mod tests { }; let (proxy_server, _, proxy_server_recording) = make_recorder(); - let system = System::new("dns_resolution_failures_are_reported_to_the_proxy_server"); + let system = System::new(); let peer_actors = peer_actors_builder().proxy_server(proxy_server).build(); let subject = RoutingService::new( main_cryptde, @@ -589,7 +590,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let recordings = proxy_server_recording.lock().unwrap(); let message = recordings.get_record::>(0); @@ -760,7 +770,7 @@ mod tests { data: data_enc.into(), }; - let system = System::new("converts_live_message_to_expired_for_proxy_client"); + let system = System::new(); let peer_actors = peer_actors_builder().proxy_client(component).build(); let subject = RoutingService::new( main_cryptde, @@ -781,7 +791,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let component_recording = component_recording_arc.lock().unwrap(); let record = component_recording.get_record::>(0); @@ -830,7 +849,7 @@ mod tests { data: data_enc.into(), }; - let system = System::new("converts_live_message_to_expired_for_proxy_client"); + let system = System::new(); let peer_actors = peer_actors_builder().build(); let subject = RoutingService::new( main_cryptde, @@ -851,7 +870,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let tlh = TestLogHandler::new(); tlh.exists_no_log_containing("Couldn't decode CORES package in 8-byte buffer"); tlh.exists_log_containing("WARN: RoutingService: Received CORES package from 1.2.3.4:5678 for Proxy Client, but Proxy Client isn't running"); @@ -886,7 +914,7 @@ mod tests { data: lcp_enc.into(), }; - let system = System::new("converts_live_message_to_expired_for_proxy_server"); + let system = System::new(); let peer_actors = peer_actors_builder().proxy_server(component).build(); let subject = RoutingService::new( main_cryptde, @@ -907,7 +935,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let component_recording = component_recording_arc.lock().unwrap(); let record = component_recording.get_record::>(0); @@ -964,7 +1001,7 @@ mod tests { data: data_enc.into(), }; - let system = System::new("converts_live_gossip_message_to_expired_for_neighborhood"); + let system = System::new(); let peer_actors = peer_actors_builder().neighborhood(component).build(); let subject = RoutingService::new( main_cryptde, @@ -985,7 +1022,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let component_recording = component_recording_arc.lock().unwrap(); let record = component_recording.get_record::>(0); let expected_ecp = lcp_a @@ -1038,7 +1084,7 @@ mod tests { }; let system = - System::new("converts_live_gossip_failure_message_to_expired_for_neighborhood"); + System::new(); let peer_actors = peer_actors_builder().neighborhood(component).build(); let subject = RoutingService::new( cryptde, @@ -1059,7 +1105,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let component_recording = component_recording_arc.lock().unwrap(); let record = component_recording.get_record::>(0); let expected_ecp = lcp @@ -1114,7 +1169,7 @@ mod tests { data: data_enc.into(), }; - let system = System::new("passes_on_inbound_client_data_not_meant_for_this_node"); + let system = System::new(); let peer_actors = peer_actors_builder() .dispatcher(dispatcher) .accountant(accountant) @@ -1138,7 +1193,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let dispatcher_recording = dispatcher_recording_arc.lock().unwrap(); let record = dispatcher_recording.get_record::(0); @@ -1204,9 +1268,7 @@ mod tests { data: data_enc.into(), }; - let system = System::new( - "reprocesses_inbound_client_data_meant_for_this_node_and_destined_for_hopper", - ); + let system = System::new(); let peer_actors = peer_actors_builder().hopper(hopper).build(); let subject = RoutingService::new( main_cryptde, @@ -1227,7 +1289,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let hopper_recording = hopper_recording_arc.lock().unwrap(); let record = hopper_recording.get_record::(0); @@ -1283,9 +1354,7 @@ mod tests { sequence_number: None, data: data_enc.into(), }; - let system = System::new( - "route_logs_and_ignores_cores_package_that_demands_routing_without_paying_wallet", - ); + let system = System::new(); let (proxy_client, _, proxy_client_recording_arc) = make_recorder(); let (proxy_server, _, proxy_server_recording_arc) = make_recorder(); let (neighborhood, _, neighborhood_recording_arc) = make_recorder(); @@ -1317,7 +1386,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_matching( "WARN: RoutingService: Refusing to route Live CORES package with \\d+-byte payload without paying wallet", ); @@ -1384,9 +1462,7 @@ mod tests { sequence_number: None, data: data_enc.into(), }; - let system = System::new( - "route_logs_and_ignores_cores_package_that_demands_proxy_client_routing_with_paying_wallet_that_cant_pay", - ); + let system = System::new(); let (proxy_client, _, proxy_client_recording_arc) = make_recorder(); let (proxy_server, _, proxy_server_recording_arc) = make_recorder(); let (neighborhood, _, neighborhood_recording_arc) = make_recorder(); @@ -1418,7 +1494,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_matching( "WARN: RoutingService: Refusing to route Expired CORES package with \\d+-byte payload without proof of 0x0a26dc9ebb2124baf1efe9d460f1ce59cd7944bd paying wallet ownership.", ); @@ -1480,9 +1565,7 @@ mod tests { encodex(main_cryptde, &destination_key, &payload).unwrap(), ); - let system = System::new( - "route_logs_and_ignores_cores_package_that_demands_hopper_routing_with_paying_wallet_that_cant_pay", - ); + let system = System::new(); let (proxy_client, _, proxy_client_recording_arc) = make_recorder(); let (proxy_server, _, proxy_server_recording_arc) = make_recorder(); let (neighborhood, _, neighborhood_recording_arc) = make_recorder(); @@ -1518,7 +1601,16 @@ mod tests { ); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_matching( "WARN: RoutingService: Refusing to route Live CORES package with \\d+-byte payload without proof of 0x0a26dc9ebb2124baf1efe9d460f1ce59cd7944bd paying wallet ownership.", ); @@ -1563,7 +1655,7 @@ mod tests { sequence_number: None, data: data_enc.into(), }; - let system = System::new("test"); + let system = System::new(); let peer_actors = peer_actors_builder() .dispatcher(dispatcher) .accountant(accountant) @@ -1587,7 +1679,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let dispatcher_recording = dispatcher_recording_arc.lock().unwrap(); assert_eq!(dispatcher_recording.len(), 0); @@ -1634,7 +1735,7 @@ mod tests { sequence_number: None, data: data_enc.into(), }; - let system = System::new("test"); + let system = System::new(); let peer_actors = peer_actors_builder() .dispatcher(dispatcher) .accountant(accountant) @@ -1658,7 +1759,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let dispatcher_recording = dispatcher_recording_arc.lock().unwrap(); assert_eq!(dispatcher_recording.len(), 0); @@ -1678,7 +1788,7 @@ mod tests { sequence_number: None, data: vec![], }; - let system = System::new("consume_logs_error_when_given_bad_input_data"); + let system = System::new(); let (proxy_client, _, proxy_client_recording_arc) = make_recorder(); let (proxy_server, _, proxy_server_recording_arc) = make_recorder(); let (neighborhood, _, neighborhood_recording_arc) = make_recorder(); @@ -1708,7 +1818,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_containing( "ERROR: RoutingService: Couldn't decode CORES package in 0-byte buffer from 1.2.3.4:5678: DecryptionError(EmptyData)", ); @@ -1736,7 +1855,7 @@ mod tests { sequence_number: None, data: data_enc.into(), }; - let system = System::new("consume_logs_error_when_given_bad_input_data"); + let system = System::new(); let (proxy_client, _, proxy_client_recording_arc) = make_recorder(); let (proxy_server, _, proxy_server_recording_arc) = make_recorder(); let (neighborhood, _, neighborhood_recording_arc) = make_recorder(); @@ -1766,7 +1885,16 @@ mod tests { subject.route(inbound_client_data); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_containing( "ERROR: RoutingService: Invalid 67-byte CORES package: RoutingError(EmptyRoute)", ); @@ -1839,12 +1967,21 @@ mod tests { MessageType::Gossip(VersionedData::test_new(dv!(0, 0), vec![])), 0, ); - let system = System::new("route_expired_package_handles_unmigratable_gossip"); + let system = System::new(); subject.route_expired_package(Component::Neighborhood, expired_package, true); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let neighborhood_recording = neighborhood_recording_arc.lock().unwrap(); assert_eq!(neighborhood_recording.len(), 0); TestLogHandler::new().exists_log_containing( @@ -1879,12 +2016,21 @@ mod tests { MessageType::ClientRequest(VersionedData::test_new(dv!(0, 0), vec![])), 0, ); - let system = System::new("route_expired_package_handles_unmigratable_client_request"); + let system = System::new(); subject.route_expired_package(Component::ProxyClient, expired_package, true); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let proxy_client_recording = proxy_client_recording_arc.lock().unwrap(); assert_eq!(proxy_client_recording.len(), 0); TestLogHandler::new().exists_log_containing( @@ -1919,12 +2065,21 @@ mod tests { MessageType::ClientResponse(VersionedData::test_new(dv!(0, 0), vec![])), 0, ); - let system = System::new("route_expired_package_handles_unmigratable_client_response"); + let system = System::new(); subject.route_expired_package(Component::ProxyServer, expired_package, true); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let proxy_server_recording = proxy_server_recording_arc.lock().unwrap(); assert_eq!(proxy_server_recording.len(), 0); TestLogHandler::new().exists_log_containing( @@ -1959,12 +2114,21 @@ mod tests { MessageType::DnsResolveFailed(VersionedData::test_new(dv!(0, 0), vec![])), 0, ); - let system = System::new("route_expired_package_handles_unmigratable_dns_resolve_failure"); + let system = System::new(); subject.route_expired_package(Component::ProxyServer, expired_package, true); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let hopper_recording = hopper_recording_arc.lock().unwrap(); assert_eq!(hopper_recording.len(), 0); TestLogHandler::new().exists_log_containing( @@ -1999,12 +2163,21 @@ mod tests { MessageType::GossipFailure(VersionedData::test_new(dv!(0, 0), vec![])), 0, ); - let system = System::new("route_expired_package_handles_unmigratable_gossip_failure"); + let system = System::new(); subject.route_expired_package(Component::Neighborhood, expired_package, true); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let neighborhood_recording = neighborhood_recording_arc.lock().unwrap(); assert_eq!(neighborhood_recording.len(), 0); TestLogHandler::new().exists_log_containing( diff --git a/node/src/listener_handler.rs b/node/src/listener_handler.rs index bf145336c..21e7f31eb 100644 --- a/node/src/listener_handler.rs +++ b/node/src/listener_handler.rs @@ -157,7 +157,7 @@ mod tests { use std::str::FromStr; use std::sync::Arc; use std::thread; - use std::time::Duration; + use std::time::{Duration, SystemTime}; use tokio; use tokio::net::TcpStream; use tokio::reactor::Handle; @@ -286,11 +286,20 @@ mod tests { let (tx, rx) = unbounded(); thread::spawn(move || { - let system = System::new("handles_connection_errors"); + let system = System::new(); let add_stream_sub = start_recorder(stream_handler_pool); tx.send(add_stream_sub) .expect("Unable to send add_stream_sub to test"); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let port = find_free_port(); @@ -373,10 +382,19 @@ mod tests { let (tx, rx) = unbounded(); thread::spawn(move || { - let system = System::new("converts_connections_into_connection_infos"); + let system = System::new(); let add_stream_sub = start_recorder(stream_handler_pool); tx.send(add_stream_sub).expect("Internal Error"); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let port = find_free_port(); diff --git a/node/src/neighborhood/mod.rs b/node/src/neighborhood/mod.rs index 0ed675bf4..0ab424f0a 100644 --- a/node/src/neighborhood/mod.rs +++ b/node/src/neighborhood/mod.rs @@ -4,13 +4,8 @@ use std::cmp::Ordering; use std::convert::TryFrom; use std::net::SocketAddr; use std::path::PathBuf; +use actix::{Actor, Addr, Context, Handler, MessageResult, Recipient, System}; -use actix::Addr; -use actix::Context; -use actix::Handler; -use actix::MessageResult; -use actix::Recipient; -use actix::{Actor, System}; use itertools::Itertools; use gossip_acceptor::GossipAcceptor; @@ -1239,14 +1234,13 @@ mod tests { use std::str::FromStr; use std::sync::{Arc, Mutex}; use std::thread; - - use actix::dev::{MessageResponse, ResponseChannel}; + use std::time::SystemTime; + use actix::dev::*; use actix::Message; - use actix::Recipient; - use actix::System; + use itertools::Itertools; use serde_cbor; - use tokio::prelude::Future; + use masq_lib::constants::{DEFAULT_CHAIN, TLS_PORT}; use masq_lib::test_utils::utils::{ensure_node_home_directory_exists, TEST_DEFAULT_CHAIN}; @@ -1399,7 +1393,7 @@ mod tests { let earning_wallet = make_wallet("earning"); let consuming_wallet = Some(make_paying_wallet(b"consuming")); let system = - System::new("node_with_no_neighbor_configs_ignores_bootstrap_neighborhood_now_message"); + System::new(); let subject = Neighborhood::new( cryptde, &bc_from_nc_plus( @@ -1420,7 +1414,16 @@ mod tests { sub.try_send(StartMessage {}).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let recording = hopper_recording_arc.lock().unwrap(); assert_eq!(recording.len(), 0); TestLogHandler::new() @@ -1436,7 +1439,7 @@ mod tests { let earning_wallet = make_wallet("earning"); let consuming_wallet = Some(make_paying_wallet(b"consuming")); let neighbor_node = make_node_record(3456, true); - let system = System::new("node_with_bad_neighbor_config_panics"); + let system = System::new(); let subject = Neighborhood::new( cryptde, &bc_from_nc_plus( @@ -1464,7 +1467,16 @@ mod tests { sub.try_send(StartMessage {}).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } #[test] @@ -1572,14 +1584,23 @@ mod tests { GossipFailure_0v1::ManualRejection, 0, ); - let system = System::new("responds_with_none_when_initially_configured_with_no_data"); + let system = System::new(); let addr: Addr = subject.start(); let sub = addr.recipient::>(); sub.try_send(ecp1).unwrap(); sub.try_send(ecp2).unwrap(); - system.run(); // If this never halts, it's because the Neighborhood isn't properly killing its actor + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } // If this never halts, it's because the Neighborhood isn't properly killing its actor let tlh = TestLogHandler::new(); tlh.exists_log_containing ("WARN: Neighborhood: Node at 3.4.5.6 refused Debut: No neighbors for Introduction or Pass"); @@ -1589,7 +1610,7 @@ mod tests { #[test] fn node_query_responds_with_none_when_initially_configured_with_no_data() { - let system = System::new("responds_with_none_when_initially_configured_with_no_data"); + let system = System::new(); let subject = make_standard_subject(); let addr: Addr = subject.start(); let sub: Recipient = addr.recipient::(); @@ -1597,7 +1618,16 @@ mod tests { let future = sub.send(NodeQueryMessage::PublicKey(PublicKey::new(&b"booga"[..]))); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result = future.wait().unwrap(); assert_eq!(result.is_none(), true); } @@ -1608,7 +1638,7 @@ mod tests { let earning_wallet = make_wallet("earning"); let consuming_wallet = Some(make_paying_wallet(b"consuming")); let system = - System::new("node_query_responds_with_none_when_key_query_matches_no_configured_data"); + System::new(); let subject = Neighborhood::new( cryptde, &bc_from_nc_plus( @@ -1635,7 +1665,16 @@ mod tests { let future = sub.send(NodeQueryMessage::PublicKey(PublicKey::new(&b"blah"[..]))); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result = future.wait().unwrap(); assert_eq!(result.is_none(), true); } @@ -1646,7 +1685,7 @@ mod tests { let earning_wallet = make_wallet("earning"); let consuming_wallet = Some(make_paying_wallet(b"consuming")); let system = - System::new("node_query_responds_with_result_when_key_query_matches_configured_data"); + System::new(); let one_neighbor = make_node_record(2345, true); let another_neighbor = make_node_record(3456, true); let mut subject = Neighborhood::new( @@ -1676,7 +1715,16 @@ mod tests { )); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result = future.wait().unwrap(); assert_eq!( result.unwrap(), @@ -1693,9 +1741,7 @@ mod tests { let cryptde: &dyn CryptDE = main_cryptde(); let earning_wallet = make_wallet("earning"); let consuming_wallet = Some(make_paying_wallet(b"consuming")); - let system = System::new( - "node_query_responds_with_none_when_ip_address_query_matches_no_configured_data", - ); + let system = System::new(); let subject = Neighborhood::new( cryptde, &bc_from_nc_plus( @@ -1724,7 +1770,16 @@ mod tests { )); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result = future.wait().unwrap(); assert_eq!(result.is_none(), true); } @@ -1732,9 +1787,7 @@ mod tests { #[test] fn node_query_responds_with_result_when_ip_address_query_matches_configured_data() { let cryptde: &dyn CryptDE = main_cryptde(); - let system = System::new( - "node_query_responds_with_result_when_ip_address_query_matches_configured_data", - ); + let system = System::new(); let node_record = make_node_record(1234, true); let another_node_record = make_node_record(2345, true); let mut subject = Neighborhood::new( @@ -1768,7 +1821,16 @@ mod tests { )); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result = future.wait().unwrap(); assert_eq!( result.unwrap(), @@ -1783,7 +1845,7 @@ mod tests { #[test] fn route_query_responds_with_none_when_asked_for_route_with_too_many_hops() { let system = - System::new("route_query_responds_with_none_when_asked_for_route_with_too_many_hops"); + System::new(); let subject = make_standard_subject(); let addr: Addr = subject.start(); let sub: Recipient = addr.recipient::(); @@ -1791,7 +1853,16 @@ mod tests { let future = sub.send(RouteQueryMessage::data_indefinite_route_request(5)); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result = future.wait().unwrap(); assert_eq!(result, None); } @@ -1799,7 +1870,7 @@ mod tests { #[test] fn route_query_responds_with_none_when_asked_for_two_hop_round_trip_route_without_consuming_wallet( ) { - let system = System::new("route_query_responds_with_none_when_asked_for_two_hop_round_trip_route_without_consuming_wallet"); + let system = System::new(); let subject = make_standard_subject(); let addr: Addr = subject.start(); let sub: Recipient = addr.recipient::(); @@ -1807,7 +1878,16 @@ mod tests { let future = sub.send(RouteQueryMessage::data_indefinite_route_request(2)); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result = future.wait().unwrap(); assert_eq!(result, None); } @@ -1816,9 +1896,7 @@ mod tests { fn route_query_succeeds_when_asked_for_one_hop_round_trip_route_without_consuming_wallet() { let cryptde = main_cryptde(); let earning_wallet = make_wallet("earning"); - let system = System::new( - "route_query_succeeds_when_asked_for_one_hop_round_trip_route_without_consuming_wallet", - ); + let system = System::new(); let mut subject = make_standard_subject(); subject .neighborhood_database @@ -1850,7 +1928,16 @@ mod tests { let future = sub.send(msg); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let segment = |nodes: Vec<&NodeRecord>, component: Component| { RouteSegment::new( nodes.into_iter().map(|n| n.public_key()).collect(), @@ -1900,7 +1987,7 @@ mod tests { #[test] fn route_query_responds_with_none_when_asked_for_one_hop_round_trip_route_without_consuming_wallet_when_back_route_needs_two_hops( ) { - let system = System::new("route_query_responds_with_none_when_asked_for_one_hop_round_trip_route_without_consuming_wallet_when_back_route_needs_two_hops"); + let system = System::new(); let mut subject = make_standard_subject(); let a = &make_node_record(1234, true); let b = &subject.neighborhood_database.root().clone(); @@ -1923,7 +2010,16 @@ mod tests { let future = sub.send(msg); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result = future.wait().unwrap(); assert_eq!(result, None); } @@ -1931,7 +2027,7 @@ mod tests { #[test] fn route_query_responds_with_none_when_asked_for_two_hop_one_way_route_without_consuming_wallet( ) { - let system = System::new("route_query_responds_with_none_when_asked_for_two_hop_one_way_route_without_consuming_wallet"); + let system = System::new(); let subject = make_standard_subject(); let addr: Addr = subject.start(); let sub: Recipient = addr.recipient::(); @@ -1940,7 +2036,16 @@ mod tests { let future = sub.send(msg); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result = future.wait().unwrap(); assert_eq!(result, None); } @@ -1948,7 +2053,7 @@ mod tests { #[test] fn route_query_responds_with_standard_zero_hop_route_when_requested() { let cryptde = main_cryptde(); - let system = System::new("responds_with_standard_zero_hop_route_when_requested"); + let system = System::new(); let subject = make_standard_subject(); let addr: Addr = subject.start(); let sub: Recipient = addr.recipient::(); @@ -1956,7 +2061,16 @@ mod tests { let future = sub.send(RouteQueryMessage::data_indefinite_route_request(0)); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result = future.wait().unwrap().unwrap(); let expected_response = RouteQueryResponse { route: Route::round_trip( @@ -2017,7 +2131,7 @@ mod tests { fn route_query_messages() { let cryptde = main_cryptde(); let earning_wallet = make_wallet("earning"); - let system = System::new("route_query_messages"); + let system = System::new(); let mut subject = make_standard_subject(); subject .neighborhood_database @@ -2051,7 +2165,16 @@ mod tests { let data_route = sub.send(RouteQueryMessage::data_indefinite_route_request(2)); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result = data_route.wait().unwrap().unwrap(); let contract_address = TEST_DEFAULT_CHAIN.rec().contract; @@ -2233,7 +2356,7 @@ mod tests { #[test] fn return_route_ids_increase() { let cryptde = main_cryptde(); - let system = System::new("return_route_ids_increase"); + let system = System::new(); let (_, _, _, subject) = make_o_r_e_subject(); let addr: Addr = subject.start(); @@ -2243,7 +2366,16 @@ mod tests { let data_route_1 = sub.send(RouteQueryMessage::data_indefinite_route_request(2)); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result_0 = data_route_0.wait().unwrap().unwrap(); let result_1 = data_route_1.wait().unwrap().unwrap(); @@ -2265,7 +2397,7 @@ mod tests { #[test] fn can_update_consuming_wallet() { let cryptde = main_cryptde(); - let system = System::new("can_update_consuming_wallet"); + let system = System::new(); let (o, r, e, subject) = make_o_r_e_subject(); let addr: Addr = subject.start(); let set_wallet_sub = addr.clone().recipient::(); @@ -2297,7 +2429,16 @@ mod tests { let route_request_2 = route_sub.send(RouteQueryMessage::data_indefinite_route_request(2)); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let route_1 = route_request_1.wait().unwrap().unwrap().route; let route_2 = route_request_2.wait().unwrap().unwrap().route; @@ -2470,7 +2611,7 @@ mod tests { let other_neighbor_inside = other_neighbor.clone(); thread::spawn(move || { - let system = System::new("gossips_after_removing_a_neighbor"); + let system = System::new(); let mut subject = Neighborhood::new( cryptde, &bc_from_nc_plus( @@ -2513,7 +2654,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let other_neighbor_cryptde = @@ -2602,7 +2752,7 @@ mod tests { payload: gossip.clone(), payload_len: 0, }; - let system = System::new(""); + let system = System::new(); let addr: Addr = subject.start(); let peer_actors = peer_actors_builder().build(); addr.try_send(BindMessage { peer_actors }).unwrap(); @@ -2611,7 +2761,16 @@ mod tests { sub.try_send(cores_package).unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let mut handle_params = handle_params_arc.lock().unwrap(); let (call_database, call_agrs, call_gossip_source) = handle_params.remove(0); assert!(handle_params.is_empty()); @@ -2650,7 +2809,7 @@ mod tests { subject.gossip_acceptor = Box::new(gossip_acceptor); let (hopper, _, hopper_recording_arc) = make_recorder(); let peer_actors = peer_actors_builder().hopper(hopper).build(); - let system = System::new(""); + let system = System::new(); subject.hopper_no_lookup = Some(peer_actors.hopper.from_hopper_client_no_lookup); subject.handle_gossip( @@ -2659,7 +2818,16 @@ mod tests { ); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let hopper_recording = hopper_recording_arc.lock().unwrap(); let package = hopper_recording.get_record::(0); assert_eq!(1, hopper_recording.len()); @@ -2688,7 +2856,7 @@ mod tests { )); let mut subject: Neighborhood = neighborhood_from_nodes(&subject_node, Some(&neighbor)); let (hopper, _, hopper_recording_arc) = make_recorder(); - let system = System::new("neighborhood_transmits_gossip_failure_properly"); + let system = System::new(); let peer_actors = peer_actors_builder().hopper(hopper).build(); subject.hopper_no_lookup = Some(peer_actors.hopper.from_hopper_client_no_lookup); subject.gossip_acceptor = Box::new(gossip_acceptor); @@ -2696,7 +2864,16 @@ mod tests { subject.handle_gossip_agrs(vec![], SocketAddr::from_str("1.2.3.4:1234").unwrap()); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let hopper_recording = hopper_recording_arc.lock().unwrap(); let package = hopper_recording.get_record::(0); assert_eq!(1, hopper_recording.len()); @@ -2782,14 +2959,23 @@ mod tests { replacement_database, }); let (accountant, _, accountant_recording_arc) = make_recorder(); - let system = System::new("neighborhood_does_not_start_accountant_if_no_route_can_be_made"); + let system = System::new(); let peer_actors = peer_actors_builder().accountant(accountant).build(); bind_subject(&mut subject, peer_actors); subject.handle_gossip_agrs(vec![], SocketAddr::from_str("1.2.3.4:1234").unwrap()); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let accountant_recording = accountant_recording_arc.lock().unwrap(); assert_eq!(accountant_recording.len(), 0); assert_eq!(subject.is_connected, false); @@ -2806,14 +2992,23 @@ mod tests { }); subject.is_connected = true; let (accountant, _, accountant_recording_arc) = make_recorder(); - let system = System::new("neighborhood_does_not_start_accountant_if_no_route_can_be_made"); + let system = System::new(); let peer_actors = peer_actors_builder().accountant(accountant).build(); bind_subject(&mut subject, peer_actors); subject.handle_gossip_agrs(vec![], SocketAddr::from_str("1.2.3.4:1234").unwrap()); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let accountant_recording = accountant_recording_arc.lock().unwrap(); assert_eq!(accountant_recording.len(), 0); assert_eq!(subject.is_connected, true); @@ -2842,14 +3037,23 @@ mod tests { )); subject.is_connected = false; let (accountant, _, accountant_recording_arc) = make_recorder(); - let system = System::new("neighborhood_does_not_start_accountant_if_no_route_can_be_made"); + let system = System::new(); let peer_actors = peer_actors_builder().accountant(accountant).build(); bind_subject(&mut subject, peer_actors); subject.handle_gossip_agrs(vec![], SocketAddr::from_str("1.2.3.4:1234").unwrap()); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let accountant_recording = accountant_recording_arc.lock().unwrap(); assert_eq!(accountant_recording.len(), 1); assert_eq!(subject.is_connected, true); @@ -3077,7 +3281,7 @@ mod tests { let (hopper, _, hopper_recording_arc) = make_recorder(); let peer_actors = peer_actors_builder().hopper(hopper).build(); - let system = System::new(""); + let system = System::new(); subject.hopper = Some(peer_actors.hopper.from_hopper_client); subject.handle_gossip( @@ -3086,7 +3290,16 @@ mod tests { ); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let hopper_recording = hopper_recording_arc.lock().unwrap(); let package_1 = hopper_recording.get_record::(0); @@ -3167,7 +3380,7 @@ mod tests { let (hopper, _, hopper_recording_arc) = make_recorder(); let peer_actors = peer_actors_builder().hopper(hopper).build(); - let system = System::new(""); + let system = System::new(); subject.hopper = Some(peer_actors.hopper.from_hopper_client); subject.handle_gossip( @@ -3176,7 +3389,16 @@ mod tests { ); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let hopper_recording = hopper_recording_arc.lock().unwrap(); assert_eq!(hopper_recording.len(), 0); @@ -3200,7 +3422,7 @@ mod tests { subject.gossip_acceptor = Box::new(gossip_acceptor); let (hopper, _, hopper_recording_arc) = make_recorder(); let peer_actors = peer_actors_builder().hopper(hopper).build(); - let system = System::new(""); + let system = System::new(); subject.hopper_no_lookup = Some(peer_actors.hopper.from_hopper_client_no_lookup); let gossip_source = SocketAddr::from_str("8.6.5.4:8654").unwrap(); @@ -3211,7 +3433,16 @@ mod tests { ); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let hopper_recording = hopper_recording_arc.lock().unwrap(); let package = hopper_recording.get_record::(0); assert_eq!(1, hopper_recording.len()); @@ -3243,7 +3474,7 @@ mod tests { let subject_node = subject.neighborhood_database.root().clone(); let (hopper, _, hopper_recording_arc) = make_recorder(); let peer_actors = peer_actors_builder().hopper(hopper).build(); - let system = System::new(""); + let system = System::new(); subject.hopper = Some(peer_actors.hopper.from_hopper_client); subject.handle_gossip( @@ -3252,7 +3483,16 @@ mod tests { ); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let hopper_recording = hopper_recording_arc.lock().unwrap(); assert_eq!(0, hopper_recording.len()); } @@ -3269,7 +3509,7 @@ mod tests { let subject_node = subject.neighborhood_database.root().clone(); let (hopper, _, hopper_recording_arc) = make_recorder(); let peer_actors = peer_actors_builder().hopper(hopper).build(); - let system = System::new(""); + let system = System::new(); subject.hopper = Some(peer_actors.hopper.from_hopper_client); subject.handle_gossip( @@ -3278,7 +3518,16 @@ mod tests { ); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let hopper_recording = hopper_recording_arc.lock().unwrap(); assert_eq!(0, hopper_recording.len()); let tlh = TestLogHandler::new(); @@ -3378,7 +3627,7 @@ mod tests { let hopper = Recorder::new(); let this_node_inside = this_node.clone(); thread::spawn(move || { - let system = System::new(""); + let system = System::new(); let subject = Neighborhood::new( cryptde, &bc_from_nc_plus( @@ -3402,7 +3651,16 @@ mod tests { let sub = addr.recipient::>(); sub.try_send(cores_package).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let tlh = TestLogHandler::new(); tlh.await_log_containing( @@ -3448,7 +3706,7 @@ mod tests { ), ); let this_node = subject.neighborhood_database.root().clone(); - let system = System::new("node_gossips_to_neighbors_on_startup"); + let system = System::new(); let addr: Addr = subject.start(); let peer_actors = peer_actors_builder().hopper(hopper).build(); addr.try_send(BindMessage { peer_actors }).unwrap(); @@ -3457,7 +3715,16 @@ mod tests { sub.try_send(StartMessage {}).unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let locked_recording = hopper_recording.lock().unwrap(); let package_ref: &NoLookupIncipientCoresPackage = locked_recording.get_record(0); let neighbor_node_cryptde = CryptDENull::from(neighbor.public_key(), TEST_DEFAULT_CHAIN); @@ -3496,7 +3763,7 @@ mod tests { #[test] fn neighborhood_removes_neighbor_when_directed_to() { - let system = System::new("neighborhood_removes_neighbor_when_directed_to"); + let system = System::new(); let hopper = Recorder::new(); let mut subject = make_standard_subject(); let n = &subject.neighborhood_database.root().clone(); @@ -3541,7 +3808,16 @@ mod tests { )); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert_eq!(None, unsuccessful_three_hop_route.wait().unwrap()); assert_eq!( a.public_key(), @@ -3565,7 +3841,7 @@ mod tests { let cryptde = main_cryptde(); let (recorder, awaiter, recording_arc) = make_recorder(); thread::spawn(move || { - let system = System::new("responds_with_none_when_initially_configured_with_no_data"); + let system = System::new(); let addr: Addr = recorder.start(); let recipient: Recipient = @@ -3588,7 +3864,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); awaiter.await_message_count(1); @@ -3606,7 +3891,7 @@ mod tests { let consuming_wallet = Some(make_paying_wallet(b"consuming")); let (recorder, awaiter, recording_arc) = make_recorder(); thread::spawn(move || { - let system = System::new("neighborhood_sends_node_query_response_with_none_when_key_query_matches_no_configured_data"); + let system = System::new(); let addr: Addr = recorder.start(); let recipient: Recipient = addr.recipient::(); @@ -3650,7 +3935,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); awaiter.await_message_count(1); @@ -3677,7 +3971,7 @@ mod tests { }; let context_a = context.clone(); thread::spawn(move || { - let system = System::new("neighborhood_sends_node_query_response_with_result_when_key_query_matches_configured_data"); + let system = System::new(); let addr: Addr = recorder.start(); let recipient = addr.recipient::(); let mut subject = Neighborhood::new( @@ -3710,7 +4004,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); awaiter.await_message_count(1); @@ -3734,7 +4037,7 @@ mod tests { let consuming_wallet = Some(make_paying_wallet(b"consuming")); let (recorder, awaiter, recording_arc) = make_recorder(); thread::spawn(move || { - let system = System::new("neighborhood_sends_node_query_response_with_none_when_ip_address_query_matches_no_configured_data"); + let system = System::new(); let addr: Addr = recorder.start(); let recipient: Recipient = addr.recipient::(); @@ -3777,7 +4080,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); awaiter.await_message_count(1); @@ -3803,7 +4115,7 @@ mod tests { }; let context_a = context.clone(); thread::spawn(move || { - let system = System::new("neighborhood_sends_node_query_response_with_result_when_ip_address_query_matches_configured_data"); + let system = System::new(); let addr: Addr = recorder.start(); let recipient: Recipient = addr.recipient::(); @@ -3839,7 +4151,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); awaiter.await_message_count(1); @@ -3997,7 +4318,7 @@ mod tests { fn handle_stream_shutdown_handles_socket_addr_with_unknown_ip() { init_test_logging(); let (hopper, _, hopper_recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let unrecognized_node = make_node_record(3123, true); let unrecognized_node_addr = unrecognized_node.node_addr_opt().unwrap(); let unrecognized_socket_addr = SocketAddr::new( @@ -4016,7 +4337,16 @@ mod tests { }); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert_eq!(subject.neighborhood_database.keys().len(), 1); let hopper_recording = hopper_recording_arc.lock().unwrap(); @@ -4028,7 +4358,7 @@ mod tests { fn handle_stream_shutdown_handles_already_inactive_node() { init_test_logging(); let (hopper, _, hopper_recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let gossip_neighbor_node = make_node_record(2456, true); let inactive_neighbor_node = make_node_record(3123, true); let inactive_neighbor_node_addr = inactive_neighbor_node.node_addr_opt().unwrap(); @@ -4064,7 +4394,16 @@ mod tests { }); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert_eq!(subject.neighborhood_database.keys().len(), 3); assert_eq!( @@ -4083,7 +4422,7 @@ mod tests { fn handle_stream_shutdown_handles_existing_socket_addr() { init_test_logging(); let (hopper, _, hopper_recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let gossip_neighbor_node = make_node_record(2456, true); let shutdown_neighbor_node = make_node_record(3123, true); let shutdown_neighbor_node_addr = shutdown_neighbor_node.node_addr_opt().unwrap(); @@ -4119,7 +4458,16 @@ mod tests { }); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert_eq!(subject.neighborhood_database.keys().len(), 3); assert_eq!( @@ -4143,7 +4491,7 @@ mod tests { fn shutdown_instruction_generates_log() { running_test(); init_test_logging(); - let system = System::new("test"); + let system = System::new(); let subject = Neighborhood::new( main_cryptde(), &bc_from_nc_plus( @@ -4172,7 +4520,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); assert_eq!(ui_gateway_recording.len(), 0); TestLogHandler::new() @@ -4181,7 +4538,7 @@ mod tests { #[test] fn new_password_message_works() { - let system = System::new("test"); + let system = System::new(); let mut subject = make_standard_subject(); let root_node_record = subject.neighborhood_database.root().clone(); let set_past_neighbors_params_arc = Arc::new(Mutex::new(vec![])); @@ -4221,7 +4578,16 @@ mod tests { }; subject_addr.try_send(cores_package).unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let set_past_neighbors_params = set_past_neighbors_params_arc.lock().unwrap(); assert_eq!(set_past_neighbors_params[0].1, "borkety-bork"); } @@ -4422,7 +4788,7 @@ mod tests { A: Actor, M: Message, { - fn handle>(self, _: &mut A::Context, tx: Option) { + fn handle(self, ctx: &mut A::Context, tx: Option>) { if let Some(tx) = tx { tx.send(self); } diff --git a/node/src/node_configurator/configurator.rs b/node/src/node_configurator/configurator.rs index 0acc06a22..a35f4d88f 100644 --- a/node/src/node_configurator/configurator.rs +++ b/node/src/node_configurator/configurator.rs @@ -730,6 +730,7 @@ mod tests { }; use masq_lib::ui_gateway::{MessagePath, MessageTarget}; use std::sync::{Arc, Mutex}; + use std::time::SystemTime; use crate::db_config::persistent_configuration::{ PersistentConfigError, PersistentConfigurationReal, @@ -781,7 +782,7 @@ mod tests { #[test] fn ignores_unexpected_message() { - let system = System::new("test"); + let system = System::new(); let subject = make_subject(None); let subject_addr = subject.start(); let (ui_gateway, _, ui_gateway_recording) = make_recorder(); @@ -796,14 +797,23 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let recording = ui_gateway_recording.lock().unwrap(); assert_eq!(recording.len(), 0); } #[test] fn check_password_works() { - let system = System::new("test"); + let system = System::new(); let check_password_params_arc = Arc::new(Mutex::new(vec![])); let persistent_config = PersistentConfigurationMock::new() .check_password_params(&check_password_params_arc) @@ -825,7 +835,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let check_password_params = check_password_params_arc.lock().unwrap(); assert_eq!(*check_password_params, vec![Some("password".to_string())]); let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); @@ -865,7 +884,7 @@ mod tests { #[test] fn change_password_works() { - let system = System::new("test"); + let system = System::new(); let change_password_params_arc = Arc::new(Mutex::new(vec![])); let persistent_config = PersistentConfigurationMock::new() .change_password_params(&change_password_params_arc) @@ -892,7 +911,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let change_password_params = change_password_params_arc.lock().unwrap(); assert_eq!( *change_password_params, @@ -985,7 +1013,7 @@ mod tests { #[test] fn handle_wallet_addresses_works() { - let system = System::new("test"); + let system = System::new(); let mnemonic_seed_params_arc = Arc::new(Mutex::new(vec![])); let persistent_config = PersistentConfigurationMock::new() .check_password_result(Ok(true)) @@ -1014,7 +1042,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let mnemonic_seed_params = mnemonic_seed_params_arc.lock().unwrap(); assert_eq!(*mnemonic_seed_params, vec!["123password".to_string()]); let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); @@ -1244,9 +1281,18 @@ mod tests { }) .unwrap(); - let system = System::new("test"); + let system = System::new(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let response = ui_gateway_recording.get_record::(0); let (generated_wallets, context_id) = @@ -1450,9 +1496,18 @@ mod tests { }) .unwrap(); - let system = System::new("test"); + let system = System::new(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let response = ui_gateway_recording.get_record::(0); let (_, context_id) = UiRecoverWalletsResponse::fmb(response.body.clone()).unwrap(); @@ -1702,9 +1757,18 @@ mod tests { }) .unwrap(); - let system = System::new("test"); + let system = System::new(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let ui_gateway_recording = ui_gateway_recording_arc.lock().unwrap(); let response = ui_gateway_recording.get_record::(0); let (_, context_id) = UiSetConfigurationResponse::fmb(response.body.clone()).unwrap(); diff --git a/node/src/proxy_client/mod.rs b/node/src/proxy_client/mod.rs index bced09a9f..e9ef2ed56 100644 --- a/node/src/proxy_client/mod.rs +++ b/node/src/proxy_client/mod.rs @@ -354,6 +354,7 @@ mod tests { use std::sync::Arc; use std::sync::Mutex; use std::thread; + use std::time::SystemTime; fn dnss() -> Vec { vec![SocketAddr::from_str("8.8.8.8:53").unwrap()] @@ -481,7 +482,7 @@ mod tests { #[test] fn bind_operates_properly() { - let system = System::new("bind_initializes_resolver_wrapper_properly"); + let system = System::new(); let resolver_wrapper = ResolverWrapperMock::new(); let mut resolver_wrapper_new_parameters_arc: Arc< Mutex>, @@ -511,7 +512,16 @@ mod tests { subject_addr.try_send(BindMessage { peer_actors }).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let mut resolver_wrapper_new_parameters = resolver_wrapper_new_parameters_arc.lock().unwrap(); @@ -560,7 +570,7 @@ mod tests { request, 0, ); - let system = System::new("panics_if_hopper_is_unbound"); + let system = System::new(); let subject = ProxyClient::new(ProxyClientConfig { cryptde, dns_servers: dnss(), @@ -572,7 +582,16 @@ mod tests { subject_addr.try_send(package).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } #[test] @@ -582,7 +601,7 @@ mod tests { let stream_key = make_meaningless_stream_key(); let stream_key_inner = stream_key.clone(); thread::spawn(move || { - let system = System::new("logs_nonexistent_stream_key_during_dns_resolution_failure"); + let system = System::new(); let subject = ProxyClient::new(ProxyClientConfig { cryptde, dns_servers: vec![SocketAddr::from_str("1.1.1.1:53").unwrap()], @@ -597,7 +616,16 @@ mod tests { .try_send(DnsResolveFailure_0v1::new(stream_key_inner)) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); TestLogHandler::new().await_log_containing( &format!( @@ -620,7 +648,7 @@ mod tests { let return_route_inner = return_route.clone(); let originator_key_inner = originator_key.clone(); thread::spawn(move || { - let system = System::new("forwards_dns_resolve_failed_to_hopper"); + let system = System::new(); let peer_actors = peer_actors_builder().hopper(hopper).build(); let mut subject = ProxyClient::new(ProxyClientConfig { cryptde, @@ -651,7 +679,16 @@ mod tests { .try_send(DnsResolveFailure_0v1::new(stream_key_inner)) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); hopper_awaiter.await_message_count(1); @@ -698,7 +735,7 @@ mod tests { ); let hopper = Recorder::new(); - let system = System::new("data_from_hopper_is_relayed_to_stream_handler_pool"); + let system = System::new(); let peer_actors = peer_actors_builder().hopper(hopper).build(); let mut process_package_parameters = Arc::new(Mutex::new(vec![])); let pool = Box::new( @@ -723,7 +760,16 @@ mod tests { subject_addr.try_send(package).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let parameter = process_package_parameters.lock().unwrap().remove(0); assert_eq!(parameter, (request, Some(make_wallet("consuming")),)); } @@ -753,7 +799,7 @@ mod tests { ); let hopper = Recorder::new(); - let system = System::new("refuse_to_provide_exit_services_with_no_paying_wallet"); + let system = System::new(); let peer_actors = peer_actors_builder().hopper(hopper).build(); let mut process_package_parameters = Arc::new(Mutex::new(vec![])); let pool = Box::new( @@ -778,7 +824,16 @@ mod tests { subject_addr.try_send(package).unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert_eq!(0, process_package_parameters.lock().unwrap().len()); TestLogHandler::new().exists_log_containing(format!("WARN: ProxyClient: Refusing to provide exit services for CORES package with 12-byte payload without paying wallet").as_str()); } @@ -818,7 +873,7 @@ mod tests { ); let hopper = Recorder::new(); - let system = System::new("unparseable_request_results_in_log_and_no_response"); + let system = System::new(); let peer_actors = peer_actors_builder().hopper(hopper).build(); let mut process_package_parameters = Arc::new(Mutex::new(vec![])); let pool = Box::new( @@ -843,7 +898,16 @@ mod tests { subject_addr.try_send(package).unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let parameter = process_package_parameters.lock().unwrap().remove(0); assert_eq!(parameter, (request, None,)); } @@ -855,7 +919,7 @@ mod tests { let (accountant, _, accountant_recording_arc) = make_recorder(); let stream_key = make_meaningless_stream_key(); let data: &[u8] = b"An honest politician is one who, when he is bought, will stay bought."; - let system = System::new("inbound_server_data_is_translated_to_cores_packages"); + let system = System::new(); let mut subject = ProxyClient::new(ProxyClientConfig { cryptde: main_cryptde(), dns_servers: vec![SocketAddr::from_str("8.7.6.5:4321").unwrap()], @@ -916,7 +980,16 @@ mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let hopper_recording = hopper_recording_arc.lock().unwrap(); assert_eq!( hopper_recording.get_record::(0), @@ -991,7 +1064,7 @@ mod tests { let (accountant, _, accountant_recording_arc) = make_recorder(); let stream_key = make_meaningless_stream_key(); let data: &[u8] = b"An honest politician is one who, when he is bought, will stay bought."; - let system = System::new("inbound_server_data_is_translated_to_cores_packages"); + let system = System::new(); let mut subject = ProxyClient::new(ProxyClientConfig { cryptde: main_cryptde(), dns_servers: vec![SocketAddr::from_str("8.7.6.5:4321").unwrap()], @@ -1022,7 +1095,16 @@ mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let accountant_recording = accountant_recording_arc.lock().unwrap(); assert_eq!(accountant_recording.len(), 0); TestLogHandler::new().exists_log_containing( @@ -1041,7 +1123,7 @@ mod tests { let (accountant, _, accountant_recording_arc) = make_recorder(); let stream_key = make_meaningless_stream_key(); let data: &[u8] = b"An honest politician is one who, when he is bought, will stay bought."; - let system = System::new("inbound_server_data_is_translated_to_cores_packages"); + let system = System::new(); let mut subject = ProxyClient::new(ProxyClientConfig { cryptde: main_cryptde(), dns_servers: vec![SocketAddr::from_str("8.7.6.5:4321").unwrap()], @@ -1074,7 +1156,16 @@ mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let hopper_recording = hopper_recording_arc.lock().unwrap(); assert_eq!(hopper_recording.len(), 0); let accountant_recording = accountant_recording_arc.lock().unwrap(); @@ -1089,7 +1180,7 @@ mod tests { let (accountant, _, accountant_recording_arc) = make_recorder(); let stream_key = make_meaningless_stream_key(); let data: &[u8] = b"An honest politician is one who, when he is bought, will stay bought."; - let system = System::new("new_return_route_overwrites_existing_return_route"); + let system = System::new(); let mut subject = ProxyClient::new(ProxyClientConfig { cryptde, dns_servers: vec![SocketAddr::from_str("8.7.6.5:4321").unwrap()], @@ -1153,7 +1244,16 @@ mod tests { }) .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let mut process_package_params = process_package_params_arc.lock().unwrap(); let (actual_payload, paying_wallet_opt) = process_package_params.remove(0); assert_eq!(actual_payload, payload); diff --git a/node/src/proxy_client/stream_establisher.rs b/node/src/proxy_client/stream_establisher.rs index ce24f87cb..cbe402649 100644 --- a/node/src/proxy_client/stream_establisher.rs +++ b/node/src/proxy_client/stream_establisher.rs @@ -141,6 +141,7 @@ mod tests { use std::net::SocketAddr; use std::str::FromStr; use std::thread; + use std::time::SystemTime; use tokio::prelude::Async; #[test] @@ -148,12 +149,21 @@ mod tests { let (proxy_client, proxy_client_awaiter, proxy_client_recording_arc) = make_recorder(); let (sub_tx, sub_rx) = unbounded(); thread::spawn(move || { - let system = System::new("spawn_stream_reader_handles_data"); + let system = System::new(); let peer_actors = peer_actors_builder().proxy_client(proxy_client).build(); sub_tx .send(peer_actors.proxy_client_opt.unwrap().inbound_server_data) .expect("Unable to send inbound_server_data sub from proxy_client to test"); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let (ibsd_tx, ibsd_rx) = unbounded(); diff --git a/node/src/proxy_client/stream_handler_pool.rs b/node/src/proxy_client/stream_handler_pool.rs index ab2172fb6..cbdc3ca75 100644 --- a/node/src/proxy_client/stream_handler_pool.rs +++ b/node/src/proxy_client/stream_handler_pool.rs @@ -516,6 +516,7 @@ mod tests { use std::str::FromStr; use std::sync::{Arc, Mutex}; use std::thread; + use std::time::SystemTime; use tokio; use tokio::prelude::Async; use trust_dns_resolver::error::ResolveErrorKind; @@ -541,10 +542,12 @@ mod tests { .unwrap(), _ => panic!("Expected MessageType::ClientRequest, got something else"), }; - actix::run(move || { + if actix::run(move || { subject.process_package(payload, paying_wallet); ok(()) - }); + }) + .is_ok() + {}; } #[test] @@ -552,7 +555,7 @@ mod tests { let (proxy_client, proxy_client_awaiter, proxy_client_recording) = make_recorder(); let stream_key = make_meaningless_stream_key(); thread::spawn(move || { - let system = System::new("dns_resolution_failure_sends_a_message_to_proxy_client"); + let system = System::new(); let peer_actors = peer_actors_builder().proxy_client(proxy_client).build(); let cryptde = main_cryptde(); let resolver_mock = @@ -594,7 +597,16 @@ mod tests { StreamHandlerPoolReal::process_package(payload, None, Arc::new(Mutex::new(inner))); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); proxy_client_awaiter.await_message_count(1); @@ -1516,7 +1528,7 @@ mod tests { #[test] fn clean_up_dead_streams_sends_server_drop_report_if_dead_stream_is_in_map() { - let system = System::new("test"); + let system = System::new(); let (proxy_client, _, proxy_client_recording_arc) = make_recorder(); let peer_actors = peer_actors_builder().proxy_client(proxy_client).build(); let mut subject = StreamHandlerPoolReal::new( @@ -1542,7 +1554,16 @@ mod tests { subject.clean_up_dead_streams(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let proxy_client_recording = proxy_client_recording_arc.lock().unwrap(); let report = proxy_client_recording.get_record::(0); assert_eq!( @@ -1559,7 +1580,7 @@ mod tests { #[test] fn clean_up_dead_streams_does_not_send_server_drop_report_if_dead_stream_is_gone_already() { - let system = System::new("test"); + let system = System::new(); let (proxy_client, _, proxy_client_recording_arc) = make_recorder(); let peer_actors = peer_actors_builder().proxy_client(proxy_client).build(); let mut subject = StreamHandlerPoolReal::new( @@ -1578,7 +1599,16 @@ mod tests { subject.clean_up_dead_streams(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let proxy_client_recording = proxy_client_recording_arc.lock().unwrap(); assert_eq!(proxy_client_recording.len(), 0); } diff --git a/node/src/proxy_client/stream_reader.rs b/node/src/proxy_client/stream_reader.rs index c09c22b10..3c1ab4898 100644 --- a/node/src/proxy_client/stream_reader.rs +++ b/node/src/proxy_client/stream_reader.rs @@ -130,6 +130,7 @@ mod tests { use std::net::SocketAddr; use std::str::FromStr; use std::thread; + use std::time::SystemTime; #[test] fn stream_reader_assigns_a_sequence_to_client_response_payloads() { @@ -161,12 +162,21 @@ mod tests { let (tx, rx) = unbounded(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let peer_actors = peer_actors_builder().proxy_client(proxy_client).build(); tx.send(peer_actors.proxy_client_opt.unwrap().inbound_server_data) .expect("Internal Error"); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let proxy_client_sub = rx.recv().unwrap(); @@ -242,12 +252,21 @@ mod tests { ]; let (tx, rx) = unbounded(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let peer_actors = peer_actors_builder().proxy_client(proxy_client).build(); tx.send(peer_actors.proxy_client_opt.unwrap().inbound_server_data) .expect("Internal Error"); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let proxy_client_sub = rx.recv().unwrap(); let (stream_killer, stream_killer_params) = unbounded(); @@ -312,7 +331,7 @@ mod tests { let mut stream = ReadHalfWrapperMock::new(); stream.poll_read_results = vec![(vec![], Ok(Async::Ready(0)))]; - let system = System::new("receiving_0_bytes_sends_empty_cores_response_and_kills_stream"); + let system = System::new(); let peer_actors = peer_actors_builder().build(); let mut sequencer = Sequencer::new(); sequencer.next_sequence_number(); @@ -328,7 +347,16 @@ mod tests { sequencer, }; System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let result = subject.poll(); @@ -357,12 +385,21 @@ mod tests { let (tx, rx) = unbounded(); thread::spawn(move || { - let system = System::new("non_dead_stream_read_errors_log_but_do_not_shut_down"); + let system = System::new(); let peer_actors = peer_actors_builder().proxy_client(proxy_client).build(); tx.send(peer_actors.proxy_client_opt.unwrap().inbound_server_data) .expect("Internal Error"); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let proxy_client_sub = rx.recv().unwrap(); diff --git a/node/src/proxy_server/mod.rs b/node/src/proxy_server/mod.rs index 8540d5013..8bac8b6e9 100644 --- a/node/src/proxy_server/mod.rs +++ b/node/src/proxy_server/mod.rs @@ -41,12 +41,12 @@ use crate::sub_lib::ttl_hashmap::TtlHashMap; use crate::sub_lib::utils::NODE_MAILBOX_CAPACITY; use crate::sub_lib::wallet::Wallet; +use actix::{Actor, ActorFutureExt, Addr, Context, Handler, Recipient}; use pretty_hex::PrettyHex; use std::collections::HashMap; use std::net::SocketAddr; use std::rc::Rc; use std::time::Duration; -use actix::{Actor, Addr, Context, Handler, Recipient}; use tokio::prelude::Future; pub const CRASH_KEY: &str = "PROXYSERVER"; @@ -987,6 +987,7 @@ mod tests { use std::str::FromStr; use std::sync::{Arc, Mutex, MutexGuard}; use std::thread; + use std::time::SystemTime; const STANDARD_CONSUMING_WALLET_BALANCE: i64 = 0; @@ -1157,7 +1158,7 @@ mod tests { let stream_key_factory = StreamKeyFactoryMock::new() .make_parameters(&make_parameters_arc) .make_result(stream_key); - let system = System::new("proxy_server_receives_http_request_from_dispatcher_then_sends_cores_package_to_hopper"); + let system = System::new(); let mut subject = ProxyServer::new( main_cryptde, alias_cryptde, @@ -1176,7 +1177,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); hopper_awaiter.await_message_count(1); @@ -1260,9 +1270,7 @@ mod tests { let stream_key_factory = StreamKeyFactoryMock::new() .make_parameters(&make_parameters_arc_thread) .make_result(stream_key); - let system = System::new( - "proxy_server_receives_connect_responds_with_ok_and_stores_stream_key_and_hostname", - ); + let system = System::new(); let mut subject = ProxyServer::new( main_cryptde, alias_cryptde, @@ -1281,7 +1289,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); subject_addr.try_send(tunnelled_msg).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); hopper_awaiter.await_message_count(1); @@ -1310,7 +1327,7 @@ mod tests { #[test] fn handle_client_response_payload_increments_sequence_number_when_browser_proxy_sequence_offset_is_true( ) { - let system = System::new("handle_client_response_payload_increments_sequence_number_when_browser_proxy_sequence_offset_is_true"); + let system = System::new(); let (dispatcher_mock, _, dispatcher_log_arc) = make_recorder(); let cryptde = main_cryptde(); let mut subject = ProxyServer::new( @@ -1374,7 +1391,16 @@ mod tests { .unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let dispatcher_recording = dispatcher_log_arc.lock().unwrap(); let record = dispatcher_recording.get_record::(1); @@ -1414,9 +1440,7 @@ mod tests { let stream_key_factory = StreamKeyFactoryMock::new() .make_parameters(&stream_key_parameters_arc_thread) .make_result(stream_key); - let system = System::new( - "proxy_server_receives_connect_responds_with_ok_and_stores_stream_key_and_hostname", - ); + let system = System::new(); let mut subject = ProxyServer::new( cryptde, alias_cryptde(), @@ -1434,7 +1458,16 @@ mod tests { subject_addr.try_send(BindMessage { peer_actors }).unwrap(); subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); thread::sleep(Duration::from_millis(500)); @@ -1484,9 +1517,7 @@ mod tests { let stream_key_factory = StreamKeyFactoryMock::new() .make_parameters(&stream_key_parameters_arc_thread) .make_result(stream_key); - let system = System::new( - "proxy_server_receives_connect_responds_with_ok_and_stores_stream_key_and_hostname", - ); + let system = System::new(); let mut subject = ProxyServer::new( cryptde, alias_cryptde(), @@ -1504,7 +1535,16 @@ mod tests { subject_addr.try_send(BindMessage { peer_actors }).unwrap(); subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); thread::sleep(Duration::from_millis(500)); @@ -1543,7 +1583,7 @@ mod tests { data: expected_data.clone(), }; let stream_key_factory = StreamKeyFactoryMock::new(); // can't make any stream keys; shouldn't have to - let system = System::new("proxy_server_receives_http_request_with_no_consuming_wallet_and_sends_impersonated_response"); + let system = System::new(); let mut subject = ProxyServer::new(cryptde, alias_cryptde(), true, None); subject.stream_key_factory = Box::new(stream_key_factory); subject.keys_and_addrs.insert(stream_key, socket_addr); @@ -1559,7 +1599,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let neighborhood_recording = neighborhood_log_arc.lock().unwrap(); assert!(neighborhood_recording.is_empty()); let hopper_recording = hopper_log_arc.lock().unwrap(); @@ -1602,7 +1651,7 @@ mod tests { data: expected_data.clone(), }; let stream_key_factory = StreamKeyFactoryMock::new(); // can't make any stream keys; shouldn't have to - let system = System::new("proxy_server_receives_tls_request_with_no_consuming_wallet_and_sends_impersonated_response"); + let system = System::new(); let mut subject = ProxyServer::new(cryptde, alias_cryptde(), true, None); subject.stream_key_factory = Box::new(stream_key_factory); subject.keys_and_addrs.insert(stream_key, socket_addr); @@ -1618,7 +1667,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let neighborhood_recording = neighborhood_log_arc.lock().unwrap(); assert!(neighborhood_recording.is_empty()); let hopper_recording = hopper_log_arc.lock().unwrap(); @@ -1665,7 +1723,7 @@ mod tests { data: expected_data_inner, }; let stream_key_factory = StreamKeyFactoryMock::new(); // can't make any stream keys; shouldn't have to - let system = System::new("proxy_server_receives_http_request_with_no_consuming_wallet_in_zero_hop_mode_and_handles_normally"); + let system = System::new(); let mut subject = ProxyServer::new(main_cryptde, alias_cryptde, false, None); subject.stream_key_factory = Box::new(stream_key_factory); subject.keys_and_addrs.insert(stream_key, socket_addr); @@ -1680,7 +1738,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); hopper_awaiter.await_message_count(1); let neighborhood_recording = neighborhood_log_arc.lock().unwrap(); @@ -1743,7 +1810,7 @@ mod tests { data: expected_data_inner, }; let stream_key_factory = StreamKeyFactoryMock::new(); // can't make any stream keys; shouldn't have to - let system = System::new("proxy_server_receives_tls_request_with_no_consuming_wallet_in_zero_hop_mode_and_handles_normally"); + let system = System::new(); let mut subject = ProxyServer::new(main_cryptde, alias_cryptde, false, None); subject.stream_key_factory = Box::new(stream_key_factory); subject.keys_and_addrs.insert(stream_key, socket_addr); @@ -1758,7 +1825,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); hopper_awaiter.await_message_count(1); let neighborhood_recording = neighborhood_log_arc.lock().unwrap(); @@ -1842,7 +1918,7 @@ mod tests { .unwrap(); thread::spawn(move || { let stream_key_factory = StreamKeyFactoryMock::new(); // can't make any stream keys; shouldn't have to - let system = System::new("proxy_server_receives_http_request_from_dispatcher_then_sends_cores_package_to_hopper"); + let system = System::new(); let mut subject = ProxyServer::new( main_cryptde, alias_cryptde, @@ -1861,7 +1937,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); hopper_awaiter.await_message_count(1); @@ -1915,7 +2000,7 @@ mod tests { .unwrap(); thread::spawn(move || { let stream_key_factory = StreamKeyFactoryMock::new(); // can't make any stream keys; shouldn't have to - let system = System::new("proxy_server_applies_late_wallet_information"); + let system = System::new(); let mut subject = ProxyServer::new(main_cryptde, alias_cryptde, false, None); subject.stream_key_factory = Box::new(stream_key_factory); subject.keys_and_addrs.insert(stream_key, socket_addr); @@ -1934,7 +2019,16 @@ mod tests { .unwrap(); subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); hopper_awaiter.await_message_count(1); @@ -2032,7 +2126,7 @@ mod tests { .unwrap(); thread::spawn(move || { let stream_key_factory = StreamKeyFactoryMock::new().make_result(stream_key); - let system = System::new("proxy_server_receives_http_request_from_dispatcher_then_sends_cores_package_to_hopper"); + let system = System::new(); let mut subject = ProxyServer::new( main_cryptde, alias_cryptde, @@ -2050,7 +2144,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); hopper_awaiter.await_message_count(1); @@ -2088,7 +2191,7 @@ mod tests { thread::spawn(move || { let stream_key_factory = StreamKeyFactoryMock::new().make_result(stream_key); - let system = System::new("proxy_server_adds_route_for_stream_key"); + let system = System::new(); let mut subject = ProxyServer::new( cryptde, alias_cryptde(), @@ -2109,7 +2212,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let expected_add_route_message = AddRouteMessage { @@ -2170,7 +2282,7 @@ mod tests { thread::spawn(move || { let stream_key_factory = StreamKeyFactoryMock::new().make_result(stream_key); - let system = System::new("proxy_server_uses_existing_route"); + let system = System::new(); let mut subject = ProxyServer::new( main_cryptde, alias_cryptde, @@ -2190,7 +2302,16 @@ mod tests { .unwrap(); subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); hopper_awaiter.await_message_count(1); @@ -2255,7 +2376,7 @@ mod tests { let stream_key = make_meaningless_stream_key(); let expected_data = http_request.to_vec(); let system = - System::new("proxy_server_sends_message_to_accountant_for_routing_service_consumed"); + System::new(); let peer_actors = peer_actors_builder() .accountant(accountant_mock) .hopper(hopper_mock) @@ -2286,7 +2407,16 @@ mod tests { ); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let recording = hopper_recording_arc.lock().unwrap(); let record = recording.get_record::(0); let payload_enc = &record.payload; @@ -2333,7 +2463,7 @@ mod tests { let stream_key = make_meaningless_stream_key(); let expected_data = http_request.to_vec(); let system = - System::new("proxy_server_sends_message_to_accountant_for_routing_service_consumed"); + System::new(); let peer_actors = peer_actors_builder() .proxy_server(proxy_server_mock) .build(); @@ -2362,7 +2492,16 @@ mod tests { ); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let recording = proxy_server_recording_arc.lock().unwrap(); let record = recording.get_record::(0); assert_eq!( @@ -2412,7 +2551,7 @@ mod tests { thread::spawn(move || { let stream_key_factory = StreamKeyFactoryMock::new().make_result(stream_key); let system = - System::new("proxy_server_logs_messages_when_routing_services_are_not_requested"); + System::new(); let mut subject = ProxyServer::new( cryptde, alias_cryptde(), @@ -2428,7 +2567,16 @@ mod tests { peer_actors.proxy_server = ProxyServer::make_subs_from(&subject_addr); subject_addr.try_send(BindMessage { peer_actors }).unwrap(); subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); TestLogHandler::new() @@ -2480,7 +2628,7 @@ mod tests { thread::spawn(move || { let stream_key_factory = StreamKeyFactoryMock::new().make_result(stream_key); let system = - System::new("proxy_server_sends_message_to_accountant_for_exit_service_consumed"); + System::new(); let mut subject = ProxyServer::new( cryptde, alias_cryptde(), @@ -2496,7 +2644,16 @@ mod tests { peer_actors.proxy_server = ProxyServer::make_subs_from(&subject_addr); subject_addr.try_send(BindMessage { peer_actors }).unwrap(); subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); accountant_awaiter.await_message_count(1); @@ -2537,7 +2694,7 @@ mod tests { thread::spawn(move || { let stream_key_factory = StreamKeyFactoryMock::new().make_result(stream_key); let system = - System::new("proxy_server_logs_message_when_exit_services_are_not_consumed"); + System::new(); let mut subject = ProxyServer::new( cryptde, alias_cryptde(), @@ -2553,7 +2710,16 @@ mod tests { peer_actors.proxy_server = ProxyServer::make_subs_from(&subject_addr); subject_addr.try_send(BindMessage { peer_actors }).unwrap(); subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); TestLogHandler::new() @@ -2583,7 +2749,7 @@ mod tests { is_clandestine: false, }; thread::spawn(move || { - let system = System::new("proxy_server_receives_http_request_from_dispatcher_but_neighborhood_cant_make_route"); + let system = System::new(); let subject = ProxyServer::new( cryptde, alias_cryptde(), @@ -2600,7 +2766,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); dispatcher_awaiter.await_message_count(1); @@ -2623,7 +2798,7 @@ mod tests { #[test] #[should_panic(expected = "Expected RoundTrip ExpectedServices but got OneWay")] fn proxy_server_panics_if_it_receives_a_one_way_route_from_a_request_for_a_round_trip_route() { - let _system = System::new("proxy_server_panics_if_it_receives_a_one_way_route_from_a_request_for_a_round_trip_route"); + let _system = System::new(); let peer_actors = peer_actors_builder().build(); let cryptde = main_cryptde(); @@ -2713,7 +2888,7 @@ mod tests { is_clandestine: false, }; thread::spawn(move || { - let system = System::new("proxy_server_receives_http_request_from_dispatcher_but_neighborhood_cant_make_route"); + let system = System::new(); let subject = ProxyServer::new( cryptde, alias_cryptde(), @@ -2730,7 +2905,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); dispatcher_awaiter.await_message_count(1); @@ -2821,7 +3005,7 @@ mod tests { ); subject.stream_key_factory = Box::new(StreamKeyFactoryMock::new().make_result(stream_key.clone())); - let system = System::new("proxy_server_receives_tls_client_hello_from_dispatcher_then_sends_cores_package_to_hopper"); + let system = System::new(); let subject_addr: Addr = subject.start(); let mut peer_actors = peer_actors_builder() .hopper(hopper_mock) @@ -2832,7 +3016,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); hopper_awaiter.await_message_count(1); @@ -2899,7 +3092,7 @@ mod tests { ); subject.stream_key_factory = Box::new(StreamKeyFactoryMock::new().make_result(stream_key.clone())); - let system = System::new("proxy_server_receives_tls_client_hello_from_dispatcher_then_sends_cores_package_to_hopper"); + let system = System::new(); let subject_addr: Addr = subject.start(); let mut peer_actors = peer_actors_builder() .hopper(hopper_mock) @@ -2910,7 +3103,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); hopper_awaiter.await_message_count(1); @@ -2975,7 +3177,7 @@ mod tests { ); subject.stream_key_factory = Box::new(StreamKeyFactoryMock::new().make_result(stream_key.clone())); - let system = System::new("proxy_server_receives_tls_client_hello_from_dispatcher_then_sends_cores_package_to_hopper"); + let system = System::new(); let subject_addr: Addr = subject.start(); let mut peer_actors = peer_actors_builder() .hopper(hopper_mock) @@ -2986,7 +3188,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); hopper_awaiter.await_message_count(1); @@ -3034,7 +3245,7 @@ mod tests { is_clandestine: false, }; thread::spawn(move || { - let system = System::new("proxy_server_receives_tls_client_hello_from_dispatcher_but_neighborhood_cant_make_route"); + let system = System::new(); let subject = ProxyServer::new( cryptde, alias_cryptde(), @@ -3051,7 +3262,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); dispatcher_awaiter.await_message_count(1); let recording = dispatcher_recording_arc.lock().unwrap(); @@ -3071,7 +3291,7 @@ mod tests { #[test] fn proxy_server_receives_terminal_response_from_hopper() { init_test_logging(); - let system = System::new("proxy_server_receives_response_from_hopper"); + let system = System::new(); let (dispatcher_mock, _, dispatcher_log_arc) = make_recorder(); let cryptde = main_cryptde(); let mut subject = ProxyServer::new( @@ -3120,7 +3340,16 @@ mod tests { subject_addr.try_send(second_expired_cores_package).unwrap(); // should generate log because stream key is now unknown System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let recording = dispatcher_log_arc.lock().unwrap(); let record = recording.get_record::(0); @@ -3195,7 +3424,7 @@ mod tests { #[test] fn proxy_server_receives_nonterminal_response_from_hopper() { - let system = System::new("proxy_server_receives_response_from_hopper"); + let system = System::new(); let (dispatcher_mock, _, dispatcher_log_arc) = make_recorder(); let (accountant, _, accountant_recording_arc) = make_recorder(); let cryptde = main_cryptde(); @@ -3321,7 +3550,16 @@ mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let dispatcher_recording = dispatcher_log_arc.lock().unwrap(); let record = dispatcher_recording.get_record::(0); @@ -3376,7 +3614,7 @@ mod tests { #[test] fn handle_dns_resolve_failure_sends_message_to_dispatcher() { - let system = System::new("proxy_server_receives_response_from_routing_services"); + let system = System::new(); let (dispatcher_mock, _, dispatcher_log_arc) = make_recorder(); @@ -3431,7 +3669,16 @@ mod tests { subject_addr.try_send(expired_cores_package).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let dispatcher_recording = dispatcher_log_arc.lock().unwrap(); let record = dispatcher_recording.get_record::(0); @@ -3451,7 +3698,7 @@ mod tests { #[test] fn handle_dns_resolve_failure_reports_services_consumed() { - let system = System::new("proxy_server_records_accounting"); + let system = System::new(); let (accountant, _, accountant_recording_arc) = make_recorder(); let cryptde = main_cryptde(); let mut subject = ProxyServer::new( @@ -3518,7 +3765,16 @@ mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let accountant_recording = accountant_recording_arc.lock().unwrap(); check_exit_report(&accountant_recording, 0, &incoming_route_d_wallet, 0); @@ -3539,7 +3795,7 @@ mod tests { #[test] fn handle_dns_resolve_failure_sends_message_to_neighborhood() { - let system = System::new("test"); + let system = System::new(); let (neighborhood_mock, _, neighborhood_log_arc) = make_recorder(); @@ -3597,7 +3853,16 @@ mod tests { subject_addr.try_send(expired_cores_package).unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let neighborhood_recording = neighborhood_log_arc.lock().unwrap(); let record = neighborhood_recording.get_record::(0); @@ -3610,7 +3875,7 @@ mod tests { #[test] fn handle_dns_resolve_failure_logs_when_stream_key_be_gone_but_server_name_be_not() { init_test_logging(); - let system = System::new("test"); + let system = System::new(); let (neighborhood_mock, _, _) = make_recorder(); @@ -3675,7 +3940,16 @@ mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_containing( format!("Discarding DnsResolveFailure message for \"server.com\" from an unrecognized stream key {:?}", stream_key).as_str()); @@ -3684,7 +3958,7 @@ mod tests { #[test] fn handle_dns_resolve_failure_logs_when_stream_key_and_server_name_are_both_missing() { init_test_logging(); - let system = System::new("test"); + let system = System::new(); let (neighborhood_mock, _, _) = make_recorder(); @@ -3749,7 +4023,16 @@ mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_containing( format!("Discarding DnsResolveFailure message for from an unrecognized stream key {:?}", stream_key).as_str()); @@ -3822,7 +4105,7 @@ mod tests { #[test] #[should_panic(expected = "Dispatcher unbound in ProxyServer")] fn panics_if_dispatcher_is_unbound() { - let system = System::new("panics_if_dispatcher_is_unbound"); + let system = System::new(); let cryptde = main_cryptde(); let socket_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); let stream_key = make_meaningless_stream_key(); @@ -3866,13 +4149,22 @@ mod tests { subject_addr.try_send(expired_cores_package).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } #[test] #[should_panic(expected = "Neighborhood unbound in ProxyServer")] fn panics_if_hopper_is_unbound() { - let system = System::new("panics_if_hopper_is_unbound"); + let system = System::new(); let http_request = b"GET /index.html HTTP/1.1\r\nHost: nowhere.com\r\n\r\n"; let subject = ProxyServer::new(main_cryptde(), alias_cryptde(), false, None); let socket_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -3890,7 +4182,16 @@ mod tests { subject_addr.try_send(msg_from_dispatcher).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } #[test] @@ -3900,7 +4201,7 @@ mod tests { let cryptde = main_cryptde(); let (dispatcher, _, dispatcher_recording_arc) = make_recorder(); let (accountant, _, accountant_recording_arc) = make_recorder(); - let system = System::new("report_response_services_consumed_complains_and_drops_package_if_return_route_id_is_unrecognized"); + let system = System::new(); let mut subject = ProxyServer::new( cryptde, alias_cryptde(), @@ -3937,7 +4238,16 @@ mod tests { subject_addr.try_send(expired_cores_package).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_containing("ERROR: ProxyServer: Can't report services consumed: received response with bogus return-route ID 1234. Ignoring"); assert_eq!(dispatcher_recording_arc.lock().unwrap().len(), 0); assert_eq!(accountant_recording_arc.lock().unwrap().len(), 0); @@ -3950,7 +4260,7 @@ mod tests { let cryptde = main_cryptde(); let (dispatcher, _, dispatcher_recording_arc) = make_recorder(); let (accountant, _, accountant_recording_arc) = make_recorder(); - let system = System::new("report_response_services_consumed_complains_and_drops_package_if_return_route_id_is_unreadable"); + let system = System::new(); let mut subject = ProxyServer::new( cryptde, alias_cryptde(), @@ -3989,7 +4299,16 @@ mod tests { subject_addr.try_send(expired_cores_package).unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_containing( "ERROR: ProxyServer: Can't report services consumed: DecryptionError(InvalidKey(\"Could not decrypt with", ); @@ -4005,7 +4324,7 @@ mod tests { let (tx, rx) = unbounded(); thread::spawn(move || { - let system = System::new("report_response_services_consumed_complains_and_drops_package_if_return_route_id_does_not_exist"); + let system = System::new(); let mut subject = ProxyServer::new( cryptde, alias_cryptde(), @@ -4031,7 +4350,16 @@ mod tests { subject_addr.try_send(BindMessage { peer_actors }).unwrap(); tx.send(subject_addr).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let subject_addr = rx.recv().unwrap(); @@ -4100,7 +4428,7 @@ mod tests { #[test] fn handle_stream_shutdown_msg_reports_to_counterpart_through_tunnel_when_necessary() { - let system = System::new("test"); + let system = System::new(); let mut subject = ProxyServer::new( main_cryptde(), alias_cryptde(), @@ -4185,7 +4513,16 @@ mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let recording = hopper_recording_arc.lock().unwrap(); let record = recording.get_record::(0); assert_eq!(record.route, affected_route); @@ -4222,7 +4559,7 @@ mod tests { #[test] fn handle_stream_shutdown_msg_reports_to_counterpart_without_tunnel_when_necessary() { - let system = System::new("test"); + let system = System::new(); let mut subject = ProxyServer::new( main_cryptde(), alias_cryptde(), @@ -4301,7 +4638,16 @@ mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let recording = hopper_recording_arc.lock().unwrap(); let record = recording.get_record::(0); assert_eq!(record.route, affected_route); @@ -4403,7 +4749,7 @@ mod tests { expected = "ProxyServer should never get ShutdownStreamMsg about clandestine stream" )] fn handle_stream_shutdown_complains_about_clandestine_message() { - let system = System::new("test"); + let system = System::new(); let subject = ProxyServer::new(main_cryptde(), alias_cryptde(), true, None); let subject_addr = subject.start(); @@ -4416,6 +4762,15 @@ mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } } diff --git a/node/src/run_modes.rs b/node/src/run_modes.rs index f37be411c..d57bb08c3 100644 --- a/node/src/run_modes.rs +++ b/node/src/run_modes.rs @@ -224,7 +224,7 @@ struct RunnerReal { impl Runner for RunnerReal { fn run_node(&self, args: &[String], streams: &mut StdStreams<'_>) -> Result<(), RunnerError> { - let system = System::new("main"); + let system = System::new(); let mut server_initializer = self.server_initializer_factory.make(); server_initializer.go(streams, args)?; actix::spawn(server_initializer.map_err(|_| { @@ -232,7 +232,7 @@ impl Runner for RunnerReal { })); match system.run() { Ok(_) => Ok(()), - Err(_) => return Err(RunnerError::Numeric(1)) + Err(_) => Err(RunnerError::Numeric(1)), } } diff --git a/node/src/run_modes_factories.rs b/node/src/run_modes_factories.rs index 8c19fe002..bb0ceefb4 100644 --- a/node/src/run_modes_factories.rs +++ b/node/src/run_modes_factories.rs @@ -128,7 +128,6 @@ pub struct ClusteredParams { #[cfg(test)] mod tests { - use std::ptr::addr_of; use crate::daemon::daemon_initializer::{ DaemonInitializerReal, RecipientsFactoryReal, RerunnerReal, }; @@ -147,6 +146,7 @@ mod tests { }; use masq_lib::shared_schema::ConfiguratorError; use masq_lib::utils::SliceToVec; + use std::ptr::addr_of; use std::sync::{Arc, Mutex}; fn test_clustered_params() -> ClusteredParams { diff --git a/node/src/stream_handler_pool.rs b/node/src/stream_handler_pool.rs index 607aa0747..09f38dd26 100644 --- a/node/src/stream_handler_pool.rs +++ b/node/src/stream_handler_pool.rs @@ -584,6 +584,7 @@ mod tests { use std::str::FromStr; use std::sync::{Arc, Mutex}; use std::thread; + use std::time::SystemTime; use tokio::prelude::Async; struct TrafficAnalyzerMock {} @@ -616,7 +617,7 @@ mod tests { let awaiter = dispatcher.get_awaiter(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let mut subject = StreamHandlerPool::new(vec![]); subject.stream_connector = Box::new(StreamConnectorMock::new()); let subject_addr: Addr = subject.start(); @@ -660,7 +661,16 @@ mod tests { )) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); awaiter.await_message_count(4); @@ -726,7 +736,7 @@ mod tests { let peer_addr = SocketAddr::from_str("1.2.3.5:6789").unwrap(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let subject = StreamHandlerPool::new(vec![]); let subject_addr: Addr = subject.start(); @@ -770,7 +780,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); TestLogHandler::new().await_log_containing( @@ -789,7 +808,7 @@ mod tests { let (sub_tx, sub_rx) = unbounded(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let mut subject = StreamHandlerPool::new(vec![]); subject.stream_connector = Box::new( @@ -809,7 +828,16 @@ mod tests { .unwrap(); sub_tx.send(subject_subs).expect("Internal Error"); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let subject_subs = sub_rx.recv().unwrap(); @@ -893,7 +921,7 @@ mod tests { let peer_addr = SocketAddr::from_str("1.2.3.5:5673").unwrap(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let mut subject = StreamHandlerPool::new(vec![Box::new(JsonDiscriminatorFactory {})]); subject.stream_connector = Box::new(StreamConnectorMock::new().connection( @@ -953,7 +981,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); TestLogHandler::new().await_log_containing( @@ -965,7 +1002,7 @@ mod tests { #[test] fn handle_remove_stream_msg_handles_report_to_counterpart_scenario() { let (recorder, _, recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let sub = recorder.start().recipient::(); let mut subject = StreamHandlerPool::new(vec![]); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -984,7 +1021,16 @@ mod tests { }); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert_eq!(subject.stream_writers.contains_key(&sw_key), false); let recording = recording_arc.lock().unwrap(); let record = recording.get_record::(0); @@ -1001,7 +1047,7 @@ mod tests { #[test] fn handle_remove_stream_msg_handles_no_report_to_counterpart_scenario() { let (recorder, _, recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let sub = recorder.start().recipient::(); let mut subject = StreamHandlerPool::new(vec![]); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -1019,7 +1065,16 @@ mod tests { }); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert_eq!(subject.stream_writers.contains_key(&sw_key), false); let recording = recording_arc.lock().unwrap(); let record = recording.get_record::(0); @@ -1039,7 +1094,7 @@ mod tests { #[test] fn handle_remove_stream_msg_handles_stream_waiting_for_connect_scenario() { let (recorder, _, recording_arc) = make_recorder(); - let system = System::new("test"); + let system = System::new(); let sub = recorder.start().recipient::(); let mut subject = StreamHandlerPool::new(vec![]); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -1055,7 +1110,16 @@ mod tests { }); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert_eq!(subject.stream_writers.contains_key(&sw_key), false); let recording = recording_arc.lock().unwrap(); let record = recording.get_record::(0); @@ -1079,7 +1143,7 @@ mod tests { let connect_pair_params_arc_a = connect_pair_params_arc.clone(); let (neighborhood, neighborhood_awaiter, neighborhood_recording_arc) = make_recorder(); thread::spawn(move || { - let system = System::new("when_stream_handler_pool_fails_to_create_nonexistent_stream_for_write_then_it_logs_and_notifies_neighborhood"); + let system = System::new(); let mut subject = StreamHandlerPool::new(vec![]); subject.stream_connector = Box::new( StreamConnectorMock::new() @@ -1118,7 +1182,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); TestLogHandler::new().await_log_containing("ERROR: Dispatcher: Stream to 1.2.3.5:7000 does not exist and could not be connected; discarding 5 bytes: other error", 1000); @@ -1190,7 +1263,16 @@ mod tests { tx.send(subject_subs).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let subject_subs = rx.recv().unwrap(); @@ -1263,7 +1345,7 @@ mod tests { let (tx, rx) = unbounded(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let subject = StreamHandlerPool::new(vec![]); let subject_addr: Addr = subject.start(); @@ -1296,7 +1378,16 @@ mod tests { tx.send(subject_subs).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let subject_subs = rx.recv().unwrap(); @@ -1341,7 +1432,7 @@ mod tests { let key = cryptde.public_key().clone(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let subject = StreamHandlerPool::new(vec![]); let subject_addr: Addr = subject.start(); @@ -1369,7 +1460,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); TestLogHandler::new().await_log_containing( @@ -1389,7 +1489,7 @@ mod tests { let key = cryptde.public_key().clone(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let subject = StreamHandlerPool::new(vec![]); let subject_addr: Addr = subject.start(); @@ -1421,7 +1521,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); TestLogHandler::new().await_log_containing( @@ -1453,7 +1562,7 @@ mod tests { let (tx, rx) = unbounded(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let mut subject = StreamHandlerPool::new(vec![]); subject .stream_writers @@ -1484,7 +1593,16 @@ mod tests { tx.send(subject_subs).expect("Tx failure"); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let subject_subs = rx.recv().unwrap(); @@ -1574,7 +1692,7 @@ mod tests { let (tx, rx) = unbounded(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let mut subject = StreamHandlerPool::new(vec![]); subject.stream_connector = Box::new( StreamConnectorMock::new() @@ -1609,7 +1727,16 @@ mod tests { tx.send(subject_subs).expect("Tx failure"); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let subject_subs = rx.recv().unwrap(); @@ -1703,7 +1830,7 @@ mod tests { data: b"hello".to_vec(), }; - let system = System::new("test"); + let system = System::new(); let subject = StreamHandlerPool::new(vec![]); let subject_addr: Addr = subject.start(); let subject_subs = StreamHandlerPool::make_subs_from(&subject_addr); @@ -1729,7 +1856,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } #[test] @@ -1751,7 +1887,7 @@ mod tests { let peer_addr = SocketAddr::from_str("1.2.3.5:6789").unwrap(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let subject = StreamHandlerPool::new(vec![]); let subject_addr: Addr = subject.start(); @@ -1805,7 +1941,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); await_messages(2, &write_stream_params_arc); @@ -1824,7 +1969,7 @@ mod tests { let peer_addr = SocketAddr::from_str("1.2.3.5:6789").unwrap(); thread::spawn(move || { - let system = System::new("test"); + let system = System::new(); let mut subject = StreamHandlerPool::new(vec![]); subject.traffic_analyzer = Box::new(TrafficAnalyzerMock {}); @@ -1869,7 +2014,16 @@ mod tests { }) .unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); TestLogHandler::new().await_log_containing("Masking failed for 1.2.3.5:6789: Low-level data error: don't care. Discarding 5 bytes.", 1000); @@ -1902,7 +2056,16 @@ mod tests { tx.send(subject_subs).unwrap(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let subject_subs = rx.recv().unwrap(); diff --git a/node/src/stream_messages.rs b/node/src/stream_messages.rs index 3ad6f726c..cac1e151d 100644 --- a/node/src/stream_messages.rs +++ b/node/src/stream_messages.rs @@ -11,7 +11,7 @@ use std::fmt::Formatter; use std::net::SocketAddr; #[derive(Message)] - +#[rtype(result = "")] pub struct AddStreamMsg { pub connection_info: ConnectionInfo, pub origin_port: Option, @@ -45,7 +45,7 @@ pub enum RemovedStreamType { } #[derive(PartialEq, Message)] - +#[rtype(result = "")] pub struct RemoveStreamMsg { pub local_addr: SocketAddr, pub peer_addr: SocketAddr, @@ -64,7 +64,7 @@ impl Debug for RemoveStreamMsg { } #[derive(Message, Clone)] - +#[rtype(result = "")] pub struct PoolBindMessage { pub dispatcher_subs: DispatcherSubs, pub stream_handler_pool_subs: StreamHandlerPoolSubs, @@ -86,7 +86,7 @@ mod tests { #[test] fn pool_bind_message_is_debug() { - let _system = System::new("test"); + let _system = System::new(); let dispatcher_subs = peer_actors_builder().build().dispatcher; let stream_handler_pool_subs = make_stream_handler_pool_subs_from(None); let neighborhood_subs = peer_actors_builder().build().neighborhood; diff --git a/node/src/stream_reader.rs b/node/src/stream_reader.rs index 16389dafa..e11aae5f1 100644 --- a/node/src/stream_reader.rs +++ b/node/src/stream_reader.rs @@ -232,6 +232,7 @@ mod tests { use std::net::SocketAddr; use std::str::FromStr; use std::sync::{Arc, Mutex}; + use std::time::SystemTime; fn stream_handler_pool_stuff() -> (Arc>, StreamHandlerPoolSubs) { let (shp, _, recording) = make_recorder(); @@ -247,7 +248,7 @@ mod tests { #[test] fn stream_reader_shuts_down_and_returns_ok_on_0_byte_read() { init_test_logging(); - let system = System::new("test"); + let system = System::new(); let (shp_recording_arc, stream_handler_pool_subs) = stream_handler_pool_stuff(); let (_, dispatcher_subs) = dispatcher_stuff(); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -273,7 +274,16 @@ mod tests { let result = subject.poll(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let shp_recording = shp_recording_arc.lock().unwrap(); assert_eq!( @@ -296,7 +306,7 @@ mod tests { #[test] fn stream_reader_shuts_down_and_returns_err_when_it_gets_a_dead_stream_error() { init_test_logging(); - let system = System::new("test"); + let system = System::new(); let (shp_recording_arc, stream_handler_pool_subs) = stream_handler_pool_stuff(); let (_, dispatcher_subs) = dispatcher_stuff(); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -322,7 +332,16 @@ mod tests { let result = subject.poll(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let shp_recording = shp_recording_arc.lock().unwrap(); assert_eq!( @@ -345,7 +364,7 @@ mod tests { #[test] fn stream_reader_returns_not_ready_when_it_gets_not_ready() { init_test_logging(); - let system = System::new("test"); + let system = System::new(); let (shp_recording_arc, stream_handler_pool_subs) = stream_handler_pool_stuff(); let (d_recording_arc, dispatcher_subs) = dispatcher_stuff(); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -371,7 +390,16 @@ mod tests { let result = subject.poll(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } assert_eq!(result, Ok(Async::NotReady)); @@ -385,7 +413,7 @@ mod tests { #[test] fn stream_reader_logs_err_but_does_not_shut_down_when_it_gets_a_non_dead_stream_error() { init_test_logging(); - let system = System::new("test"); + let system = System::new(); let (shp_recording_arc, stream_handler_pool_subs) = stream_handler_pool_stuff(); let (d_recording_arc, dispatcher_subs) = dispatcher_stuff(); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -414,7 +442,16 @@ mod tests { let _result = subject.poll(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().await_log_containing("WARN: StreamReader for 1.2.3.4:5678: Continuing after read error on stream between local 1.2.3.5:6789 and peer 1.2.3.4:5678: other error", 1000); @@ -429,7 +466,7 @@ mod tests { #[should_panic(expected = "Internal error: no Discriminator factories!")] fn stream_reader_panics_with_no_discriminator_factories() { init_test_logging(); - let _system = System::new("test"); + let _system = System::new(); let (_, stream_handler_pool_subs) = stream_handler_pool_stuff(); let (_d_recording_arc, dispatcher_subs) = dispatcher_stuff(); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -455,7 +492,7 @@ mod tests { #[test] fn stream_reader_sends_framed_chunks_to_dispatcher() { init_test_logging(); - let system = System::new("test"); + let system = System::new(); let (_, stream_handler_pool_subs) = stream_handler_pool_stuff(); let (d_recording_arc, dispatcher_subs) = dispatcher_stuff(); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -493,7 +530,16 @@ mod tests { subject.poll().err(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let d_recording = d_recording_arc.lock().unwrap(); assert_eq!( @@ -518,7 +564,7 @@ mod tests { #[test] fn stream_reader_sends_two_correct_sequenced_messages_when_sent_a_http_connect() { - let system = System::new("test"); + let system = System::new(); let (_, stream_handler_pool_subs) = stream_handler_pool_stuff(); let (d_recording_arc, dispatcher_subs) = dispatcher_stuff(); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -556,7 +602,16 @@ mod tests { subject.poll().err(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let d_recording = d_recording_arc.lock().unwrap(); assert_eq!( @@ -575,7 +630,7 @@ mod tests { #[test] fn stream_reader_assigns_a_sequence_to_inbound_client_data_that_are_flagged_as_sequenced() { - let system = System::new("test"); + let system = System::new(); let (_, stream_handler_pool_subs) = stream_handler_pool_stuff(); let (d_recording_arc, dispatcher_subs) = dispatcher_stuff(); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -609,7 +664,16 @@ mod tests { let _result = subject.poll(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let d_recording = d_recording_arc.lock().unwrap(); assert_eq!( @@ -640,7 +704,7 @@ mod tests { #[test] fn stream_reader_does_not_assign_sequence_to_inbound_client_data_that_is_not_marked_as_sequence( ) { - let system = System::new("test"); + let system = System::new(); let (_, stream_handler_pool_subs) = stream_handler_pool_stuff(); let (d_recording_arc, dispatcher_subs) = dispatcher_stuff(); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); @@ -675,7 +739,16 @@ mod tests { let _result = subject.poll(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let d_recording = d_recording_arc.lock().unwrap(); assert_eq!( @@ -696,7 +769,7 @@ mod tests { let (shp_recording_arc, stream_handler_pool_subs) = stream_handler_pool_stuff(); let (_, dispatcher_subs) = dispatcher_stuff(); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); - let system = System::new("test"); + let system = System::new(); let local_addr = SocketAddr::from_str("1.2.3.5:6789").unwrap(); let discriminator_factories: Vec> = vec![Box::new(JsonDiscriminatorFactory::new())]; @@ -716,7 +789,16 @@ mod tests { subject.shutdown(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let shp_recording = shp_recording_arc.lock().unwrap(); let remove_stream_msg = shp_recording.get_record::(0); assert_eq!( @@ -735,7 +817,7 @@ mod tests { let (shp_recording_arc, stream_handler_pool_subs) = stream_handler_pool_stuff(); let (_, dispatcher_subs) = dispatcher_stuff(); let peer_addr = SocketAddr::from_str("1.2.3.4:5678").unwrap(); - let system = System::new("test"); + let system = System::new(); let local_addr = SocketAddr::from_str("1.2.3.5:6789").unwrap(); let discriminator_factories: Vec> = vec![Box::new(JsonDiscriminatorFactory::new())]; @@ -756,7 +838,16 @@ mod tests { subject.shutdown(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let shp_recording = shp_recording_arc.lock().unwrap(); let remove_stream_msg = shp_recording.get_record::(0); assert_eq!( diff --git a/node/src/sub_lib/accountant.rs b/node/src/sub_lib/accountant.rs index e1a330666..693462a6b 100644 --- a/node/src/sub_lib/accountant.rs +++ b/node/src/sub_lib/accountant.rs @@ -44,7 +44,7 @@ impl Debug for AccountantSubs { } #[derive(Clone, PartialEq, Debug, Message)] - +#[rtype(result = "")] pub struct ReportRoutingServiceProvidedMessage { pub paying_wallet: Wallet, pub payload_size: usize, @@ -53,7 +53,7 @@ pub struct ReportRoutingServiceProvidedMessage { } #[derive(Clone, PartialEq, Debug, Message)] - +#[rtype(result = "")] pub struct ReportExitServiceProvidedMessage { pub paying_wallet: Wallet, pub payload_size: usize, @@ -62,7 +62,7 @@ pub struct ReportExitServiceProvidedMessage { } #[derive(Clone, PartialEq, Debug, Message)] - +#[rtype(result = "")] pub struct ReportRoutingServiceConsumedMessage { pub earning_wallet: Wallet, pub payload_size: usize, @@ -71,7 +71,7 @@ pub struct ReportRoutingServiceConsumedMessage { } #[derive(Clone, PartialEq, Debug, Message)] - +#[rtype(result = "")] pub struct ReportExitServiceConsumedMessage { pub earning_wallet: Wallet, pub payload_size: usize, @@ -80,14 +80,14 @@ pub struct ReportExitServiceConsumedMessage { } #[derive(Clone, PartialEq, Debug, Message)] - +#[rtype(result = "")] pub struct GetFinancialStatisticsMessage { pub client_id: u64, } #[derive(Clone, PartialEq, Debug, Message, Serialize, Deserialize)] - #[serde(rename_all = "camelCase")] +#[rtype(result = "")] pub struct FinancialStatisticsMessage { pub pending_credit: i64, pub pending_debt: i64, diff --git a/node/src/sub_lib/blockchain_bridge.rs b/node/src/sub_lib/blockchain_bridge.rs index 088cbabf4..ee0a4853d 100644 --- a/node/src/sub_lib/blockchain_bridge.rs +++ b/node/src/sub_lib/blockchain_bridge.rs @@ -42,14 +42,14 @@ impl Message for ReportAccountsPayable { } #[derive(Clone, PartialEq, Debug, Message)] - +#[rtype(result = "")] pub struct SetDbPasswordMsg { pub client_id: u64, pub password: String, } #[derive(Clone, PartialEq, Debug, Message)] - +#[rtype(result = "")] pub struct SetGasPriceMsg { pub client_id: u64, pub gas_price: String, diff --git a/node/src/sub_lib/configurator.rs b/node/src/sub_lib/configurator.rs index 61fbc119e..6a4218165 100644 --- a/node/src/sub_lib/configurator.rs +++ b/node/src/sub_lib/configurator.rs @@ -7,7 +7,7 @@ use std::fmt; use std::fmt::{Debug, Formatter}; #[derive(Debug, actix::Message, Clone, PartialEq)] - +#[rtype(result = "")] pub struct NewPasswordMessage { pub new_password: String, } diff --git a/node/src/sub_lib/dispatcher.rs b/node/src/sub_lib/dispatcher.rs index 7b18abef6..a8c0da723 100644 --- a/node/src/sub_lib/dispatcher.rs +++ b/node/src/sub_lib/dispatcher.rs @@ -112,7 +112,7 @@ pub enum DispatcherError { } #[derive(PartialEq, Clone, Message)] - +#[rtype(result = "")] pub struct InboundClientData { pub peer_addr: SocketAddr, pub reception_port: Option, @@ -151,7 +151,7 @@ impl InboundClientData { } #[derive(PartialEq, Clone, Message, Debug)] - +#[rtype(result = "")] pub struct StreamShutdownMsg { pub peer_addr: SocketAddr, pub stream_type: RemovedStreamType, diff --git a/node/src/sub_lib/hopper.rs b/node/src/sub_lib/hopper.rs index 7f655b146..cb355a946 100644 --- a/node/src/sub_lib/hopper.rs +++ b/node/src/sub_lib/hopper.rs @@ -31,7 +31,7 @@ use std::net::SocketAddr; /// of PublicKeys destined to be looked up in the database by the Dispatcher. /// This struct can be used only for single-hop traffic. #[derive(Clone, Debug, PartialEq, Message)] - +#[rtype(result = "")] pub struct NoLookupIncipientCoresPackage { pub public_key: PublicKey, pub node_addr: NodeAddr, @@ -59,7 +59,7 @@ impl NoLookupIncipientCoresPackage { /// New CORES package about to be sent to the Hopper and thence put on the MASQ Network #[derive(Clone, Debug, PartialEq, Message)] - +#[rtype(result = "")] pub struct IncipientCoresPackage { pub route: Route, pub payload: CryptData, @@ -95,7 +95,7 @@ impl IncipientCoresPackage { /// CORES package that has traversed the MASQ Network and is arriving at its destination #[derive(Clone, Debug, PartialEq, Message)] - +#[rtype(result = "")] pub struct ExpiredCoresPackage { pub immediate_neighbor: SocketAddr, pub paying_wallet: Option, diff --git a/node/src/sub_lib/neighborhood.rs b/node/src/sub_lib/neighborhood.rs index f81c417c7..f1ca3591c 100644 --- a/node/src/sub_lib/neighborhood.rs +++ b/node/src/sub_lib/neighborhood.rs @@ -370,7 +370,7 @@ impl NodeQueryResponseMetadata { } #[derive(Clone, Debug, Message, PartialEq)] - +#[rtype(result = "")] pub struct NeighborhoodDotGraphRequest { pub client_id: u64, } @@ -386,7 +386,7 @@ impl Message for NodeQueryMessage { } #[derive(Message, Clone)] - +#[rtype(result = "")] pub struct DispatcherNodeQueryMessage { pub query: NodeQueryMessage, pub context: TransmitDataMsg, @@ -436,13 +436,13 @@ pub struct RouteQueryResponse { } #[derive(Clone, Debug, Message, PartialEq)] - +#[rtype(result = "")] pub struct RemoveNeighborMessage { pub public_key: PublicKey, } #[derive(Clone, Debug, Message, PartialEq)] - +#[rtype(result = "")] pub enum NodeRecordMetadataMessage { Desirable(PublicKey, bool), } diff --git a/node/src/sub_lib/peer_actors.rs b/node/src/sub_lib/peer_actors.rs index 4e69d95b8..ea30d03f3 100644 --- a/node/src/sub_lib/peer_actors.rs +++ b/node/src/sub_lib/peer_actors.rs @@ -33,13 +33,13 @@ impl Debug for PeerActors { } #[derive(Debug, Message, Clone)] - +#[rtype(result = "")] pub struct BindMessage { pub peer_actors: PeerActors, } #[derive(Message, Clone)] - +#[rtype(result = "")] pub struct StartMessage {} #[cfg(test)] @@ -49,7 +49,7 @@ mod tests { #[test] fn peer_actors_debug() { - let _ = System::new("test"); + let _ = System::new(); let subject = peer_actors_builder().build(); let result = format!("{:?}", subject); diff --git a/node/src/sub_lib/proxy_client.rs b/node/src/sub_lib/proxy_client.rs index 630667cad..6b3b6cfca 100644 --- a/node/src/sub_lib/proxy_client.rs +++ b/node/src/sub_lib/proxy_client.rs @@ -34,8 +34,8 @@ pub struct ClientResponsePayload_0v1 { } #[derive(Message, Clone, Debug, PartialEq, Deserialize, Serialize)] - #[allow(non_camel_case_types)] +#[rtype(result = "")] pub struct DnsResolveFailure_0v1 { pub stream_key: StreamKey, } @@ -92,7 +92,7 @@ impl ClientResponsePayload_0v1 { } #[derive(PartialEq, Clone, Message, Debug)] - +#[rtype(result = "")] pub struct InboundServerData { pub stream_key: StreamKey, pub last_data: bool, diff --git a/node/src/sub_lib/proxy_server.rs b/node/src/sub_lib/proxy_server.rs index 105aaee3f..d78ddaf80 100644 --- a/node/src/sub_lib/proxy_server.rs +++ b/node/src/sub_lib/proxy_server.rs @@ -55,7 +55,7 @@ impl ClientRequestPayload_0v1 { } #[derive(Message, Debug, PartialEq, Eq)] - +#[rtype(result = "")] pub struct AddReturnRouteMessage { pub return_route_id: u32, pub expected_services: Vec, @@ -64,7 +64,7 @@ pub struct AddReturnRouteMessage { } #[derive(Message, Debug, PartialEq)] - +#[rtype(result = "")] pub struct AddRouteMessage { pub stream_key: StreamKey, pub route: RouteQueryResponse, diff --git a/node/src/sub_lib/set_consuming_wallet_message.rs b/node/src/sub_lib/set_consuming_wallet_message.rs index c90755a83..afdc88426 100644 --- a/node/src/sub_lib/set_consuming_wallet_message.rs +++ b/node/src/sub_lib/set_consuming_wallet_message.rs @@ -4,7 +4,7 @@ use crate::sub_lib::wallet::Wallet; use actix::Message; #[derive(Clone, PartialEq, Debug, Message)] - +#[rtype(result = "")] pub struct SetConsumingWalletMessage { pub wallet: Wallet, } diff --git a/node/src/sub_lib/stream_handler_pool.rs b/node/src/sub_lib/stream_handler_pool.rs index c8214cdc3..6bd54da3d 100644 --- a/node/src/sub_lib/stream_handler_pool.rs +++ b/node/src/sub_lib/stream_handler_pool.rs @@ -4,7 +4,7 @@ use crate::sub_lib::neighborhood::NodeQueryResponseMetadata; use actix::Message; #[derive(PartialEq, Debug, Message, Clone)] - +#[rtype(result = "")] pub struct TransmitDataMsg { pub endpoint: Endpoint, pub last_data: bool, @@ -13,7 +13,7 @@ pub struct TransmitDataMsg { } #[derive(Message, Clone)] - +#[rtype(result = "")] pub struct DispatcherNodeQueryResponse { pub result: Option, pub context: TransmitDataMsg, diff --git a/node/src/test_utils/recorder.rs b/node/src/test_utils/recorder.rs index bcc2f9f16..393b2e13e 100644 --- a/node/src/test_utils/recorder.rs +++ b/node/src/test_utils/recorder.rs @@ -542,12 +542,13 @@ impl PeerActorsBuilder { #[cfg(test)] mod tests { + use std::time::SystemTime; use super::*; use actix::Message; use actix::System; #[derive(Debug, PartialEq, Message)] - + #[rtype(result = "")] struct FirstMessageType { string: String, } @@ -555,7 +556,7 @@ mod tests { recorder_message_handler!(FirstMessageType); #[derive(Debug, PartialEq, Message)] - + #[rtype(result = "")] struct SecondMessageType { size: usize, flag: bool, @@ -565,7 +566,7 @@ mod tests { #[test] fn recorder_records_different_messages() { - let system = System::new("test"); + let system = System::new(); let recorder = Recorder::new(); let recording_arc = recorder.get_recording(); @@ -584,7 +585,16 @@ mod tests { .unwrap(); System::current().stop_with_code(0); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let recording = recording_arc.lock().unwrap(); assert_eq!( diff --git a/node/src/ui_gateway/mod.rs b/node/src/ui_gateway/mod.rs index ee1220346..fd1ecbc18 100644 --- a/node/src/ui_gateway/mod.rs +++ b/node/src/ui_gateway/mod.rs @@ -125,6 +125,7 @@ mod tests { use masq_lib::ui_gateway::{MessageBody, MessageTarget}; use masq_lib::utils::find_free_port; use std::sync::{Arc, Mutex}; + use std::time::SystemTime; #[test] fn inbound_ui_message_is_disseminated_properly() { @@ -142,7 +143,7 @@ mod tests { let subject = UiGateway::new(&UiGatewayConfig { ui_port: find_free_port(), }); - let system = System::new("test"); + let system = System::new(); let subject_addr: Addr = subject.start(); let peer_actors = peer_actors_builder() .accountant(accountant) @@ -168,7 +169,16 @@ mod tests { subject_addr.try_send(msg.clone()).unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let did_receive = |recording_arc: Arc>| { let recording = recording_arc.lock().unwrap(); assert_eq!(recording.get_record::(0), &msg); @@ -197,7 +207,7 @@ mod tests { let mut subject = UiGateway::new(&UiGatewayConfig { ui_port: find_free_port(), }); - let system = System::new("test"); + let system = System::new(); subject.websocket_supervisor = Some(Box::new(websocket_supervisor)); subject.incoming_message_recipients = vec![accountant.start().recipient::()]; @@ -214,7 +224,16 @@ mod tests { subject_addr.try_send(msg.clone()).unwrap(); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } let accountant_recording = accountant_recording_arc.lock().unwrap(); assert_eq!(accountant_recording.len(), 0); let send_parameters = send_msg_parameters_arc.lock().unwrap(); diff --git a/node/src/ui_gateway/websocket_supervisor.rs b/node/src/ui_gateway/websocket_supervisor.rs index cd7062685..4c30f8393 100644 --- a/node/src/ui_gateway/websocket_supervisor.rs +++ b/node/src/ui_gateway/websocket_supervisor.rs @@ -450,8 +450,6 @@ mod tests { use crate::test_utils::logging::TestLogHandler; use crate::test_utils::recorder::{make_recorder, Recorder}; use crate::test_utils::{assert_contains, await_value, wait_for}; - use actix::System; - use actix::{Actor, Addr}; use futures::future::lazy; use masq_lib::constants::UNMARSHAL_ERROR; use masq_lib::messages::{ @@ -466,7 +464,8 @@ mod tests { use std::net::Shutdown; use std::str::FromStr; use std::thread; - use std::time::Duration; + use std::time::{Duration, SystemTime}; + use actix::{Actor, Addr, System}; use websocket::client::sync::Client; use websocket::stream::sync::TcpStream; use websocket::ClientBuilder; @@ -623,14 +622,23 @@ mod tests { let (ui_gateway, _, _) = make_recorder(); thread::spawn(move || { - let system = System::new("logs_pre_upgrade_connection_errors"); + let system = System::new(); let ui_message_sub = subs(ui_gateway); let subject = lazy(move || { let _subject = WebSocketSupervisorReal::new(port, ui_message_sub).unwrap(); Ok(()) }); actix::spawn(subject); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); wait_for_server(port); @@ -645,14 +653,23 @@ mod tests { let (ui_gateway, _, _) = make_recorder(); thread::spawn(move || { - let system = System::new("rejects_connection_attempt_with_improper_protocol_name"); + let system = System::new(); let ui_message_sub = subs(ui_gateway); let subject = lazy(move || { let _subject = WebSocketSupervisorReal::new(port, ui_message_sub).unwrap(); Ok(()) }); actix::spawn(subject); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); wait_for_server(port); @@ -672,14 +689,23 @@ mod tests { let (ui_gateway, _, _) = make_recorder(); thread::spawn(move || { - let system = System::new("logs_unexpected_binary_ping_pong_websocket_messages"); + let system = System::new(); let ui_message_sub = subs(ui_gateway); let subject = lazy(move || { let _subject = WebSocketSupervisorReal::new(port, ui_message_sub).unwrap(); Ok(()) }); actix::spawn(subject); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let mut client = await_value(None, || UiConnection::make(port, NODE_UI_PROTOCOL)).unwrap(); @@ -709,14 +735,23 @@ mod tests { let (ui_gateway, ui_gateway_awaiter, ui_gateway_recording_arc) = make_recorder(); thread::spawn(move || { - let system = System::new("can_connect_two_clients_and_receive_messages_from_them"); + let system = System::new(); let ui_message_sub = subs(ui_gateway); let subject = lazy(move || { let _subject = WebSocketSupervisorReal::new(port, ui_message_sub).unwrap(); Ok(()) }); actix::spawn(subject); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let mut one_client = wait_for_client(port, NODE_UI_PROTOCOL); @@ -1023,14 +1058,23 @@ mod tests { let (ui_gateway, ui_gateway_awaiter, ui_gateway_recording_arc) = make_recorder(); thread::spawn(move || { - let system = System::new("once_a_client_sends_a_close_no_more_data_is_accepted"); + let system = System::new(); let ui_message_sub = subs(ui_gateway); let subject = lazy(move || { let _subject = WebSocketSupervisorReal::new(port, ui_message_sub).unwrap(); Ok(()) }); actix::spawn(subject); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let mut client = await_value(None, || UiConnection::make(port, NODE_UI_PROTOCOL)).unwrap(); @@ -1059,14 +1103,23 @@ mod tests { let (ui_gateway, ui_gateway_awaiter, ui_gateway_recording_arc) = make_recorder(); thread::spawn(move || { - let system = System::new("a_client_that_violates_the_protocol_is_terminated"); + let system = System::new(); let ui_message_sub = subs(ui_gateway); let subject = lazy(move || { let _subject = WebSocketSupervisorReal::new(port, ui_message_sub).unwrap(); Ok(()) }); actix::spawn(subject); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } }); let mut client = await_value(None, || UiConnection::make(port, "MASQNode-UIv2")).unwrap(); client.send(UiShutdownRequest {}); @@ -1093,7 +1146,7 @@ mod tests { let port = find_free_port(); let (ui_gateway, _, _) = make_recorder(); let ui_message_sub = subs(ui_gateway); - let system = System::new("send_msg_sends_a_message_to_the_client"); + let system = System::new(); let lazy_future = lazy(move || { let subject = WebSocketSupervisorReal::new(port, ui_message_sub).unwrap(); let one_mock_client = ClientWrapperMock::new() @@ -1126,7 +1179,16 @@ mod tests { }); actix::spawn(lazy_future); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } #[test] @@ -1134,7 +1196,7 @@ mod tests { let port = find_free_port(); let (ui_gateway, _, _) = make_recorder(); let ui_message_sub = subs(ui_gateway); - let system = System::new("send_msg_sends_a_message_to_the_client"); + let system = System::new(); let lazy_future = lazy(move || { let subject = WebSocketSupervisorReal::new(port, ui_message_sub).unwrap(); let one_mock_client = ClientWrapperMock::new() @@ -1169,7 +1231,16 @@ mod tests { }); actix::spawn(lazy_future); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } #[test] @@ -1177,7 +1248,7 @@ mod tests { let port = find_free_port(); let (ui_gateway, _, _) = make_recorder(); let ui_message_sub = subs(ui_gateway); - let system = System::new("send_msg_sends_a_message_to_the_client"); + let system = System::new(); let lazy_future = lazy(move || { let subject = WebSocketSupervisorReal::new(port, ui_message_sub).unwrap(); let one_mock_client = ClientWrapperMock::new() @@ -1218,7 +1289,16 @@ mod tests { }); actix::spawn(lazy_future); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } #[test] @@ -1227,7 +1307,7 @@ mod tests { let port = find_free_port(); let (ui_gateway, _, _) = make_recorder(); let ui_message_sub = subs(ui_gateway); - let system = System::new("send_msg_tries_to_send_message_and_panics_on_flush"); + let system = System::new(); let lazy_future = lazy(move || { let subject = WebSocketSupervisorReal::new(port, ui_message_sub).unwrap(); let mock_client = ClientWrapperMock::new() @@ -1247,7 +1327,16 @@ mod tests { }); actix::spawn(lazy_future); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_containing( "WARN: WebSocketSupervisor: Client 0 dropped its connection before it could be flushed", ); @@ -1259,7 +1348,7 @@ mod tests { let port = find_free_port(); let (ui_gateway, _, _) = make_recorder(); let ui_message_sub = subs(ui_gateway); - let system = System::new("send_msg_tries_to_send_message_and_panics"); + let system = System::new(); let lazy_future = lazy(move || { let subject = WebSocketSupervisorReal::new(port, ui_message_sub).unwrap(); let mock_client = @@ -1277,7 +1366,16 @@ mod tests { }); actix::spawn(lazy_future); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } TestLogHandler::new().exists_log_containing( "ERROR: WebSocketSupervisor: Error sending to client 0: NoDataAvailable", ); @@ -1289,7 +1387,7 @@ mod tests { let port = find_free_port(); let (ui_gateway, _, _) = make_recorder(); let ui_message_sub = subs(ui_gateway); - let system = System::new("send_msg_fails_to_look_up_client_to_send_to"); + let system = System::new(); let lazy_future = lazy(move || { let subject = WebSocketSupervisorReal::new(port, ui_message_sub).unwrap(); let msg = NodeToUiMessage { @@ -1305,6 +1403,15 @@ mod tests { }); actix::spawn(lazy_future); System::current().stop(); - system.run(); + let now = SystemTime::now(); + let _ = system.run(); + match now.elapsed() { + Ok(elapsed) => println!( + "Time taken: {}.{:06} seconds", + elapsed.as_secs(), + elapsed.subsec_micros() + ), + Err(e) => println!("An error occurred: {:?}", e), + } } } From 8797b8b60d856bbbba0364fc263b4225474c6b96 Mon Sep 17 00:00:00 2001 From: FinsaasGH Date: Mon, 13 Dec 2021 08:10:52 -0700 Subject: [PATCH 17/17] GH-509: Formatting --- node/src/stream_handler_pool.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/node/src/stream_handler_pool.rs b/node/src/stream_handler_pool.rs index 09f38dd26..0024df05e 100644 --- a/node/src/stream_handler_pool.rs +++ b/node/src/stream_handler_pool.rs @@ -1224,9 +1224,7 @@ mod tests { let poll_write_params_arc_a = poll_write_params_arc.clone(); let (tx, rx) = unbounded(); thread::spawn(move || { - let system = System::new( - "stream_handler_pool_creates_nonexistent_stream_for_reading_and_writing", - ); + let system = System::new(); let discriminator_factory = JsonDiscriminatorFactory::new(); let mut subject = StreamHandlerPool::new(vec![Box::new(discriminator_factory)]); subject.stream_connector = Box::new( @@ -2036,9 +2034,7 @@ mod tests { let outgoing_unmasked_len = outgoing_unmasked.len(); let (tx, rx) = unbounded(); thread::spawn(move || { - let system = System::new( - "stream_handler_pool_creates_nonexistent_stream_for_reading_and_writing", - ); + let system = System::new(); let discriminator_factory = JsonDiscriminatorFactory::new(); let mut subject = StreamHandlerPool::new(vec![Box::new(discriminator_factory)]); subject.stream_connector = Box::new(StreamConnectorMock::new()); // this will panic if a connection is attempted