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;
50 args_manager.SoftSetArg(str_arg, str_value);
55 args_manager.ForceSetArg(str_arg, str_value);
60 args_manager.SoftSetBoolArg(str_arg, f_value);
63 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});
67 if (args_manager.GetArgFlags(argument_name) != std::nullopt) {
72 args_manager.AddArg(argument_name,
help,
flags, options_category);
74 command_option_names.push_back(argument_name);
79 if (
cmd.empty() ||
cmd[0] ==
'-' ||
cmd.find(
'=') != std::string::npos)
return;
80 if (args_manager.GetArgFlags(
cmd) != std::nullopt)
return;
82 std::set<std::string> options;
83 for (
const auto& opt : command_option_names) {
88 args_manager.AddCommand(
cmd,
help, std::move(options));
94 std::vector<std::string> hidden_arguments;
95 for (
const std::string&
name : names) {
96 const std::string hidden_argument = GetArgumentName(
name);
97 if (args_manager.GetArgFlags(hidden_argument) != std::nullopt) {
100 if (std::find(hidden_arguments.begin(), hidden_arguments.end(), hidden_argument) != hidden_arguments.end()) {
103 hidden_arguments.push_back(hidden_argument);
105 args_manager.AddHiddenArgs(hidden_arguments);
108 args_manager.ClearArgs();
109 command_option_names.clear();
113 std::vector<const char*> argv;
114 argv.reserve(random_arguments.size());
115 for (
const std::string& random_argument : random_arguments) {
116 argv.push_back(random_argument.c_str());
120 (void)args_manager.ParseParameters(argv.size(), argv.data(), error);
121 }
catch (
const std::logic_error&) {
131 (void)args_manager.GetIntArg(s1, i64);
132 (void)args_manager.GetArg(s1, s2);
133 (void)args_manager.GetArgFlags(s1);
134 (void)args_manager.GetArgs(s1);
135 (void)args_manager.GetBoolArg(s1, b);
137 (void)args_manager.GetChainTypeString();
138 }
catch (
const std::runtime_error&) {
140 (void)args_manager.GetHelpMessage();
141 const auto command = args_manager.GetCommand();
143 (void)args_manager.CheckCommandOptions(
command->command);
145 (void)args_manager.GetUnrecognizedSections();
146 (void)args_manager.GetUnsuitableSectionOnlyArgs();
147 (void)args_manager.IsArgNegated(s1);
148 (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])
LIMITED_WHILE(provider.remaining_bytes(), 10000)
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