More ConfigDefinition unit tests, fixes, support std::string as type

pull/1186/head
Stephen Shelton 4 years ago
parent 25212b929c
commit 105dd30fd9
No known key found for this signature in database
GPG Key ID: EE4BADACCE8B631C

@ -69,10 +69,11 @@ namespace llarp
std::string std::string
defaultValueAsString() defaultValueAsString()
{ {
if (defaultValue) std::ostringstream oss;
return std::to_string(defaultValue.value()); if (defaultValue.has_value())
else oss << defaultValue.value();
return "";
return oss.str();
} }
void void
@ -89,7 +90,7 @@ namespace llarp
iss >> t; iss >> t;
if (iss.fail()) if (iss.fail())
{ {
throw std::invalid_argument(stringify(input, " is not a valid" , typeid(T).name())); throw std::invalid_argument(stringify(input, " is not a valid ", typeid(T).name()));
} }
else else
{ {
@ -102,12 +103,13 @@ namespace llarp
std::string std::string
writeValue(bool useDefault) writeValue(bool useDefault)
{ {
if (parsedValue) std::ostringstream oss;
return std::to_string(parsedValue.value()); if (parsedValue.has_value())
oss << parsedValue.value();
else if (useDefault and defaultValue.has_value()) else if (useDefault and defaultValue.has_value())
return std::to_string(defaultValue.value()); oss << defaultValue.value();
else
return {}; return oss.str();
} }
nonstd::optional<T> defaultValue; nonstd::optional<T> defaultValue;

@ -2,7 +2,7 @@
#include <catch2/catch.hpp> #include <catch2/catch.hpp>
TEST_CASE("ConfigDefinition parse test", "[config]") TEST_CASE("ConfigDefinition int parse test", "[config]")
{ {
llarp::ConfigDefinition<int> def("foo", "bar", false, false, 42); llarp::ConfigDefinition<int> def("foo", "bar", false, false, 42);
@ -18,6 +18,18 @@ TEST_CASE("ConfigDefinition parse test", "[config]")
CHECK(def.defaultValueAsString() == "42"); CHECK(def.defaultValueAsString() == "42");
} }
TEST_CASE("ConfigDefinition string parse test", "[config]")
{
llarp::ConfigDefinition<std::string> def("foo", "bar", false, false, "test");
CHECK(def.getValue() == "test");
CHECK(def.defaultValueAsString() == "test");
CHECK_NOTHROW(def.parseValue("foo"));
CHECK(def.getValue() == "foo");
CHECK(def.numFound == 1);
}
TEST_CASE("ConfigDefinition multiple parses test", "[config]") TEST_CASE("ConfigDefinition multiple parses test", "[config]")
{ {
{ {
@ -67,6 +79,22 @@ TEST_CASE("Configuration basic add/get test", "[config]")
CHECK(config.getConfigValue<int>("router", "threads") == 5); CHECK(config.getConfigValue<int>("router", "threads") == 5);
} }
TEST_CASE("Configuration missing def test", "[config]")
{
llarp::Configuration config;
CHECK_THROWS(config.addConfigValue("foo", "bar", "5"));
CHECK_THROWS(config.getConfigValue<int>("foo", "bar") == 5);
config.addDefinition(std::make_unique<llarp::ConfigDefinition<int>>(
"quux",
"bar",
false,
false,
4));
CHECK_THROWS(config.addConfigValue("foo", "bar", "5"));
}
TEST_CASE("Configuration required test", "[config]") TEST_CASE("Configuration required test", "[config]")
{ {
llarp::Configuration config; llarp::Configuration config;
@ -83,3 +111,31 @@ TEST_CASE("Configuration required test", "[config]")
CHECK_NOTHROW(config.validate()); CHECK_NOTHROW(config.validate());
} }
TEST_CASE("Configuration section test", "[config]")
{
llarp::Configuration config;
config.addDefinition(std::make_unique<llarp::ConfigDefinition<int>>(
"foo",
"bar",
true,
false,
1));
config.addDefinition(std::make_unique<llarp::ConfigDefinition<int>>(
"goo",
"bar",
true,
false,
1));
CHECK_THROWS(config.validate());
config.addConfigValue("foo", "bar", "5");
CHECK_THROWS(config.validate());
CHECK_NOTHROW(config.addConfigValue("goo", "bar", "6"));
CHECK_NOTHROW(config.validate());
CHECK(config.getConfigValue<int>("foo", "bar") == 5);
CHECK(config.getConfigValue<int>("goo", "bar") == 6);
}

Loading…
Cancel
Save