fix some errors in tests
Change-Id: I8f160bd9f555cac5999765e0fcb83fa78c9feffe
diff --git a/src/configuration.cpp b/src/configuration.cpp
index 60097a6..0117df7 100644
--- a/src/configuration.cpp
+++ b/src/configuration.cpp
@@ -153,12 +153,11 @@
auto nameAssignmentItems = configJson.get_child_optional(CONFIG_NAME_ASSIGNMENT);
if (nameAssignmentItems) {
for (const auto item : *nameAssignmentItems) {
- try {
- m_heuristic.push_back(NameAssignmentFuncFactory::createNameAssignmentFuncFactory(item.first));
- }
- catch (const std::exception& e) {
+ auto func = NameAssignmentFuncFactory::createNameAssignmentFuncFactory(item.first, item.second.data());
+ if (func == nullptr) {
BOOST_THROW_EXCEPTION(std::runtime_error("Error on creating name assignment function"));
}
+ m_heuristic.push_back(std::move(func));
}
}
}
diff --git a/src/name-assignments/assignment-funcs.cpp b/src/name-assignments/assignment-funcs.cpp
index 501c510..50c8df1 100644
--- a/src/name-assignments/assignment-funcs.cpp
+++ b/src/name-assignments/assignment-funcs.cpp
@@ -27,13 +27,17 @@
NameAssignmentFuncFactory::NameAssignmentFuncFactory(const std::string& factoryType, const std::string& format)
: FACTORY_TYPE(factoryType)
{
- auto s = format;
- size_t pos = 0;
- while ((pos = s.find("/")) != std::string::npos) {
- m_nameFormat.push_back(s.substr(0, pos));
- s.erase(0, pos + 1);
+ size_t index = 0, startIndex = 0;
+ while ((index = format.find("/", startIndex)) != std::string::npos) {
+ auto component = format.substr(startIndex, index - startIndex);
+ if (!component.empty()) {
+ m_nameFormat.push_back(component);
+ }
+ startIndex = index + 1;
}
- m_nameFormat.push_back(s);
+ if (startIndex != format.size()) {
+ m_nameFormat.push_back(format.substr(startIndex));
+ }
}
unique_ptr<NameAssignmentFuncFactory>
diff --git a/tests/unit-tests/configuration.t.cpp b/tests/unit-tests/configuration.t.cpp
index 223b52f..5d4a7dd 100644
--- a/tests/unit-tests/configuration.t.cpp
+++ b/tests/unit-tests/configuration.t.cpp
@@ -55,6 +55,11 @@
BOOST_CHECK_EQUAL(config.m_redirection->at(0)->getName(),
"/ndn/site1/KEY/%11%BC%22%F4c%15%FF%17/self/%FD%00%00%01Y%C8%14%D9%A5");
BOOST_CHECK_EQUAL(config.m_heuristic.size(), 3);
+ BOOST_CHECK_EQUAL(config.m_heuristic[0]->FACTORY_TYPE, "param");
+ BOOST_CHECK_EQUAL(config.m_heuristic[1]->FACTORY_TYPE, "param");
+ BOOST_CHECK_EQUAL(config.m_heuristic[2]->FACTORY_TYPE, "random");
+ BOOST_CHECK_EQUAL(config.m_heuristic[0]->m_nameFormat[0], "group");
+ BOOST_CHECK_EQUAL(config.m_heuristic[0]->m_nameFormat[1], "email");
std::vector<std::tuple<std::string, std::string>> params;
params.emplace_back("email", "1@1.edu");
params.emplace_back("group", "irl");
@@ -62,11 +67,13 @@
std::vector<Name> names;
for (auto& assignment : config.m_heuristic) {
auto results = assignment->assignName(params);
+ BOOST_CHECK_EQUAL(results.size(), 1);
names.insert(names.end(), results.begin(), results.end());
}
+ BOOST_CHECK_EQUAL(names.size(), 3);
BOOST_CHECK_EQUAL(names[0], Name("/irl/1@1.edu"));
BOOST_CHECK_EQUAL(names[1], Name("/irl/ndncert"));
- BOOST_CHECK_EQUAL(names[2].size(), 2);
+ BOOST_CHECK_EQUAL(names[2].size(), 1);
}
BOOST_AUTO_TEST_CASE(CAConfigFileWithErrors)