Changeset View
Changeset View
Standalone View
Standalone View
src/test/util_tests.cpp
Show All 9 Lines | |||||
#include <util/strencodings.h> | #include <util/strencodings.h> | ||||
#include <util/time.h> | #include <util/time.h> | ||||
#include <test/setup_common.h> | #include <test/setup_common.h> | ||||
#include <boost/test/unit_test.hpp> | #include <boost/test/unit_test.hpp> | ||||
#include <cstdint> | #include <cstdint> | ||||
#include <utility> | |||||
#ifndef WIN32 | #ifndef WIN32 | ||||
#include <csignal> | #include <csignal> | ||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#include <sys/wait.h> | #include <sys/wait.h> | ||||
#endif | #endif | ||||
#include <thread> | #include <thread> | ||||
#include <vector> | #include <vector> | ||||
▲ Show 20 Lines • Show All 158 Lines • ▼ Show 20 Lines | void ReadConfigString(const std::string str_config) { | ||||
} | } | ||||
std::string error; | std::string error; | ||||
BOOST_REQUIRE(ReadConfigStream(streamConfig, "", error)); | BOOST_REQUIRE(ReadConfigStream(streamConfig, "", error)); | ||||
} | } | ||||
void SetNetworkOnlyArg(const std::string arg) { | void SetNetworkOnlyArg(const std::string arg) { | ||||
LOCK(cs_args); | LOCK(cs_args); | ||||
m_network_only_args.insert(arg); | m_network_only_args.insert(arg); | ||||
} | } | ||||
void SetupArgs(int argv, const char *args[]) { | void | ||||
for (int i = 0; i < argv; ++i) { | SetupArgs(const std::vector<std::pair<std::string, unsigned int>> &args) { | ||||
AddArg(args[i], "", ArgsManager::ALLOW_ANY, | for (const auto &arg : args) { | ||||
OptionsCategory::OPTIONS); | AddArg(arg.first, "", arg.second, OptionsCategory::OPTIONS); | ||||
} | } | ||||
} | } | ||||
}; | }; | ||||
BOOST_AUTO_TEST_CASE(util_ParseParameters) { | BOOST_AUTO_TEST_CASE(util_ParseParameters) { | ||||
TestArgsManager testArgs; | TestArgsManager testArgs; | ||||
const char *avail_args[] = {"-a", "-b", "-ccc", "-d"}; | const auto a = std::make_pair("-a", ArgsManager::ALLOW_ANY); | ||||
const auto b = std::make_pair("-b", ArgsManager::ALLOW_ANY); | |||||
const auto ccc = std::make_pair("-ccc", ArgsManager::ALLOW_ANY); | |||||
const auto d = std::make_pair("-d", ArgsManager::ALLOW_ANY); | |||||
const char *argv_test[] = {"-ignored", "-a", "-b", "-ccc=argument", | const char *argv_test[] = {"-ignored", "-a", "-b", "-ccc=argument", | ||||
"-ccc=multiple", "f", "-d=e"}; | "-ccc=multiple", "f", "-d=e"}; | ||||
std::string error; | std::string error; | ||||
testArgs.SetupArgs(4, avail_args); | testArgs.SetupArgs({a, b, ccc, d}); | ||||
BOOST_CHECK(testArgs.ParseParameters(0, (char **)argv_test, error)); | BOOST_CHECK(testArgs.ParseParameters(0, (char **)argv_test, error)); | ||||
BOOST_CHECK(testArgs.GetOverrideArgs().empty() && | BOOST_CHECK(testArgs.GetOverrideArgs().empty() && | ||||
testArgs.GetConfigArgs().empty()); | testArgs.GetConfigArgs().empty()); | ||||
BOOST_CHECK(testArgs.ParseParameters(1, (char **)argv_test, error)); | BOOST_CHECK(testArgs.ParseParameters(1, (char **)argv_test, error)); | ||||
BOOST_CHECK(testArgs.GetOverrideArgs().empty() && | BOOST_CHECK(testArgs.GetOverrideArgs().empty() && | ||||
testArgs.GetConfigArgs().empty()); | testArgs.GetConfigArgs().empty()); | ||||
▲ Show 20 Lines • Show All 58 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(util_ParseKeyValue) { | ||||
BOOST_CHECK(ParseKeyValue(key, value)); | BOOST_CHECK(ParseKeyValue(key, value)); | ||||
BOOST_CHECK_EQUAL(key, "-b"); | BOOST_CHECK_EQUAL(key, "-b"); | ||||
BOOST_CHECK_EQUAL(value, "abc"); | BOOST_CHECK_EQUAL(value, "abc"); | ||||
} | } | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(util_GetBoolArg) { | BOOST_AUTO_TEST_CASE(util_GetBoolArg) { | ||||
TestArgsManager testArgs; | TestArgsManager testArgs; | ||||
const char *avail_args[] = {"-a", "-b", "-c", "-d", "-e", "-f"}; | const auto a = std::make_pair("-a", ArgsManager::ALLOW_BOOL); | ||||
const auto b = std::make_pair("-b", ArgsManager::ALLOW_BOOL); | |||||
const auto c = std::make_pair("-c", ArgsManager::ALLOW_BOOL); | |||||
const auto d = std::make_pair("-d", ArgsManager::ALLOW_BOOL); | |||||
const auto e = std::make_pair("-e", ArgsManager::ALLOW_BOOL); | |||||
const auto f = std::make_pair("-f", ArgsManager::ALLOW_BOOL); | |||||
const char *argv_test[] = {"ignored", "-a", "-nob", "-c=0", | const char *argv_test[] = {"ignored", "-a", "-nob", "-c=0", | ||||
"-d=1", "-e=false", "-f=true"}; | "-d=1", "-e=false", "-f=true"}; | ||||
std::string error; | std::string error; | ||||
testArgs.SetupArgs(6, avail_args); | testArgs.SetupArgs({a, b, c, d, e, f}); | ||||
BOOST_CHECK(testArgs.ParseParameters(7, (char **)argv_test, error)); | BOOST_CHECK(testArgs.ParseParameters(7, (char **)argv_test, error)); | ||||
// Each letter should be set. | // Each letter should be set. | ||||
for (const char opt : "abcdef") { | for (const char opt : "abcdef") { | ||||
BOOST_CHECK(testArgs.IsArgSet({'-', opt}) || !opt); | BOOST_CHECK(testArgs.IsArgSet({'-', opt}) || !opt); | ||||
} | } | ||||
// Nothing else should be in the map | // Nothing else should be in the map | ||||
Show All 16 Lines | BOOST_AUTO_TEST_CASE(util_GetBoolArg) { | ||||
BOOST_CHECK(testArgs.GetBoolArg("-f", true) == false); | BOOST_CHECK(testArgs.GetBoolArg("-f", true) == false); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(util_GetBoolArgEdgeCases) { | BOOST_AUTO_TEST_CASE(util_GetBoolArgEdgeCases) { | ||||
// Test some awful edge cases that hopefully no user will ever exercise. | // Test some awful edge cases that hopefully no user will ever exercise. | ||||
TestArgsManager testArgs; | TestArgsManager testArgs; | ||||
// Params test | // Params test | ||||
const char *avail_args[] = {"-foo", "-bar"}; | const auto foo = std::make_pair("-foo", ArgsManager::ALLOW_BOOL); | ||||
const auto bar = std::make_pair("-bar", ArgsManager::ALLOW_BOOL); | |||||
const char *argv_test[] = {"ignored", "-nofoo", "-foo", "-nobar=0"}; | const char *argv_test[] = {"ignored", "-nofoo", "-foo", "-nobar=0"}; | ||||
testArgs.SetupArgs(2, avail_args); | testArgs.SetupArgs({foo, bar}); | ||||
std::string error; | std::string error; | ||||
BOOST_CHECK(testArgs.ParseParameters(4, (char **)argv_test, error)); | BOOST_CHECK(testArgs.ParseParameters(4, (char **)argv_test, error)); | ||||
// This was passed twice, second one overrides the negative setting. | // This was passed twice, second one overrides the negative setting. | ||||
BOOST_CHECK(!testArgs.IsArgNegated("-foo")); | BOOST_CHECK(!testArgs.IsArgNegated("-foo")); | ||||
BOOST_CHECK(testArgs.GetArg("-foo", "xxx") == ""); | BOOST_CHECK(testArgs.GetArg("-foo", "xxx") == ""); | ||||
// A double negative is a positive, and not marked as negated. | // A double negative is a positive, and not marked as negated. | ||||
▲ Show 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | const char *str_config = "a=\n" | ||||
"ccc=extend2\n" | "ccc=extend2\n" | ||||
"d=eee\n" | "d=eee\n" | ||||
"h=1\n" | "h=1\n" | ||||
"[sec2]\n" | "[sec2]\n" | ||||
"ccc=extend3\n" | "ccc=extend3\n" | ||||
"iii=2\n"; | "iii=2\n"; | ||||
TestArgsManager test_args; | TestArgsManager test_args; | ||||
const char *avail_args[] = {"-a", "-b", "-ccc", "-d", "-e", | const auto a = std::make_pair("-a", ArgsManager::ALLOW_BOOL); | ||||
"-fff", "-ggg", "-h", "-i", "-iii"}; | const auto b = std::make_pair("-b", ArgsManager::ALLOW_BOOL); | ||||
test_args.SetupArgs(10, avail_args); | const auto ccc = std::make_pair("-ccc", ArgsManager::ALLOW_STRING); | ||||
const auto d = std::make_pair("-d", ArgsManager::ALLOW_STRING); | |||||
const auto e = std::make_pair("-e", ArgsManager::ALLOW_ANY); | |||||
const auto fff = std::make_pair("-fff", ArgsManager::ALLOW_BOOL); | |||||
const auto ggg = std::make_pair("-ggg", ArgsManager::ALLOW_BOOL); | |||||
const auto h = std::make_pair("-h", ArgsManager::ALLOW_BOOL); | |||||
const auto i = std::make_pair("-i", ArgsManager::ALLOW_BOOL); | |||||
const auto iii = std::make_pair("-iii", ArgsManager::ALLOW_INT); | |||||
test_args.SetupArgs({a, b, ccc, d, e, fff, ggg, h, i, iii}); | |||||
test_args.ReadConfigString(str_config); | test_args.ReadConfigString(str_config); | ||||
// expectation: a, b, ccc, d, fff, ggg, h, i end up in map | // expectation: a, b, ccc, d, fff, ggg, h, i end up in map | ||||
// so do sec1.ccc, sec1.d, sec1.h, sec2.ccc, sec2.iii | // so do sec1.ccc, sec1.d, sec1.h, sec2.ccc, sec2.iii | ||||
BOOST_CHECK(test_args.GetOverrideArgs().empty()); | BOOST_CHECK(test_args.GetOverrideArgs().empty()); | ||||
BOOST_CHECK(test_args.GetConfigArgs().size() == 13); | BOOST_CHECK(test_args.GetConfigArgs().size() == 13); | ||||
▲ Show 20 Lines • Show All 276 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(util_SetArg) { | ||||
testArgs.ForceSetArg("strtest2", "...gnirts"); | testArgs.ForceSetArg("strtest2", "...gnirts"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest2", "default"), "...gnirts"); | BOOST_CHECK_EQUAL(testArgs.GetArg("strtest2", "default"), "...gnirts"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 1); | BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 1); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").front(), "...gnirts"); | BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").front(), "...gnirts"); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(util_GetChainName) { | BOOST_AUTO_TEST_CASE(util_GetChainName) { | ||||
TestArgsManager test_args; | TestArgsManager test_args; | ||||
const char *avail_args[] = {"-testnet", "-regtest"}; | const auto testnet = std::make_pair("-testnet", ArgsManager::ALLOW_BOOL); | ||||
test_args.SetupArgs(2, avail_args); | const auto regtest = std::make_pair("-regtest", ArgsManager::ALLOW_BOOL); | ||||
test_args.SetupArgs({testnet, regtest}); | |||||
const char *argv_testnet[] = {"cmd", "-testnet"}; | const char *argv_testnet[] = {"cmd", "-testnet"}; | ||||
const char *argv_regtest[] = {"cmd", "-regtest"}; | const char *argv_regtest[] = {"cmd", "-regtest"}; | ||||
const char *argv_test_no_reg[] = {"cmd", "-testnet", "-noregtest"}; | const char *argv_test_no_reg[] = {"cmd", "-testnet", "-noregtest"}; | ||||
const char *argv_both[] = {"cmd", "-testnet", "-regtest"}; | const char *argv_both[] = {"cmd", "-testnet", "-regtest"}; | ||||
// equivalent to "-testnet" | // equivalent to "-testnet" | ||||
// regtest in testnet section is ignored | // regtest in testnet section is ignored | ||||
▲ Show 20 Lines • Show All 843 Lines • Show Last 20 Lines |