16 void initialize_system()
18 static const auto testing_setup = MakeNoLogFileContext<>();
21 std::string GetArgumentName(
const std::string&
name)
23 size_t idx =
name.find(
'=');
24 if (idx == std::string::npos) {
27 return name.substr(0, idx);
35 if (fuzzed_data_provider.ConsumeBool()) {
44 args_manager.SelectConfigNetwork(fuzzed_data_provider.ConsumeRandomLengthString(16));
47 args_manager.SoftSetArg(fuzzed_data_provider.ConsumeRandomLengthString(16), fuzzed_data_provider.ConsumeRandomLengthString(16));
50 args_manager.ForceSetArg(fuzzed_data_provider.ConsumeRandomLengthString(16), fuzzed_data_provider.ConsumeRandomLengthString(16));
53 args_manager.SoftSetBoolArg(fuzzed_data_provider.ConsumeRandomLengthString(16), fuzzed_data_provider.ConsumeBool());
56 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::HIDDEN});
59 const std::string argument_name = GetArgumentName(fuzzed_data_provider.ConsumeRandomLengthString(16));
60 if (args_manager.GetArgFlags(argument_name) != std::nullopt) {
63 args_manager.AddArg(argument_name, fuzzed_data_provider.ConsumeRandomLengthString(16), fuzzed_data_provider.ConsumeIntegral<
unsigned int>() & ~
ArgsManager::COMMAND, options_category);
69 std::vector<std::string> hidden_arguments;
70 for (
const std::string&
name : names) {
71 const std::string hidden_argument = GetArgumentName(
name);
72 if (args_manager.GetArgFlags(hidden_argument) != std::nullopt) {
75 if (std::find(hidden_arguments.begin(), hidden_arguments.end(), hidden_argument) != hidden_arguments.end()) {
78 hidden_arguments.push_back(hidden_argument);
80 args_manager.AddHiddenArgs(hidden_arguments);
83 args_manager.ClearArgs();
87 std::vector<const char*> argv;
88 argv.reserve(random_arguments.size());
89 for (
const std::string& random_argument : random_arguments) {
90 argv.push_back(random_argument.c_str());
94 (void)args_manager.ParseParameters(argv.size(), argv.data(), error);
95 }
catch (
const std::logic_error&) {
100 const std::string s1 = fuzzed_data_provider.ConsumeRandomLengthString(16);
101 const std::string s2 = fuzzed_data_provider.ConsumeRandomLengthString(16);
102 const int64_t i64 = fuzzed_data_provider.ConsumeIntegral<int64_t>();
103 const bool b = fuzzed_data_provider.ConsumeBool();
105 (void)args_manager.GetIntArg(s1, i64);
106 (void)args_manager.GetArg(s1, s2);
107 (void)args_manager.GetArgFlags(s1);
108 (void)args_manager.GetArgs(s1);
109 (void)args_manager.GetBoolArg(s1, b);
111 (void)args_manager.GetChainTypeString();
112 }
catch (
const std::runtime_error&) {
114 (void)args_manager.GetHelpMessage();
115 (void)args_manager.GetUnrecognizedSections();
116 (void)args_manager.GetUnsuitableSectionOnlyArgs();
117 (void)args_manager.IsArgNegated(s1);
118 (void)args_manager.IsArgSet(s1);
bool HelpRequested(const ArgsManager &args)
void SetupHelpOptions(ArgsManager &args)
Add help options to the args manager.
#define LIMITED_WHILE(condition, limit)
Can be used to limit a theoretically unbounded loop.
std::vector< std::string > ConsumeRandomLengthStringVector(FuzzedDataProvider &fuzzed_data_provider, const size_t max_vector_size=16, const size_t max_string_length=16) noexcept
size_t CallOneOf(FuzzedDataProvider &fuzzed_data_provider, Callables... callables)