diff --git a/masq/tests/startup_shutdown_tests_integration.rs b/masq/tests/startup_shutdown_tests_integration.rs index c66589130..a41e564a4 100644 --- a/masq/tests/startup_shutdown_tests_integration.rs +++ b/masq/tests/startup_shutdown_tests_integration.rs @@ -85,7 +85,7 @@ fn masq_terminates_based_on_loss_of_connection_to_the_daemon_integration() { assert_eq!(exit_code, None); #[cfg(target_os = "windows")] assert_eq!(exit_code.unwrap(), 1); - assert!(stdout.contains("neighborhood-mode standard Default")); + assert!(stdout.contains("neighborhood-mode zero-hop Default")); assert_eq!( stderr, "\nThe Daemon is no longer running; masq is terminating.\n\n" diff --git a/node/src/bootstrapper.rs b/node/src/bootstrapper.rs index 688d14336..caf1d98f7 100644 --- a/node/src/bootstrapper.rs +++ b/node/src/bootstrapper.rs @@ -1163,6 +1163,8 @@ mod tests { "5123", "--data-directory", data_dir.to_str().unwrap(), + "--neighborhood-mode", + "standard", ]), &mut FakeStreamHolder::new().streams(), ) @@ -1285,6 +1287,8 @@ mod tests { "1.2.3.4", "--clandestine-port", "5123", + "--neighborhood-mode", + "standard", ]), &mut FakeStreamHolder::new().streams(), ) @@ -1338,6 +1342,8 @@ mod tests { data_dir.to_str().unwrap(), "--clandestine-port", "5124", + "--neighborhood-mode", + "standard", ]), &mut holder.streams(), ) @@ -1377,6 +1383,8 @@ mod tests { "https://booga.com", "--ip", "1.2.3.4", + "--neighborhood-mode", + "standard", "--gas-price", "11", ]), @@ -1460,6 +1468,8 @@ mod tests { "1.2.3.4,2.3.4.5", "--ip", "111.111.111.111", + "--neighborhood-mode", + "standard", "--clandestine-port", "1234", "--data-directory", @@ -1655,6 +1665,8 @@ mod tests { "1.2.3.4", "--data-directory", data_dir.to_str().unwrap(), + "--neighborhood-mode", + "standard", ]), &mut holder.streams(), ) @@ -1680,6 +1692,8 @@ mod tests { "https://booga.com", "--ip", "111.111.111.111", + "--neighborhood-mode", + "standard", "--data-directory", data_dir.to_str().unwrap(), ]; diff --git a/node/src/daemon/setup_reporter.rs b/node/src/daemon/setup_reporter.rs index a7448eba4..e4af9b0ef 100644 --- a/node/src/daemon/setup_reporter.rs +++ b/node/src/daemon/setup_reporter.rs @@ -986,7 +986,7 @@ impl ValueRetriever for NeighborhoodMode { _persistent_config: &dyn PersistentConfiguration, _db_password_opt: &Option, ) -> Option<(String, UiSetupResponseValueStatus)> { - Some(("standard".to_string(), Default)) + Some(("zero-hop".to_string(), Default)) } fn is_required(&self, _params: &SetupCluster) -> bool { @@ -1402,6 +1402,7 @@ mod tests { ("data-directory", data_dir.to_str().unwrap()), ("db-password", "password"), ("ip", "4.3.2.1"), + ("neighborhood-mode", "standard"), ] .into_iter() .map(|(name, value)| UiSetupRequestValue::new(name, value)) @@ -1448,7 +1449,7 @@ mod tests { ("log-level", "warn", Default), ("mapping-protocol", "", Blank), ("min-hops", &DEFAULT_MIN_HOPS.to_string(), Default), - ("neighborhood-mode", "standard", Default), + ("neighborhood-mode", "standard", Set), ( "neighbors", "masq://eth-mainnet:QUJDRDU2Nzg5MDEyMzQ1Njc4OTIxMjM0NTY3ODkzMTI@1.2.3.4:1234,masq://eth-mainnet:RUZHSDU2Nzg5MDEyMzQ1Njc4OTIxMjM0NTY3ODkzMTI@5.6.7.8:5678", @@ -2362,7 +2363,7 @@ mod tests { Default, ), ]); - let incoming_setup = vec![("ip", "1.2.3.4")] + let incoming_setup = vec![("ip", "1.2.3.4"), ("neighborhood-mode", "standard")] .into_iter() .map(|(name, value)| UiSetupRequestValue::new(name, value)) .collect_vec(); @@ -2652,6 +2653,7 @@ mod tests { ), UiSetupRequestValue::new("blockchain-service-url", "https://booga.com"), UiSetupRequestValue::new("ip", "1.2.3.4"), + UiSetupRequestValue::new("neighborhood-mode", "standard"), UiSetupRequestValue::clear("chain"), ], ) @@ -3287,7 +3289,7 @@ mod tests { &None, ); - assert_eq!(result, Some(("standard".to_string(), Default))) + assert_eq!(result, Some(("zero-hop".to_string(), Default))) } #[test] diff --git a/node/src/node_configurator/node_configurator_standard.rs b/node/src/node_configurator/node_configurator_standard.rs index 4e72a6716..8aa28e0a9 100644 --- a/node/src/node_configurator/node_configurator_standard.rs +++ b/node/src/node_configurator/node_configurator_standard.rs @@ -515,6 +515,8 @@ mod tests { "password", "--ip", "1.2.3.4", + "--neighborhood-mode", + "standard", ]); let mut privileged_config = BootstrapperConfig::default(); privileged_config.data_directory = home_dir; @@ -773,7 +775,8 @@ mod tests { let args = ArgsBuilder::new() .param("--blockchain-service-url", "https://booga.com") .param("--data-directory", home_dir.to_str().unwrap()) - .param("--ip", "1.2.3.4"); + .param("--ip", "1.2.3.4") + .param("--neighborhood-mode", "standard"); let mut bootstrapper_config = BootstrapperConfig::new(); let multi_config = make_new_multi_config( &app_node(), @@ -1586,6 +1589,8 @@ mod tests { "https://booga.com", "--ip", "1.2.3.4", + "--neighborhood-mode", + "standard", "--gas-price", "57", ]; @@ -1614,6 +1619,8 @@ mod tests { "https://booga.com", "--ip", "1.2.3.4", + "--neighborhood-mode", + "standard", ]; let config = subject diff --git a/node/src/node_configurator/unprivileged_parse_args_configuration.rs b/node/src/node_configurator/unprivileged_parse_args_configuration.rs index 8ff2ed7c4..701ac9007 100644 --- a/node/src/node_configurator/unprivileged_parse_args_configuration.rs +++ b/node/src/node_configurator/unprivileged_parse_args_configuration.rs @@ -282,32 +282,33 @@ fn make_neighborhood_mode( } } Some(ref s) if s == "zero-hop" => { - if value_m!(multi_config, "ip", IpAddr).is_some() { - Err(ConfiguratorError::required( - "neighborhood-mode", - "Node cannot run as --neighborhood-mode zero-hop if --ip is specified", - )) - } else { - if !neighbor_configs.is_empty() { - let password_opt = value_m!(multi_config, "db-password", String); - zero_hop_neighbors_configuration( - password_opt, - neighbor_configs, - persistent_config, - )? - } - Ok(NeighborhoodMode::ZeroHop) - } + process_zero_hop_mode(multi_config, neighbor_configs, persistent_config) } // These two cases are untestable Some(ref s) => panic!( "--neighborhood-mode {} has not been properly provided for in the code", s ), - None => { - let rate_pack = configure_rate_pack(multi_config, persistent_config)?; - neighborhood_mode_standard(multi_config, neighbor_configs, rate_pack) + None => process_zero_hop_mode(multi_config, neighbor_configs, persistent_config), + } +} + +fn process_zero_hop_mode( + multi_config: &MultiConfig, + neighbor_configs: Vec, + persistent_config: &mut dyn PersistentConfiguration, +) -> Result { + if value_m!(multi_config, "ip", IpAddr).is_some() { + Err(ConfiguratorError::required( + "neighborhood-mode", + "Node cannot run as --neighborhood-mode zero-hop if --ip is specified", + )) + } else { + if !neighbor_configs.is_empty() { + let password_opt = value_m!(multi_config, "db-password", String); + zero_hop_neighbors_configuration(password_opt, neighbor_configs, persistent_config)? } + Ok(NeighborhoodMode::ZeroHop) } } @@ -617,7 +618,6 @@ mod tests { use super::*; use crate::accountant::db_access_objects::utils::ThresholdUtils; use crate::apps::app_node; - use crate::blockchain::bip32::Bip32EncryptionKeyProvider; use crate::bootstrapper::CryptDEPair; use crate::database::db_initializer::DbInitializationConfig; use crate::database::db_initializer::{DbInitializer, DbInitializerReal}; @@ -625,7 +625,7 @@ mod tests { use crate::db_config::persistent_configuration::PersistentConfigError::NotPresent; use crate::db_config::persistent_configuration::PersistentConfigurationReal; use crate::sub_lib::accountant::DEFAULT_PAYMENT_THRESHOLDS; - use crate::sub_lib::cryptde::{PlainData, PublicKey}; + use crate::sub_lib::cryptde::PublicKey; use crate::sub_lib::neighborhood::{Hops, DEFAULT_RATE_PACK}; use crate::sub_lib::utils::make_new_multi_config; use crate::sub_lib::wallet::Wallet; @@ -1439,30 +1439,30 @@ mod tests { } #[test] - fn unprivileged_parse_args_dao_real_creates_configurations() { + fn unprivileged_parse_args_dao_real_creates_configurations_in_standard_mode() { let home_dir = ensure_node_home_directory_exists( "unprivileged_parse_args_configuration", - "unprivileged_parse_args_dao_real_creates_configurations", + "unprivileged_parse_args_dao_real_creates_configurations_in_standard_mode", ); - assert_unprivileged_parse_args_creates_configurations( + assert_unprivileged_parse_args_creates_configurations_in_standard_mode( home_dir, &UnprivilegedParseArgsConfigurationDaoReal {}, ) } #[test] - fn unprivileged_parse_args_dao_null_creates_configurations() { + fn unprivileged_parse_args_dao_null_creates_configurations_in_standard_mode() { let home_dir = ensure_node_home_directory_exists( "unprivileged_parse_args_configuration", - "unprivileged_parse_args_dao_null_creates_configurations", + "unprivileged_parse_args_dao_null_creates_configurations_in_standard_mode", ); - assert_unprivileged_parse_args_creates_configurations( + assert_unprivileged_parse_args_creates_configurations_in_standard_mode( home_dir, &UnprivilegedParseArgsConfigurationDaoNull {}, ) } - fn assert_unprivileged_parse_args_creates_configurations( + fn assert_unprivileged_parse_args_creates_configurations_in_standard_mode( home_dir: PathBuf, subject: &dyn UnprivilegedParseArgsConfiguration, ) { @@ -1474,7 +1474,6 @@ mod tests { )); let consuming_private_key_text = "ABCDEF01ABCDEF01ABCDEF01ABCDEF01ABCDEF01ABCDEF01ABCDEF01ABCDEF01"; - let consuming_private_key = PlainData::from_str(consuming_private_key_text).unwrap(); let mut persistent_config = PersistentConfigurationReal::new(config_dao); let password = "secret-db-password"; let args = ArgsBuilder::new() @@ -1491,6 +1490,7 @@ mod tests { .param("--blockchain-service-url", "http://127.0.0.1:8545") .param("--log-level", "trace") .param("--fake-public-key", "AQIDBA") + .param("--neighborhood-mode", "standard") .param("--db-password", password) .param( "--earning-wallet", @@ -1513,30 +1513,6 @@ mod tests { ) .unwrap(); - assert_eq!( - value_m!(multi_config, "config-file", PathBuf), - Some(PathBuf::from("specified_config.toml")), - ); - assert_eq!( - config.blockchain_bridge_config.blockchain_service_url_opt, - Some("http://127.0.0.1:8545".to_string()) - ); - assert_eq!( - config.earning_wallet, - Wallet::from_str("0x0123456789012345678901234567890123456789").unwrap() - ); - assert_eq!(Some(1234u16), config.clandestine_port_opt); - assert_eq!( - config.earning_wallet, - Wallet::from_str("0x0123456789012345678901234567890123456789").unwrap() - ); - assert_eq!( - config.consuming_wallet_opt, - Some(Wallet::from( - Bip32EncryptionKeyProvider::from_raw_secret(consuming_private_key.as_slice()) - .unwrap() - )), - ); assert_eq!( config.neighborhood_config.mode, NeighborhoodMode::Standard( @@ -1564,8 +1540,6 @@ mod tests { DEFAULT_RATE_PACK.clone() ) ); - assert_eq!(config.db_password_opt, Some(password.to_string())); - assert_eq!(config.mapping_protocol_opt, Some(AutomapProtocol::Pcp)); } #[test] @@ -1597,15 +1571,7 @@ mod tests { .mode .neighbor_configs() .is_empty()); - assert_eq!( - config - .neighborhood_config - .mode - .node_addr_opt() - .unwrap() - .ip_addr(), - IpAddr::from_str("0.0.0.0").unwrap(), - ); + assert_eq!(config.neighborhood_config.mode.node_addr_opt(), None,); assert_eq!(config.earning_wallet, DEFAULT_EARNING_WALLET.clone(),); assert_eq!(config.consuming_wallet_opt, None); assert_eq!(config.mapping_protocol_opt, None); @@ -1618,6 +1584,7 @@ mod tests { let args = ArgsBuilder::new() .param("--ip", "1.2.3.4") .param("--fake-public-key", "BORSCHT") + .param("--neighborhood-mode", "standard") .param("--db-password", "password"); let mut config = BootstrapperConfig::new(); config.db_password_opt = Some("password".to_string()); @@ -1751,6 +1718,7 @@ mod tests { let args = ArgsBuilder::new() .param("--blockchain-service-url", "booga.com") + .param("--neighborhood-mode", "standard") .param("--ip", "1.2.3.4") .param("--data-directory", home_directory.to_str().unwrap()) .opt("--db-password"); @@ -1799,6 +1767,8 @@ mod tests { "booga.com", "--ip", "1.2.3.4", + "--neighborhood-mode", + "standard", "--scan-intervals", "180|150|130", "--payment-thresholds", @@ -1877,6 +1847,8 @@ mod tests { "booga.com", "--ip", "1.2.3.4", + "--neighborhood-mode", + "standard", "--scan-intervals", "180|150|130", "--payment-thresholds", @@ -2559,6 +2531,8 @@ mod tests { "booga.com", "--ip", "1.2.3.4", + "--neighborhood-mode", + "standard", "--scans", "off", ]; @@ -2587,6 +2561,8 @@ mod tests { "booga.com", "--ip", "1.2.3.4", + "--neighborhood-mode", + "standard", "--scans", "on", ]; @@ -2610,7 +2586,14 @@ mod tests { fn unprivileged_configuration_defaults_scans() { running_test(); let subject = UnprivilegedParseArgsConfigurationDaoReal {}; - let args = ["--blockchain-service-url", "booga.com", "--ip", "1.2.3.4"]; + let args = [ + "--blockchain-service-url", + "booga.com", + "--ip", + "1.2.3.4", + "--neighborhood-mode", + "standard", + ]; let mut bootstrapper_config = BootstrapperConfig::new(); subject