qa: Increase includeconf test coverage
This commit is contained in:
parent
472fe8a2ce
commit
fa4760fbb3
2 changed files with 26 additions and 13 deletions
20
src/util.cpp
20
src/util.cpp
|
@ -459,9 +459,9 @@ bool ArgsManager::ParseParameters(int argc, const char* const argv[], std::strin
|
||||||
if (it != m_override_args.end()) {
|
if (it != m_override_args.end()) {
|
||||||
if (it->second.size() > 0) {
|
if (it->second.size() > 0) {
|
||||||
for (const auto& ic : it->second) {
|
for (const auto& ic : it->second) {
|
||||||
fprintf(stderr, "warning: -includeconf cannot be used from commandline; ignoring -includeconf=%s\n", ic.c_str());
|
error += "-includeconf cannot be used from commandline; -includeconf=" + ic + "\n";
|
||||||
}
|
}
|
||||||
m_override_args.erase(it);
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -849,11 +849,12 @@ bool ArgsManager::ReadConfigFiles(std::string& error, bool ignore_invalid_keys)
|
||||||
// if there is an -includeconf in the override args, but it is empty, that means the user
|
// if there is an -includeconf in the override args, but it is empty, that means the user
|
||||||
// passed '-noincludeconf' on the command line, in which case we should not include anything
|
// passed '-noincludeconf' on the command line, in which case we should not include anything
|
||||||
if (m_override_args.count("-includeconf") == 0) {
|
if (m_override_args.count("-includeconf") == 0) {
|
||||||
|
std::string chain_id = GetChainName();
|
||||||
std::vector<std::string> includeconf(GetArgs("-includeconf"));
|
std::vector<std::string> includeconf(GetArgs("-includeconf"));
|
||||||
{
|
{
|
||||||
// We haven't set m_network yet (that happens in SelectParams()), so manually check
|
// We haven't set m_network yet (that happens in SelectParams()), so manually check
|
||||||
// for network.includeconf args.
|
// for network.includeconf args.
|
||||||
std::vector<std::string> includeconf_net(GetArgs(std::string("-") + GetChainName() + ".includeconf"));
|
std::vector<std::string> includeconf_net(GetArgs(std::string("-") + chain_id + ".includeconf"));
|
||||||
includeconf.insert(includeconf.end(), includeconf_net.begin(), includeconf_net.end());
|
includeconf.insert(includeconf.end(), includeconf_net.begin(), includeconf_net.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -862,7 +863,7 @@ bool ArgsManager::ReadConfigFiles(std::string& error, bool ignore_invalid_keys)
|
||||||
{
|
{
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
m_config_args.erase("-includeconf");
|
m_config_args.erase("-includeconf");
|
||||||
m_config_args.erase(std::string("-") + GetChainName() + ".includeconf");
|
m_config_args.erase(std::string("-") + chain_id + ".includeconf");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const std::string& to_include : includeconf) {
|
for (const std::string& to_include : includeconf) {
|
||||||
|
@ -873,15 +874,22 @@ bool ArgsManager::ReadConfigFiles(std::string& error, bool ignore_invalid_keys)
|
||||||
}
|
}
|
||||||
LogPrintf("Included configuration file %s\n", to_include.c_str());
|
LogPrintf("Included configuration file %s\n", to_include.c_str());
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Failed to include configuration file %s\n", to_include.c_str());
|
error = "Failed to include configuration file " + to_include;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Warn about recursive -includeconf
|
// Warn about recursive -includeconf
|
||||||
includeconf = GetArgs("-includeconf");
|
includeconf = GetArgs("-includeconf");
|
||||||
{
|
{
|
||||||
std::vector<std::string> includeconf_net(GetArgs(std::string("-") + GetChainName() + ".includeconf"));
|
std::vector<std::string> includeconf_net(GetArgs(std::string("-") + chain_id + ".includeconf"));
|
||||||
includeconf.insert(includeconf.end(), includeconf_net.begin(), includeconf_net.end());
|
includeconf.insert(includeconf.end(), includeconf_net.begin(), includeconf_net.end());
|
||||||
|
std::string chain_id_final = GetChainName();
|
||||||
|
if (chain_id_final != chain_id) {
|
||||||
|
// Also warn about recursive includeconf for the chain that was specified in one of the includeconfs
|
||||||
|
includeconf_net = GetArgs(std::string("-") + chain_id_final + ".includeconf");
|
||||||
|
includeconf.insert(includeconf.end(), includeconf_net.begin(), includeconf_net.end());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (const std::string& to_include : includeconf) {
|
for (const std::string& to_include : includeconf) {
|
||||||
fprintf(stderr, "warning: -includeconf cannot be used from included files; ignoring -includeconf=%s\n", to_include.c_str());
|
fprintf(stderr, "warning: -includeconf cannot be used from included files; ignoring -includeconf=%s\n", to_include.c_str());
|
||||||
|
|
|
@ -41,14 +41,9 @@ class IncludeConfTest(BitcoinTestFramework):
|
||||||
subversion = self.nodes[0].getnetworkinfo()["subversion"]
|
subversion = self.nodes[0].getnetworkinfo()["subversion"]
|
||||||
assert subversion.endswith("main; relative)/")
|
assert subversion.endswith("main; relative)/")
|
||||||
|
|
||||||
self.log.info("-includeconf cannot be used as command-line arg. subversion should still end with 'main; relative)/'")
|
self.log.info("-includeconf cannot be used as command-line arg")
|
||||||
self.stop_node(0)
|
self.stop_node(0)
|
||||||
|
self.nodes[0].assert_start_raises_init_error(extra_args=["-includeconf=relative2.conf"], expected_msg="Error parsing command line arguments: -includeconf cannot be used from commandline; -includeconf=relative2.conf")
|
||||||
self.start_node(0, extra_args=["-includeconf=relative2.conf"])
|
|
||||||
|
|
||||||
subversion = self.nodes[0].getnetworkinfo()["subversion"]
|
|
||||||
assert subversion.endswith("main; relative)/")
|
|
||||||
self.stop_node(0, expected_stderr="warning: -includeconf cannot be used from commandline; ignoring -includeconf=relative2.conf")
|
|
||||||
|
|
||||||
self.log.info("-includeconf cannot be used recursively. subversion should end with 'main; relative)/'")
|
self.log.info("-includeconf cannot be used recursively. subversion should end with 'main; relative)/'")
|
||||||
with open(os.path.join(self.options.tmpdir, "node0", "relative.conf"), "a", encoding="utf8") as f:
|
with open(os.path.join(self.options.tmpdir, "node0", "relative.conf"), "a", encoding="utf8") as f:
|
||||||
|
@ -59,8 +54,18 @@ class IncludeConfTest(BitcoinTestFramework):
|
||||||
assert subversion.endswith("main; relative)/")
|
assert subversion.endswith("main; relative)/")
|
||||||
self.stop_node(0, expected_stderr="warning: -includeconf cannot be used from included files; ignoring -includeconf=relative2.conf")
|
self.stop_node(0, expected_stderr="warning: -includeconf cannot be used from included files; ignoring -includeconf=relative2.conf")
|
||||||
|
|
||||||
|
self.log.info("-includeconf cannot contain invalid arg")
|
||||||
|
with open(os.path.join(self.options.tmpdir, "node0", "relative.conf"), "w", encoding="utf8") as f:
|
||||||
|
f.write("foo=bar\n")
|
||||||
|
self.nodes[0].assert_start_raises_init_error(expected_msg="Error reading configuration file: Invalid configuration value foo")
|
||||||
|
|
||||||
|
self.log.info("-includeconf cannot be invalid path")
|
||||||
|
os.remove(os.path.join(self.options.tmpdir, "node0", "relative.conf"))
|
||||||
|
self.nodes[0].assert_start_raises_init_error(expected_msg="Error reading configuration file: Failed to include configuration file relative.conf")
|
||||||
|
|
||||||
self.log.info("multiple -includeconf args can be used from the base config file. subversion should end with 'main; relative; relative2)/'")
|
self.log.info("multiple -includeconf args can be used from the base config file. subversion should end with 'main; relative; relative2)/'")
|
||||||
with open(os.path.join(self.options.tmpdir, "node0", "relative.conf"), "w", encoding="utf8") as f:
|
with open(os.path.join(self.options.tmpdir, "node0", "relative.conf"), "w", encoding="utf8") as f:
|
||||||
|
# Restore initial file contents
|
||||||
f.write("uacomment=relative\n")
|
f.write("uacomment=relative\n")
|
||||||
|
|
||||||
with open(os.path.join(self.options.tmpdir, "node0", "bitcoin.conf"), "a", encoding='utf8') as f:
|
with open(os.path.join(self.options.tmpdir, "node0", "bitcoin.conf"), "a", encoding='utf8') as f:
|
||||||
|
|
Loading…
Add table
Reference in a new issue