@@ -32,7 +32,6 @@ use masq_lib::constants::DEFAULT_CHAIN;
3232use masq_lib:: logger:: Logger ;
3333use masq_lib:: messages:: UiSetupResponseValueStatus :: { Blank , Configured , Default , Required , Set } ;
3434use masq_lib:: messages:: { UiSetupRequestValue , UiSetupResponseValue , UiSetupResponseValueStatus } ;
35- use masq_lib:: multi_config:: make_arg_matches_accesible;
3635use masq_lib:: multi_config:: {
3736 CommandLineVcl , ConfigFileVcl , EnvironmentVcl , MultiConfig , VirtualCommandLine ,
3837} ;
@@ -46,6 +45,8 @@ use std::str::FromStr;
4645
4746const CONSOLE_DIAGNOSTICS : bool = false ;
4847
48+ const ERR_SENSITIVE_BLANKED_OUT_VALUE_PAIRS : & [ ( & str , & str ) ] = & [ ( "chain" , "data-directory" ) ] ;
49+
4950pub type SetupCluster = HashMap < String , UiSetupResponseValue > ;
5051
5152#[ cfg( test) ]
@@ -85,9 +86,8 @@ impl SetupReporter for SetupReporterReal {
8586 blanked_out_former_values. insert ( v. name . clone ( ) , former_value) ;
8687 } ;
8788 } ) ;
88- //TODO investigate this, not sure if the right way to solve the issue
89- //answers an attempt to blank out 'chain' behind an error resulting in chain different from data_dir
90- let _ = blanked_out_former_values. remove ( "chain" ) ;
89+ let err_conflicts_for_blanked_out =
90+ Self :: get_err_conflicts_for_blanked_out ( & blanked_out_former_values, & existing_setup) ;
9191 let mut incoming_setup = incoming_setup
9292 . into_iter ( )
9393 . filter ( |v| v. value . is_some ( ) )
@@ -153,7 +153,7 @@ impl SetupReporter for SetupReporterReal {
153153 )
154154 } ;
155155 match combined_setup. get ( retriever. value_name ( ) ) {
156- Some ( uisrv) if vec ! [ Blank , Required ] . contains ( & uisrv. status ) => {
156+ Some ( uisrv) if [ Blank , Required ] . contains ( & uisrv. status ) => {
157157 make_blank_or_required ( )
158158 }
159159 Some ( uisrv) => ( retriever. value_name ( ) . to_string ( ) , uisrv. clone ( ) ) ,
@@ -165,10 +165,12 @@ impl SetupReporter for SetupReporterReal {
165165 if error_so_far. param_errors . is_empty ( ) {
166166 Ok ( final_setup)
167167 } else {
168- Err ( (
169- Self :: combine_clusters ( vec ! [ & final_setup, & blanked_out_former_values] ) ,
170- error_so_far,
171- ) )
168+ let setup = Self :: combine_clusters ( vec ! [
169+ & final_setup,
170+ & blanked_out_former_values,
171+ & err_conflicts_for_blanked_out,
172+ ] ) ;
173+ Err ( ( setup, error_so_far) )
172174 }
173175 }
174176}
@@ -224,6 +226,25 @@ impl SetupReporterReal {
224226 }
225227 }
226228
229+ fn get_err_conflicts_for_blanked_out (
230+ blanked_out_former_values : & SetupCluster ,
231+ existing_setup : & SetupCluster ,
232+ ) -> SetupCluster {
233+ ERR_SENSITIVE_BLANKED_OUT_VALUE_PAIRS . iter ( ) . fold (
234+ HashMap :: new ( ) ,
235+ |mut acc, ( blanked_out_arg, err_persistent_linked_arg) | {
236+ if blanked_out_former_values. contains_key ( & blanked_out_arg. to_string ( ) ) {
237+ if let Some ( former_value) =
238+ existing_setup. get ( & err_persistent_linked_arg. to_string ( ) )
239+ {
240+ acc. insert ( err_persistent_linked_arg. to_string ( ) , former_value. clone ( ) ) ;
241+ }
242+ } ;
243+ acc
244+ } ,
245+ )
246+ }
247+
227248 fn calculate_fundamentals (
228249 dirs_wrapper : & dyn DirsWrapper ,
229250 combined_setup : & SetupCluster ,
@@ -1060,6 +1081,7 @@ mod tests {
10601081 } ;
10611082 use crate :: test_utils:: { assert_string_contains, rate_pack} ;
10621083 use masq_lib:: blockchains:: chains:: Chain as Blockchain ;
1084+ use masq_lib:: blockchains:: chains:: Chain :: PolyMumbai ;
10631085 use masq_lib:: constants:: { DEFAULT_CHAIN , DEFAULT_GAS_PRICE } ;
10641086 use masq_lib:: messages:: UiSetupResponseValueStatus :: { Blank , Configured , Required , Set } ;
10651087 use masq_lib:: test_utils:: environment_guard:: { ClapGuard , EnvironmentGuard } ;
@@ -1920,13 +1942,14 @@ mod tests {
19201942 }
19211943
19221944 #[ test]
1923- fn get_modified_setup_data_directory_trying_to_blank_chain_out_on_error ( ) {
1945+ fn get_modified_setup_blanking_chain_out_on_error_checking_chain_and_data_dir ( ) {
19241946 let _guard = EnvironmentGuard :: new ( ) ;
19251947 let base_dir = ensure_node_home_directory_exists (
19261948 "setup_reporter" ,
1927- "get_modified_setup_data_directory_trying_to_blank_chain_out_on_error " ,
1949+ "get_modified_setup_blanking_chain_out_on_error_checking_chain_and_data_dir " ,
19281950 ) ;
19291951 let current_data_dir = base_dir
1952+ . join ( "data_dir" )
19301953 . join ( "MASQ" )
19311954 . join ( BlockChain :: PolyMumbai . rec ( ) . literal_identifier ) ; //not a default
19321955 let existing_setup = setup_cluster_from ( vec ! [
@@ -1955,6 +1978,7 @@ mod tests {
19551978 ( "ip" , "1.2.3.4" , Set ) ,
19561979 ( "log-level" , "warn" , Default ) ,
19571980 ( "neighborhood-mode" , "originate-only" , Set ) ,
1981+ //this causes the error: cannot run in this mode without any supplied descriptors
19581982 ( "neighbors" , "" , Blank ) ,
19591983 (
19601984 "real-user" ,
@@ -1965,29 +1989,26 @@ mod tests {
19651989 ) ,
19661990 ( "scans" , "on" , Default ) ,
19671991 ] ) ;
1992+ //blanking out the chain parameter
19681993 let incoming_setup = vec ! [ UiSetupRequestValue :: clear( "chain" ) ] ;
19691994 let base_data_dir = base_dir. join ( "data_dir" ) ;
1970- let expected_chain = DEFAULT_CHAIN . rec ( ) . literal_identifier ;
1971- let expected_data_directory = base_data_dir
1972- . join ( "MASQ" )
1973- . join ( DEFAULT_CHAIN . rec ( ) . literal_identifier ) ;
19741995 let dirs_wrapper = Box :: new (
19751996 DirsWrapperMock :: new ( )
19761997 . data_dir_result ( Some ( base_data_dir) )
19771998 . home_dir_result ( Some ( base_dir) ) ,
19781999 ) ;
19792000 let subject = SetupReporterReal :: new ( dirs_wrapper) ;
19802001
1981- let result = subject
2002+ let ( resulting_setup_cluster , _ ) = subject
19822003 . get_modified_setup ( existing_setup, incoming_setup)
1983- . err ( )
1984- . unwrap ( )
1985- . 0 ;
2004+ . unwrap_err ( ) ;
19862005
1987- let actual_chain = & result. get ( "chain" ) . unwrap ( ) . value ;
2006+ let expected_chain = PolyMumbai . rec ( ) . literal_identifier ;
2007+ let actual_chain = & resulting_setup_cluster. get ( "chain" ) . unwrap ( ) . value ;
19882008 assert_eq ! ( actual_chain, expected_chain) ;
1989- let actual_data_directory = PathBuf :: from ( & result. get ( "data-directory" ) . unwrap ( ) . value ) ;
1990- assert_eq ! ( actual_data_directory, expected_data_directory) ;
2009+ let actual_data_directory =
2010+ PathBuf :: from ( & resulting_setup_cluster. get ( "data-directory" ) . unwrap ( ) . value ) ;
2011+ assert_eq ! ( actual_data_directory, current_data_dir) ;
19912012 }
19922013
19932014 #[ test]
0 commit comments