17void initialize_system()
19 static const auto testing_setup = MakeNoLogFileContext<>();
22std::string GetArgumentName(
const std::string&
name)
24 size_t idx =
name.find(
'=');
25 if (idx == std::string::npos) {
28 return name.substr(0, idx);
35 std::vector<std::string> command_option_names;
51 args_manager.SoftSetArg(str_arg, str_value);
56 args_manager.ForceSetArg(str_arg, str_value);
61 args_manager.SoftSetBoolArg(str_arg, f_value);
64 const OptionsCategory options_category =
fuzzed_data_provider.
PickValueInArray<
OptionsCategory>({
OptionsCategory::OPTIONS,
OptionsCategory::CONNECTION,
OptionsCategory::WALLET,
OptionsCategory::WALLET_DEBUG_TEST,
OptionsCategory::ZMQ,
OptionsCategory::DEBUG_TEST,
OptionsCategory::CHAINPARAMS,
OptionsCategory::NODE_RELAY,
OptionsCategory::BLOCK_CREATION,
OptionsCategory::RPC,
OptionsCategory::GUI,
OptionsCategory::COMMANDS,
OptionsCategory::REGISTER_COMMANDS,
OptionsCategory::CLI_COMMANDS,
OptionsCategory::IPC,
OptionsCategory::COMMAND_OPTIONS,
OptionsCategory::HIDDEN});
68 if (args_manager.GetArgFlags(argument_name) != std::nullopt) {
73 args_manager.AddArg(argument_name,
help,
flags, options_category);
75 command_option_names.push_back(argument_name);
80 if (
cmd.empty() ||
cmd[0] ==
'-' ||
cmd.find(
'=') != std::string::npos)
return;
81 if (args_manager.GetArgFlags(
cmd) != std::nullopt)
return;
83 std::set<std::string> options;
84 for (
const auto& opt : command_option_names) {
89 args_manager.AddCommand(
cmd,
help, std::move(options));
95 std::vector<std::string> hidden_arguments;
96 for (
const std::string&
name : names) {
97 const std::string hidden_argument = GetArgumentName(
name);
98 if (args_manager.GetArgFlags(hidden_argument) != std::nullopt) {
101 if (std::find(hidden_arguments.begin(), hidden_arguments.end(), hidden_argument) != hidden_arguments.end()) {
104 hidden_arguments.push_back(hidden_argument);
106 args_manager.AddHiddenArgs(hidden_arguments);
109 args_manager.ClearArgs();
110 command_option_names.clear();
114 std::vector<const char*> argv;
115 argv.reserve(random_arguments.size());
116 for (
const std::string& random_argument : random_arguments) {
117 argv.push_back(random_argument.c_str());
121 (void)args_manager.ParseParameters(argv.size(), argv.data(), error);
122 }
catch (
const std::logic_error&) {
132 (void)args_manager.GetIntArg(s1, i64);
133 (void)args_manager.GetArg(s1, s2);
134 (void)args_manager.GetArgFlags(s1);
135 (void)args_manager.GetArgs(s1);
136 (void)args_manager.GetBoolArg(s1, b);
138 (void)args_manager.GetChainTypeString();
139 }
catch (
const std::runtime_error&) {
141 (void)args_manager.GetHelpMessage();
142 const auto command = args_manager.GetCommand();
144 (void)args_manager.CheckCommandOptions(
command->command);
146 (void)args_manager.GetUnrecognizedSections();
147 (void)args_manager.GetUnsuitableSectionOnlyArgs();
148 (void)args_manager.IsArgNegated(s1);
149 (void)args_manager.IsArgSet(s1);
bool HelpRequested(const ArgsManager &args)
void SetupHelpOptions(ArgsManager &args)
Add help options to the args manager.
std::string ConsumeRandomLengthString(size_t max_length)
T PickValueInArray(const T(&array)[size])
#define LIMITED_WHILE(condition, limit)
Can be used to limit a theoretically unbounded loop.
size_t CallOneOf(FuzzedDataProvider &fuzzed_data_provider, Callables... callables)
std::vector< std::string > ConsumeRandomLengthStringVector(FuzzedDataProvider &fuzzed_data_provider, const size_t max_vector_size=16, const size_t max_string_length=16) noexcept
FuzzedDataProvider & fuzzed_data_provider