Changeset View
Changeset View
Standalone View
Standalone View
src/test/util_tests.cpp
// Copyright (c) 2011-2019 The Bitcoin Core developers | // Copyright (c) 2011-2019 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include <util/system.h> | #include <util/system.h> | ||||
#include <clientversion.h> | #include <clientversion.h> | ||||
#include <sync.h> | #include <sync.h> | ||||
#include <test/util.h> | #include <test/util.h> | ||||
#include <util/moneystr.h> | #include <util/moneystr.h> | ||||
#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 <univalue.h> | |||||
#include <boost/test/unit_test.hpp> | #include <boost/test/unit_test.hpp> | ||||
#include <cstdint> | #include <cstdint> | ||||
#include <utility> | #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> | ||||
▲ Show 20 Lines • Show All 142 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
BOOST_AUTO_TEST_CASE(util_FormatISO8601Date) { | BOOST_AUTO_TEST_CASE(util_FormatISO8601Date) { | ||||
BOOST_CHECK_EQUAL(FormatISO8601Date(1317425777), "2011-09-30"); | BOOST_CHECK_EQUAL(FormatISO8601Date(1317425777), "2011-09-30"); | ||||
} | } | ||||
struct TestArgsManager : public ArgsManager { | struct TestArgsManager : public ArgsManager { | ||||
TestArgsManager() { m_network_only_args.clear(); } | TestArgsManager() { m_network_only_args.clear(); } | ||||
std::map<std::string, std::vector<std::string>> &GetOverrideArgs() { | |||||
return m_override_args; | |||||
} | |||||
std::map<std::string, std::vector<std::string>> &GetConfigArgs() { | |||||
return m_config_args; | |||||
} | |||||
void ReadConfigString(const std::string str_config) { | void ReadConfigString(const std::string str_config) { | ||||
std::istringstream streamConfig(str_config); | std::istringstream streamConfig(str_config); | ||||
{ | { | ||||
LOCK(cs_args); | LOCK(cs_args); | ||||
m_config_args.clear(); | m_settings.ro_config.clear(); | ||||
m_config_sections.clear(); | m_config_sections.clear(); | ||||
} | } | ||||
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 | void | ||||
SetupArgs(const std::vector<std::pair<std::string, unsigned int>> &args) { | SetupArgs(const std::vector<std::pair<std::string, unsigned int>> &args) { | ||||
for (const auto &arg : args) { | for (const auto &arg : args) { | ||||
AddArg(arg.first, "", arg.second, OptionsCategory::OPTIONS); | AddArg(arg.first, "", arg.second, OptionsCategory::OPTIONS); | ||||
} | } | ||||
} | } | ||||
using ArgsManager::cs_args; | using ArgsManager::cs_args; | ||||
using ArgsManager::m_network; | using ArgsManager::m_network; | ||||
using ArgsManager::m_settings; | |||||
using ArgsManager::ReadConfigStream; | using ArgsManager::ReadConfigStream; | ||||
}; | }; | ||||
BOOST_AUTO_TEST_CASE(util_ParseParameters) { | BOOST_AUTO_TEST_CASE(util_ParseParameters) { | ||||
TestArgsManager testArgs; | TestArgsManager testArgs; | ||||
const auto a = std::make_pair("-a", ArgsManager::ALLOW_ANY); | const auto a = std::make_pair("-a", ArgsManager::ALLOW_ANY); | ||||
const auto b = std::make_pair("-b", 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 ccc = std::make_pair("-ccc", ArgsManager::ALLOW_ANY); | ||||
const auto d = std::make_pair("-d", 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; | ||||
LOCK(testArgs.cs_args); | |||||
testArgs.SetupArgs({a, b, ccc, d}); | 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.m_settings.command_line_options.empty() && | ||||
testArgs.GetConfigArgs().empty()); | testArgs.m_settings.ro_config.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.m_settings.command_line_options.empty() && | ||||
testArgs.GetConfigArgs().empty()); | testArgs.m_settings.ro_config.empty()); | ||||
BOOST_CHECK(testArgs.ParseParameters(7, (char **)argv_test, error)); | BOOST_CHECK(testArgs.ParseParameters(7, (char **)argv_test, error)); | ||||
// expectation: -ignored is ignored (program name argument), | // expectation: -ignored is ignored (program name argument), | ||||
// -a, -b and -ccc end up in map, -d ignored because it is after | // -a, -b and -ccc end up in map, -d ignored because it is after | ||||
// a non-option argument (non-GNU option parsing) | // a non-option argument (non-GNU option parsing) | ||||
BOOST_CHECK(testArgs.GetOverrideArgs().size() == 3 && | BOOST_CHECK(testArgs.m_settings.command_line_options.size() == 3 && | ||||
testArgs.GetConfigArgs().empty()); | testArgs.m_settings.ro_config.empty()); | ||||
BOOST_CHECK(testArgs.IsArgSet("-a") && testArgs.IsArgSet("-b") && | BOOST_CHECK(testArgs.IsArgSet("-a") && testArgs.IsArgSet("-b") && | ||||
testArgs.IsArgSet("-ccc") && !testArgs.IsArgSet("f") && | testArgs.IsArgSet("-ccc") && !testArgs.IsArgSet("f") && | ||||
!testArgs.IsArgSet("-d")); | !testArgs.IsArgSet("-d")); | ||||
BOOST_CHECK(testArgs.GetOverrideArgs().count("-a") && | BOOST_CHECK(testArgs.m_settings.command_line_options.count("a") && | ||||
testArgs.GetOverrideArgs().count("-b") && | testArgs.m_settings.command_line_options.count("b") && | ||||
testArgs.GetOverrideArgs().count("-ccc") && | testArgs.m_settings.command_line_options.count("ccc") && | ||||
!testArgs.GetOverrideArgs().count("f") && | !testArgs.m_settings.command_line_options.count("f") && | ||||
!testArgs.GetOverrideArgs().count("-d")); | !testArgs.m_settings.command_line_options.count("d")); | ||||
BOOST_CHECK(testArgs.GetOverrideArgs()["-a"].size() == 1); | BOOST_CHECK(testArgs.m_settings.command_line_options["a"].size() == 1); | ||||
BOOST_CHECK(testArgs.GetOverrideArgs()["-a"].front() == ""); | BOOST_CHECK( | ||||
BOOST_CHECK(testArgs.GetOverrideArgs()["-ccc"].size() == 2); | testArgs.m_settings.command_line_options["a"].front().get_str() == ""); | ||||
BOOST_CHECK(testArgs.GetOverrideArgs()["-ccc"].front() == "argument"); | BOOST_CHECK(testArgs.m_settings.command_line_options["ccc"].size() == 2); | ||||
BOOST_CHECK(testArgs.GetOverrideArgs()["-ccc"].back() == "multiple"); | BOOST_CHECK( | ||||
testArgs.m_settings.command_line_options["ccc"].front().get_str() == | |||||
"argument"); | |||||
BOOST_CHECK( | |||||
testArgs.m_settings.command_line_options["ccc"].back().get_str() == | |||||
"multiple"); | |||||
BOOST_CHECK(testArgs.GetArgs("-ccc").size() == 2); | BOOST_CHECK(testArgs.GetArgs("-ccc").size() == 2); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(util_ParseKeyValue) { | BOOST_AUTO_TEST_CASE(util_ParseKeyValue) { | ||||
{ | { | ||||
std::string key = "badarg"; | std::string key = "badarg"; | ||||
std::string value; | std::string value; | ||||
BOOST_CHECK(!ParseKeyValue(key, value)); | BOOST_CHECK(!ParseKeyValue(key, value)); | ||||
Show All 40 Lines | BOOST_AUTO_TEST_CASE(util_GetBoolArg) { | ||||
const auto c = std::make_pair("-c", 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 d = std::make_pair("-d", ArgsManager::ALLOW_BOOL); | ||||
const auto e = std::make_pair("-e", ArgsManager::ALLOW_BOOL); | const auto e = std::make_pair("-e", ArgsManager::ALLOW_BOOL); | ||||
const auto f = std::make_pair("-f", 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; | ||||
LOCK(testArgs.cs_args); | |||||
testArgs.SetupArgs({a, b, c, d, e, f}); | 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 | ||||
BOOST_CHECK(testArgs.GetOverrideArgs().size() == 6 && | BOOST_CHECK(testArgs.m_settings.command_line_options.size() == 6 && | ||||
testArgs.GetConfigArgs().empty()); | testArgs.m_settings.ro_config.empty()); | ||||
// The -no prefix should get stripped on the way in. | // The -no prefix should get stripped on the way in. | ||||
BOOST_CHECK(!testArgs.IsArgSet("-nob")); | BOOST_CHECK(!testArgs.IsArgSet("-nob")); | ||||
// The -b option is flagged as negated, and nothing else is | // The -b option is flagged as negated, and nothing else is | ||||
BOOST_CHECK(testArgs.IsArgNegated("-b")); | BOOST_CHECK(testArgs.IsArgNegated("-b")); | ||||
BOOST_CHECK(!testArgs.IsArgNegated("-a")); | BOOST_CHECK(!testArgs.IsArgNegated("-a")); | ||||
▲ Show 20 Lines • Show All 76 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; | ||||
LOCK(test_args.cs_args); | |||||
const auto a = std::make_pair("-a", ArgsManager::ALLOW_BOOL); | const auto a = std::make_pair("-a", ArgsManager::ALLOW_BOOL); | ||||
const auto b = std::make_pair("-b", ArgsManager::ALLOW_BOOL); | const auto b = std::make_pair("-b", ArgsManager::ALLOW_BOOL); | ||||
const auto ccc = std::make_pair("-ccc", ArgsManager::ALLOW_STRING); | const auto ccc = std::make_pair("-ccc", ArgsManager::ALLOW_STRING); | ||||
const auto d = std::make_pair("-d", 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 e = std::make_pair("-e", ArgsManager::ALLOW_ANY); | ||||
const auto fff = std::make_pair("-fff", ArgsManager::ALLOW_BOOL); | const auto fff = std::make_pair("-fff", ArgsManager::ALLOW_BOOL); | ||||
const auto ggg = std::make_pair("-ggg", 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 h = std::make_pair("-h", ArgsManager::ALLOW_BOOL); | ||||
const auto i = std::make_pair("-i", ArgsManager::ALLOW_BOOL); | const auto i = std::make_pair("-i", ArgsManager::ALLOW_BOOL); | ||||
const auto iii = std::make_pair("-iii", ArgsManager::ALLOW_INT); | 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.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.m_settings.command_line_options.empty()); | ||||
BOOST_CHECK(test_args.GetConfigArgs().size() == 13); | BOOST_CHECK(test_args.m_settings.ro_config.size() == 3); | ||||
BOOST_CHECK(test_args.m_settings.ro_config[""].size() == 8); | |||||
BOOST_CHECK(test_args.GetConfigArgs().count("-a") && | BOOST_CHECK(test_args.m_settings.ro_config["sec1"].size() == 3); | ||||
test_args.GetConfigArgs().count("-b") && | BOOST_CHECK(test_args.m_settings.ro_config["sec2"].size() == 2); | ||||
test_args.GetConfigArgs().count("-ccc") && | |||||
test_args.GetConfigArgs().count("-d") && | BOOST_CHECK(test_args.m_settings.ro_config[""].count("a") && | ||||
test_args.GetConfigArgs().count("-fff") && | test_args.m_settings.ro_config[""].count("b") && | ||||
test_args.GetConfigArgs().count("-ggg") && | test_args.m_settings.ro_config[""].count("ccc") && | ||||
test_args.GetConfigArgs().count("-h") && | test_args.m_settings.ro_config[""].count("d") && | ||||
test_args.GetConfigArgs().count("-i")); | test_args.m_settings.ro_config[""].count("fff") && | ||||
BOOST_CHECK(test_args.GetConfigArgs().count("-sec1.ccc") && | test_args.m_settings.ro_config[""].count("ggg") && | ||||
test_args.GetConfigArgs().count("-sec1.h") && | test_args.m_settings.ro_config[""].count("h") && | ||||
test_args.GetConfigArgs().count("-sec2.ccc") && | test_args.m_settings.ro_config[""].count("i")); | ||||
test_args.GetConfigArgs().count("-sec2.iii")); | BOOST_CHECK(test_args.m_settings.ro_config["sec1"].count("ccc") && | ||||
test_args.m_settings.ro_config["sec1"].count("h") && | |||||
test_args.m_settings.ro_config["sec2"].count("ccc") && | |||||
test_args.m_settings.ro_config["sec2"].count("iii")); | |||||
BOOST_CHECK(test_args.IsArgSet("-a") && test_args.IsArgSet("-b") && | BOOST_CHECK(test_args.IsArgSet("-a") && test_args.IsArgSet("-b") && | ||||
test_args.IsArgSet("-ccc") && test_args.IsArgSet("-d") && | test_args.IsArgSet("-ccc") && test_args.IsArgSet("-d") && | ||||
test_args.IsArgSet("-fff") && test_args.IsArgSet("-ggg") && | test_args.IsArgSet("-fff") && test_args.IsArgSet("-ggg") && | ||||
test_args.IsArgSet("-h") && test_args.IsArgSet("-i") && | test_args.IsArgSet("-h") && test_args.IsArgSet("-i") && | ||||
!test_args.IsArgSet("-zzz") && !test_args.IsArgSet("-iii")); | !test_args.IsArgSet("-zzz") && !test_args.IsArgSet("-iii")); | ||||
BOOST_CHECK(test_args.GetArg("-a", "xxx") == "" && | BOOST_CHECK(test_args.GetArg("-a", "xxx") == "" && | ||||
▲ Show 20 Lines • Show All 118 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(util_ReadConfigStream) { | ||||
BOOST_CHECK(test_args.GetArg("-d", "xxx") == "xxx"); | BOOST_CHECK(test_args.GetArg("-d", "xxx") == "xxx"); | ||||
BOOST_CHECK(test_args.GetArgs("-d").size() == 0); | BOOST_CHECK(test_args.GetArgs("-d").size() == 0); | ||||
BOOST_CHECK(test_args.GetArgs("-ccc").size() == 1); | BOOST_CHECK(test_args.GetArgs("-ccc").size() == 1); | ||||
BOOST_CHECK(test_args.GetArg("-h", "xxx") == "0"); | BOOST_CHECK(test_args.GetArg("-h", "xxx") == "0"); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(util_GetArg) { | BOOST_AUTO_TEST_CASE(util_GetArg) { | ||||
TestArgsManager testArgs; | TestArgsManager testArgs; | ||||
testArgs.GetOverrideArgs().clear(); | LOCK(testArgs.cs_args); | ||||
testArgs.GetOverrideArgs()["strtest1"] = {"string..."}; | testArgs.m_settings.command_line_options.clear(); | ||||
testArgs.m_settings.command_line_options["strtest1"] = {"string..."}; | |||||
// strtest2 undefined on purpose | // strtest2 undefined on purpose | ||||
testArgs.GetOverrideArgs()["inttest1"] = {"12345"}; | testArgs.m_settings.command_line_options["inttest1"] = {"12345"}; | ||||
testArgs.GetOverrideArgs()["inttest2"] = {"81985529216486895"}; | testArgs.m_settings.command_line_options["inttest2"] = { | ||||
"81985529216486895"}; | |||||
// inttest3 undefined on purpose | // inttest3 undefined on purpose | ||||
testArgs.GetOverrideArgs()["booltest1"] = {""}; | testArgs.m_settings.command_line_options["booltest1"] = {""}; | ||||
// booltest2 undefined on purpose | // booltest2 undefined on purpose | ||||
testArgs.GetOverrideArgs()["booltest3"] = {"0"}; | testArgs.m_settings.command_line_options["booltest3"] = {"0"}; | ||||
testArgs.GetOverrideArgs()["booltest4"] = {"1"}; | testArgs.m_settings.command_line_options["booltest4"] = {"1"}; | ||||
// priorities | // priorities | ||||
testArgs.GetOverrideArgs()["pritest1"] = {"a", "b"}; | testArgs.m_settings.command_line_options["pritest1"] = {"a", "b"}; | ||||
testArgs.GetConfigArgs()["pritest2"] = {"a", "b"}; | testArgs.m_settings.ro_config[""]["pritest2"] = {"a", "b"}; | ||||
testArgs.GetOverrideArgs()["pritest3"] = {"a"}; | testArgs.m_settings.command_line_options["pritest3"] = {"a"}; | ||||
testArgs.GetConfigArgs()["pritest3"] = {"b"}; | testArgs.m_settings.ro_config[""]["pritest3"] = {"b"}; | ||||
testArgs.GetOverrideArgs()["pritest4"] = {"a", "b"}; | testArgs.m_settings.command_line_options["pritest4"] = {"a", "b"}; | ||||
testArgs.GetConfigArgs()["pritest4"] = {"c", "d"}; | testArgs.m_settings.ro_config[""]["pritest4"] = {"c", "d"}; | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest1", "default"), "string..."); | BOOST_CHECK_EQUAL(testArgs.GetArg("strtest1", "default"), "string..."); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest2", "default"), "default"); | BOOST_CHECK_EQUAL(testArgs.GetArg("strtest2", "default"), "default"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("inttest1", -1), 12345); | BOOST_CHECK_EQUAL(testArgs.GetArg("inttest1", -1), 12345); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("inttest2", -1), 81985529216486895LL); | BOOST_CHECK_EQUAL(testArgs.GetArg("inttest2", -1), 81985529216486895LL); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("inttest3", -1), -1); | BOOST_CHECK_EQUAL(testArgs.GetArg("inttest3", -1), -1); | ||||
BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest1", false), true); | BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest1", false), true); | ||||
BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest2", false), false); | BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest2", false), false); | ||||
BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest3", false), false); | BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest3", false), false); | ||||
BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest4", false), true); | BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest4", false), true); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("pritest1", "default"), "b"); | BOOST_CHECK_EQUAL(testArgs.GetArg("pritest1", "default"), "b"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("pritest2", "default"), "a"); | BOOST_CHECK_EQUAL(testArgs.GetArg("pritest2", "default"), "a"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("pritest3", "default"), "a"); | BOOST_CHECK_EQUAL(testArgs.GetArg("pritest3", "default"), "a"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("pritest4", "default"), "b"); | BOOST_CHECK_EQUAL(testArgs.GetArg("pritest4", "default"), "b"); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(util_ClearForcedArg) { | BOOST_AUTO_TEST_CASE(util_ClearForcedArg) { | ||||
TestArgsManager testArgs; | TestArgsManager testArgs; | ||||
LOCK(testArgs.cs_args); | |||||
// Clear single string arg | // Clear command line arg | ||||
testArgs.GetOverrideArgs()["strtest1"] = {"string..."}; | testArgs.m_settings.command_line_options["cmdarg"] = {"cmdval"}; | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest1", "default"), "string..."); | BOOST_CHECK_EQUAL(testArgs.GetArg("cmdarg", "default"), "cmdval"); | ||||
testArgs.ClearForcedArg("strtest1"); | testArgs.ClearForcedArg("cmdarg"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest1", "default"), "default"); | BOOST_CHECK_EQUAL(testArgs.GetArg("cmdarg", "default"), "cmdval"); | ||||
// Clear boolean arg | // Clear config arg | ||||
testArgs.GetOverrideArgs()["booltest1"] = {"1"}; | testArgs.m_settings.ro_config[""]["configarg"] = {"configval"}; | ||||
BOOST_CHECK_EQUAL(testArgs.GetBoolArg("booltest1", false), true); | BOOST_CHECK_EQUAL(testArgs.GetArg("configarg", "default"), "configval"); | ||||
testArgs.ClearForcedArg("booltest1"); | testArgs.ClearForcedArg("configarg"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("booltest1", false), false); | BOOST_CHECK_EQUAL(testArgs.GetArg("configarg", "default"), "configval"); | ||||
// Clear multi arg. | // Clear forced arg | ||||
testArgs.GetOverrideArgs()["strtest2"].push_back("string..."); | testArgs.m_settings.forced_settings["forcedarg"] = {"forcedval"}; | ||||
testArgs.GetOverrideArgs()["strtest2"].push_back("...gnirts"); | BOOST_CHECK_EQUAL(testArgs.GetArg("forcedarg", "default"), "forcedval"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 2); | testArgs.ClearForcedArg("forcedarg"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").front(), "string..."); | BOOST_CHECK_EQUAL(testArgs.GetArg("forcedarg", "default"), "default"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").back(), "...gnirts"); | |||||
testArgs.ClearForcedArg("strtest2"); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest2", "default"), "default"); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 0); | |||||
// Clear exlusively overridden args | |||||
testArgs.GetOverrideArgs()["strtest3"].push_back("cli string..."); | |||||
testArgs.GetOverrideArgs()["strtest3"].push_back("...gnirts ilc"); | |||||
testArgs.GetConfigArgs()["strtest3"].push_back("string..."); | |||||
testArgs.GetConfigArgs()["strtest3"].push_back("...gnirts"); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest3", "default"), "...gnirts ilc"); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest3").size(), 4); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest3").front(), "cli string..."); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest3").back(), "...gnirts"); | |||||
testArgs.ClearForcedArg("strtest3"); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest3").size(), 2); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest3").front(), "string..."); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest3").back(), "...gnirts"); | |||||
} | } | ||||
BOOST_AUTO_TEST_CASE(util_SetArg) { | BOOST_AUTO_TEST_CASE(util_SetArg) { | ||||
TestArgsManager testArgs; | TestArgsManager testArgs; | ||||
// SoftSetArg | // SoftSetArg | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest1", "default"), "default"); | BOOST_CHECK_EQUAL(testArgs.GetArg("strtest1", "default"), "default"); | ||||
BOOST_CHECK_EQUAL(testArgs.SoftSetArg("strtest1", "string..."), true); | BOOST_CHECK_EQUAL(testArgs.SoftSetArg("strtest1", "string..."), true); | ||||
Show All 23 Lines | BOOST_AUTO_TEST_CASE(util_SetArg) { | ||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 1); | BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 1); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").front(), "string..."); | BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").front(), "string..."); | ||||
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"); | ||||
// ForceSetMultiArg | // ForceSetMultiArg | ||||
testArgs.ForceSetMultiArg("strtest2", "string..."); | testArgs.ForceSetMultiArg("strtest2", {"string...", "...gnirts"}); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest2", "default"), "string..."); | BOOST_CHECK_THROW(testArgs.GetArg("strtest2", "default"), | ||||
std::runtime_error); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 2); | BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 2); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").front(), "...gnirts"); | BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").front(), "string..."); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").back(), "string..."); | BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").back(), "...gnirts"); | ||||
testArgs.ClearForcedArg("strtest2"); | testArgs.ClearForcedArg("strtest2"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest2", "default"), "default"); | BOOST_CHECK_EQUAL(testArgs.GetArg("strtest2", "default"), "default"); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 0); | BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 0); | ||||
testArgs.ForceSetMultiArg("strtest2", "string..."); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest2", "default"), "string..."); | // If there are multi args, ForceSetArg should erase them | ||||
testArgs.ForceSetMultiArg("strtest2", {"string..."}); | |||||
BOOST_CHECK_THROW(testArgs.GetArg("strtest2", "default"), | |||||
std::runtime_error); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 1); | BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 1); | ||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").front(), "string..."); | BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").front(), "string..."); | ||||
testArgs.ForceSetMultiArg("strtest2", "one more thing..."); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArg("strtest2", "default"), | |||||
"one more thing..."); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").size(), 2); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").front(), "string..."); | |||||
BOOST_CHECK_EQUAL(testArgs.GetArgs("strtest2").back(), "one more thing..."); | |||||
// If there are multi args, ForceSetArg should erase them | |||||
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; | ||||
▲ Show 20 Lines • Show All 1,216 Lines • Show Last 20 Lines |