From: Tomek Mrugalski Date: Wed, 7 Nov 2018 19:37:19 +0000 (+0700) Subject: [#115,!48] The patch has been applied correctly to database_connection.cc|h X-Git-Tag: 259-libyang-adapt-authoritative_base~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9c176565513673d7452960ab5d14067a9e710402;p=thirdparty%2Fkea.git [#115,!48] The patch has been applied correctly to database_connection.cc|h --- diff --git a/src/lib/database/database_connection.cc b/src/lib/database/database_connection.cc index e58ebb4752..c5f1839738 100644 --- a/src/lib/database/database_connection.cc +++ b/src/lib/database/database_connection.cc @@ -162,7 +162,12 @@ DatabaseConnection::toElement(const ParameterMap& params) { if ((keyword == "lfc-interval") || (keyword == "connect-timeout") || - (keyword == "port")) { + (keyword == "request-timeout") || + (keyword == "port") || + (keyword == "max-reconnect-tries") || + (keyword == "reconnect-wait-time") || + (keyword == "tcp-keepalive")) { + // integer parameters int64_t int_value; try { @@ -173,7 +178,9 @@ DatabaseConnection::toElement(const ParameterMap& params) { << "integer parameter: " << keyword << "=" << value); } } else if ((keyword == "persist") || - (keyword == "readonly")) { + (keyword == "readonly") || + (keyword == "tcp-nodelay")) { + if (value == "true") { result->set(keyword, isc::data::Element::create(true)); } else if (value == "false") { diff --git a/src/lib/database/tests/database_connection_unittest.cc b/src/lib/database/tests/database_connection_unittest.cc index 4939365e43..508c120e4d 100644 --- a/src/lib/database/tests/database_connection_unittest.cc +++ b/src/lib/database/tests/database_connection_unittest.cc @@ -258,18 +258,24 @@ TEST(DatabaseConnectionTest, redactAccessStringNoPassword) { TEST(DatabaseConnection, toElementDbAccessStringValid) { const char* configs[] = { "{\n" - "\"type\": \"memfile\", \n" - "\"user\": \"user_str\", \n" - "\"name\": \"name_str\", \n" - "\"host\": \"host_str\", \n" - "\"password\": \"password_str\", \n" + "\"connect-timeout\" : 200, \n" "\"contact-points\": \"contact_str\", \n" + "\"host\": \"host_str\", \n" "\"keyspace\": \"keyspace_str\", \n" "\"lfc-interval\" : 100, \n" - "\"connect-timeout\" : 200, \n" - "\"port\" : 300, \n" + "\"host\": \"whatevah\", \n" + "\"max-reconnect-tries\": 5, \n" + "\"name\": \"name_str\", \n" + "\"password\": \"password_str\", \n" "\"persist\" : true, \n" - "\"readonly\" : false \n" + "\"port\" : 300, \n" + "\"readonly\" : false, \n" + "\"reconnect-wait-time\": 99, \n" + "\"request-timeout\" : 100, \n" + "\"tcp-keepalive\": 101, \n" + "\"tcp-nodelay\": false, \n" + "\"type\": \"memfile\", \n" + "\"user\": \"user_str\" \n" "}\n" }; diff --git a/src/lib/dhcpsrv/cfg_db_access.cc b/src/lib/dhcpsrv/cfg_db_access.cc index a51d338d03..333bd557eb 100644 --- a/src/lib/dhcpsrv/cfg_db_access.cc +++ b/src/lib/dhcpsrv/cfg_db_access.cc @@ -84,68 +84,5 @@ CfgDbAccess::getAccessString(const std::string& access_string) const { return (s.str()); } -ElementPtr -CfgDbAccess::toElementDbAccessString(const std::string& dbaccess) { - ElementPtr result = Element::createMap(); - // Code from DatabaseConnection::parse - if (dbaccess.empty()) { - return (result); - } - std::vector tokens; - boost::split(tokens, dbaccess, boost::is_any_of(std::string("\t "))); - BOOST_FOREACH(std::string token, tokens) { - size_t pos = token.find("="); - if (pos != std::string::npos) { - std::string keyword = token.substr(0, pos); - std::string value = token.substr(pos + 1); - if ((keyword == "lfc-interval") || - (keyword == "connect-timeout") || - (keyword == "request-timeout") || - (keyword == "port") || - (keyword == "max-reconnect-tries") || - (keyword == "reconnect-wait-time") || - (keyword == "tcp-keepalive")) { - // integer parameters - int64_t int_value; - try { - int_value = boost::lexical_cast(value); - result->set(keyword, Element::create(int_value)); - } catch (...) { - isc_throw(ToElementError, "invalid DB access " - << "integer parameter: " - << keyword << "=" << value); - } - } else if ((keyword == "persist") || - (keyword == "readonly") || - (keyword == "tcp-nodelay")) { - if (value == "true") { - result->set(keyword, Element::create(true)); - } else if (value == "false") { - result->set(keyword, Element::create(false)); - } else { - isc_throw(ToElementError, "invalid DB access " - << "boolean parameter: " - << keyword << "=" << value); - } - } else if ((keyword == "type") || - (keyword == "user") || - (keyword == "password") || - (keyword == "host") || - (keyword == "name") || - (keyword == "contact-points") || - (keyword == "keyspace")) { - result->set(keyword, Element::create(value)); - } else { - isc_throw(ToElementError, "unknown DB access parameter: " - << keyword << "=" << value); - } - } else { - isc_throw(ToElementError, "Cannot unparse " << token - << ", expected format is name=value"); - } - } - return (result); -} - } // end of isc::dhcp namespace } // end of isc namespace diff --git a/src/lib/dhcpsrv/tests/cfg_db_access_unittest.cc b/src/lib/dhcpsrv/tests/cfg_db_access_unittest.cc index 2b6098a4b3..e57a6793ec 100644 --- a/src/lib/dhcpsrv/tests/cfg_db_access_unittest.cc +++ b/src/lib/dhcpsrv/tests/cfg_db_access_unittest.cc @@ -196,62 +196,4 @@ TEST_F(CfgMySQLDbAccessTest, createManagers) { #endif -// Check that the toElementDbAccessString() handles all valid parameters -TEST(CfgDbAccess, toElementDbAccessStringValid) { - const char* configs[] = { - "{\n" - "\"type\": \"memfile\", \n" - "\"user\": \"user_str\", \n" - "\"name\": \"name_str\", \n" - "\"host\": \"host_str\", \n" - "\"password\": \"password_str\", \n" - "\"contact-points\": \"contact_str\", \n" - "\"keyspace\": \"keyspace_str\", \n" - "\"lfc-interval\" : 100, \n" - "\"connect-timeout\" : 200, \n" - "\"port\" : 300, \n" - "\"persist\" : true, \n" - "\"readonly\" : false \n" - "}\n" - }; - - db::DbAccessParser parser; - std::string access_str; - data::ConstElementPtr json_elements; - - ASSERT_NO_THROW(json_elements = data::Element::fromJSON(configs[0])); - ASSERT_NO_THROW(parser.parse(access_str, json_elements)); - - data::ElementPtr round_trip = CfgDbAccess::toElementDbAccessString(access_str); - - ASSERT_TRUE(json_elements->equals(*round_trip)); -} - -// Check that toElementDbAccessString() catches invalid parameters. -TEST(CfgDbAccess, toElementDbAccessStringInvalid) { - std::vector access_strs = { - "bogus-param=memfile", - "lfc-interval=not-an-integer", - "connect-timeout=not-an-integer", - "port=not-an-integer", - "persist=not-boolean", - "readonly=not-boolean" - }; - - for (auto access_str : access_strs) { - ASSERT_THROW(CfgDbAccess::toElementDbAccessString(access_str), - isc::ToElementError) - << "access string should have failed, string=[" - << access_str << "]"; - } -} - -// Check that toElementDbAccessString() handles empty access string -TEST(CfgDbAccess, toElementDbAccessStringEmpty) { - data::ConstElementPtr elements; - ASSERT_NO_THROW(elements = CfgDbAccess::toElementDbAccessString("")); - ASSERT_TRUE(elements); - ASSERT_EQ(0, elements->size()); -} - } // end of anonymous namespace