From: Francis Dupont Date: Tue, 10 Jan 2017 20:33:19 +0000 (+0100) Subject: [5096] Migrated to Simple (but cql is missing) X-Git-Tag: trac5119_base~4^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=36c0a44ad62e549e01ddab3d795fdc7f265458aa;p=thirdparty%2Fkea.git [5096] Migrated to Simple (but cql is missing) --- diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index 8a5d6a1212..cd8c1767d6 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -426,10 +426,7 @@ DhcpConfigParser* createGlobalDhcp4ConfigParser(const std::string& config_id, } else if ((config_id.compare("next-server") == 0)) { parser = new StringParser(config_id, globalContext()->string_values_); - } else if (config_id.compare("lease-database") == 0) { - parser = new DbAccessParser(config_id, DbAccessParser::LEASE_DB); - } else if (config_id.compare("hosts-database") == 0) { - parser = new DbAccessParser(config_id, DbAccessParser::HOSTS_DB); + // lease-database and hosts-database have been converted to SimpleParser already. } else if (config_id.compare("hooks-libraries") == 0) { parser = new HooksLibrariesParser(config_id); } else if (config_id.compare("echo-client-id") == 0) { @@ -572,7 +569,6 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) { ParserCollection independent_parsers; ParserPtr subnet_parser; ParserPtr iface_parser; - ParserPtr leases_parser; ParserPtr client_classes_parser; // Some of the parsers alter the state of the system in a way that can't @@ -620,6 +616,7 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) { const std::map& values_map = mutable_cfg->mapValue(); BOOST_FOREACH(config_pair, values_map) { + SrvConfigPtr srv_cfg = CfgMgr::instance().getStagingCfg(); if (config_pair.first == "option-def") { // This is converted to SimpleParser and is handled already above. @@ -628,14 +625,13 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) { if (config_pair.first == "option-data") { OptionDataListParser parser(AF_INET); - CfgOptionPtr cfg_option = CfgMgr::instance().getStagingCfg()->getCfgOption(); + CfgOptionPtr cfg_option = srv_cfg->getCfgOption(); parser.parse(cfg_option, config_pair.second); continue; } if (config_pair.first == "control-socket") { ControlSocketParser parser; - SrvConfigPtr srv_cfg = CfgMgr::instance().getStagingCfg(); parser.parse(*srv_cfg, config_pair.second); continue; } @@ -646,14 +642,27 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) { continue; } + // Please move at the end when migration will be finished. + if (config_pair.first == "lease-database") { + DbAccessParser parser(DbAccessParser::LEASE_DB); + CfgDbAccessPtr cfg_db_access = srv_cfg->getCfgDbAccess(); + parser.parse(cfg_db_access, config_pair.second); + continue; + } + + if (config_pair.first == "host-database") { + DbAccessParser parser(DbAccessParser::HOSTS_DB); + CfgDbAccessPtr cfg_db_access = srv_cfg->getCfgDbAccess(); + parser.parse(cfg_db_access, config_pair.second); + continue; + } + ParserPtr parser(createGlobalDhcp4ConfigParser(config_pair.first, config_pair.second)); LOG_DEBUG(dhcp4_logger, DBG_DHCP4_DETAIL, DHCP4_PARSER_CREATED) .arg(config_pair.first); if (config_pair.first == "subnet4") { subnet_parser = parser; - } else if (config_pair.first == "lease-database") { - leases_parser = parser; } else if (config_pair.first == "interfaces-config") { // The interface parser is independent from any other // parser and can be run here before any other parsers. @@ -699,15 +708,6 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) { // Setup the command channel. configureCommandChannel(); - // the leases database parser is the last to be run. - std::map::const_iterator leases_config = - values_map.find("lease-database"); - if (leases_config != values_map.end()) { - config_pair.first = "lease-database"; - leases_parser->build(leases_config->second); - leases_parser->commit(); - } - } catch (const isc::Exception& ex) { LOG_ERROR(dhcp4_logger, DHCP4_PARSER_FAIL) .arg(config_pair.first).arg(ex.what()); diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index 76aa12f32c..2a8994bc39 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -708,10 +708,7 @@ DhcpConfigParser* createGlobal6DhcpConfigParser(const std::string& config_id, } else if (config_id.compare("version") == 0) { parser = new StringParser(config_id, globalContext()->string_values_); - } else if (config_id.compare("lease-database") == 0) { - parser = new DbAccessParser(config_id, DbAccessParser::LEASE_DB); - } else if (config_id.compare("hosts-database") == 0) { - parser = new DbAccessParser(config_id, DbAccessParser::HOSTS_DB); + // lease-database and hosts-database have been converted to SimpleParser already. } else if (config_id.compare("hooks-libraries") == 0) { parser = new HooksLibrariesParser(config_id); } else if (config_id.compare("dhcp-ddns") == 0) { @@ -843,7 +840,6 @@ configureDhcp6Server(Dhcpv6Srv&, isc::data::ConstElementPtr config_set) { ParserCollection independent_parsers; ParserPtr subnet_parser; ParserPtr iface_parser; - ParserPtr leases_parser; ParserPtr client_classes_parser; // Some of the parsers alter state of the system that can't easily @@ -891,6 +887,7 @@ configureDhcp6Server(Dhcpv6Srv&, isc::data::ConstElementPtr config_set) { } BOOST_FOREACH(config_pair, values_map) { + SrvConfigPtr srv_config = CfgMgr::instance().getStagingCfg(); if (config_pair.first == "option-def") { // This is converted to SimpleParser and is handled already above. @@ -899,21 +896,20 @@ configureDhcp6Server(Dhcpv6Srv&, isc::data::ConstElementPtr config_set) { if (config_pair.first == "option-data") { OptionDataListParser parser(AF_INET6); - CfgOptionPtr cfg_option = CfgMgr::instance().getStagingCfg()->getCfgOption(); + CfgOptionPtr cfg_option = srv_config->getCfgOption(); parser.parse(cfg_option, config_pair.second); continue; } if (config_pair.first == "mac-sources") { MACSourcesListConfigParser parser; - CfgMACSource& mac_source = CfgMgr::instance().getStagingCfg()->getMACSources(); + CfgMACSource& mac_source = srv_config->getMACSources(); parser.parse(mac_source, config_pair.second); continue; } if (config_pair.first == "control-socket") { ControlSocketParser parser; - SrvConfigPtr srv_config = CfgMgr::instance().getStagingCfg(); parser.parse(*srv_config, config_pair.second); continue; } @@ -926,19 +922,32 @@ configureDhcp6Server(Dhcpv6Srv&, isc::data::ConstElementPtr config_set) { if (config_pair.first == "server-id") { DUIDConfigParser parser; - const CfgDUIDPtr& cfg = CfgMgr::instance().getStagingCfg()->getCfgDUID(); + const CfgDUIDPtr& cfg = srv_config->getCfgDUID(); parser.parse(cfg, config_pair.second); continue; } + // Please move at the end when migration will be finished. + if (config_pair.first == "lease-database") { + DbAccessParser parser(DbAccessParser::LEASE_DB); + CfgDbAccessPtr cfg_db_access = srv_config->getCfgDbAccess(); + parser.parse(cfg_db_access, config_pair.second); + continue; + } + + if (config_pair.first == "host-database") { + DbAccessParser parser(DbAccessParser::HOSTS_DB); + CfgDbAccessPtr cfg_db_access = srv_config->getCfgDbAccess(); + parser.parse(cfg_db_access, config_pair.second); + continue; + } + ParserPtr parser(createGlobal6DhcpConfigParser(config_pair.first, config_pair.second)); LOG_DEBUG(dhcp6_logger, DBG_DHCP6_DETAIL, DHCP6_PARSER_CREATED) .arg(config_pair.first); if (config_pair.first == "subnet6") { subnet_parser = parser; - } else if (config_pair.first == "lease-database") { - leases_parser = parser; } else if (config_pair.first == "hooks-libraries") { // Executing the commit will alter currently loaded hooks // libraries. Check if the supplied libraries are valid, @@ -985,15 +994,6 @@ configureDhcp6Server(Dhcpv6Srv&, isc::data::ConstElementPtr config_set) { // Setup the command channel. configureCommandChannel(); - // The lease database parser is the last to be run. - std::map::const_iterator leases_config = - values_map.find("lease-database"); - if (leases_config != values_map.end()) { - config_pair.first = "lease-database"; - leases_parser->build(leases_config->second); - leases_parser->commit(); - } - } catch (const isc::Exception& ex) { LOG_ERROR(dhcp6_logger, DHCP6_PARSER_FAIL) .arg(config_pair.first).arg(ex.what()); diff --git a/src/lib/dhcpsrv/parsers/dbaccess_parser.cc b/src/lib/dhcpsrv/parsers/dbaccess_parser.cc index 6b7fa51eec..18769f9c10 100644 --- a/src/lib/dhcpsrv/parsers/dbaccess_parser.cc +++ b/src/lib/dhcpsrv/parsers/dbaccess_parser.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2012-2016 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2012-2017 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -29,13 +30,14 @@ namespace dhcp { // Factory function to build the parser -DbAccessParser::DbAccessParser(const std::string&, DBType db_type) +DbAccessParser::DbAccessParser(DBType db_type) : values_(), type_(db_type) { } // Parse the configuration and check that the various keywords are consistent. void -DbAccessParser::build(isc::data::ConstElementPtr config_value) { +DbAccessParser::parse(CfgDbAccessPtr& cfg_db, + ConstElementPtr database_config) { // To cope with incremental updates, the strategy is: // 1. Take a copy of the stored keyword/value pairs. @@ -45,13 +47,16 @@ DbAccessParser::build(isc::data::ConstElementPtr config_value) { // 5. Save resulting database access string in the Configuration // Manager. + // Note only range checks can fail with a database_config from + // a flex/bison parser. + // 1. Take a copy of the stored keyword/value pairs. std::map values_copy = values_; int64_t lfc_interval = 0; int64_t timeout = 0; // 2. Update the copy with the passed keywords. - BOOST_FOREACH(ConfigPair param, config_value->mapValue()) { + BOOST_FOREACH(ConfigPair param, database_config->mapValue()) { try { if ((param.first == "persist") || (param.first == "readonly")) { values_copy[param.first] = (param.second->boolValue() ? @@ -86,27 +91,30 @@ DbAccessParser::build(isc::data::ConstElementPtr config_value) { isc_throw(TypeKeywordMissing, (type_ == LEASE_DB ? "lease" : "host") << " database access parameters must " "include the keyword 'type' to determine type of database " - "to be accessed (" << config_value->getPosition() << ")"); + "to be accessed (" << database_config->getPosition() << ")"); } // b. Check if the 'type' keyword known and throw an exception if not. string dbtype = type_ptr->second; - if ((dbtype != "memfile") && (dbtype != "mysql") && (dbtype != "postgresql") && (dbtype != "cql")) { + if ((dbtype != "memfile") && + (dbtype != "mysql") && + (dbtype != "postgresql") && + (dbtype != "cql")) { isc_throw(BadValue, "unknown backend database type: " << dbtype - << " (" << config_value->getPosition() << ")"); + << " (" << database_config->getPosition() << ")"); } - // c. Check that the lfc-interval is a number and it is within a resonable - // range. - if ((lfc_interval < 0) || (lfc_interval > std::numeric_limits::max())) { + // c. Check that the lfc-interval is within a reasonable range. + if ((lfc_interval < 0) || + (lfc_interval > std::numeric_limits::max())) { isc_throw(BadValue, "lfc-interval value: " << lfc_interval << " is out of range, expected value: 0.." << std::numeric_limits::max()); } - // d. Check that the timeout is a number and it is within a resonable - // range. - if ((timeout < 0) || (timeout > std::numeric_limits::max())) { + // d. Check that the timeout is within a reasonable range. + if ((timeout < 0) || + (timeout > std::numeric_limits::max())) { isc_throw(BadValue, "timeout value: " << timeout << " is out of range, expected value: 0.." << std::numeric_limits::max()); @@ -119,7 +127,6 @@ DbAccessParser::build(isc::data::ConstElementPtr config_value) { values_.swap(values_copy); // 5. Save the database access string in the Configuration Manager. - CfgDbAccessPtr cfg_db = CfgMgr::instance().getStagingCfg()->getCfgDbAccess(); if (type_ == LEASE_DB) { cfg_db->setLeaseDbAccessString(getDbAccessString()); @@ -152,11 +159,5 @@ DbAccessParser::getDbAccessString() const { return (dbaccess); } -// Commit the changes - reopen the database with the new parameters -void -DbAccessParser::commit() { -} - }; // namespace dhcp }; // namespace isc - diff --git a/src/lib/dhcpsrv/parsers/dbaccess_parser.h b/src/lib/dhcpsrv/parsers/dbaccess_parser.h index 6dc7e8c905..ed894d32d3 100644 --- a/src/lib/dhcpsrv/parsers/dbaccess_parser.h +++ b/src/lib/dhcpsrv/parsers/dbaccess_parser.h @@ -1,4 +1,4 @@ -// Copyright (C) 2012-2016 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2012-2017 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -8,8 +8,8 @@ #define DBACCESS_PARSER_H #include -#include -#include +#include +#include #include #include @@ -35,7 +35,7 @@ public: /// /// Only the "type" sub-element is mandatory: the remaining sub-elements /// depend on the database chosen. -class DbAccessParser: public DhcpConfigParser { +class DbAccessParser: public isc::data::SimpleParser { public: /// @brief Specifies the database type @@ -52,58 +52,36 @@ public: /// @brief Constructor /// - /// @param param_name Name of the parameter under which the database - /// access details are held. /// @param db_type Specifies database type (lease or hosts) - DbAccessParser(const std::string& param_name, DBType db_type); + DbAccessParser(DBType db_type); /// The destructor. virtual ~DbAccessParser() {} - /// @brief Prepare configuration value. + /// @brief Parse configuration value. /// /// Parses the set of strings forming the database access specification and /// checks that all are OK. In particular it checks: /// /// - "type" is "memfile", "mysql" or "postgresql" /// - "lfc-interval" is a number from the range of 0 to 4294967295. - /// - "timeout" is a number from the range of 0 to 4294967295. + /// - "connect-timeout" is a number from the range of 0 to 4294967295. /// /// Once all has been validated, constructs the database access string /// expected by the lease manager. /// - /// @param config_value The configuration value for the "lease-database" + /// @param cfg_db The configuration where the access string will be set + /// @param database_config The configuration value for the "*-database" /// identifier. /// /// @throw isc::BadValue The 'type' keyword contains an unknown database /// type. /// @throw isc::dhcp::MissingTypeKeyword The 'type' keyword is missing from /// the list of database access keywords. - virtual void build(isc::data::ConstElementPtr config_value); + void parse(isc::dhcp::CfgDbAccessPtr& cfg_db, + isc::data::ConstElementPtr database_config); - /// @brief This method is no-op. - virtual void commit(); - - /// @brief Factory method to create parser - /// - /// Creates an instance of this parser. - /// - /// @param param_name Name of the parameter used to access the - /// configuration. - /// - /// @return Pointer to a DbAccessParser. The caller is responsible for - /// destroying the parser after use. - static DhcpConfigParser* factory(const std::string& param_name) { - if (param_name == "lease-database") { - return (new DbAccessParser(param_name, DbAccessParser::LEASE_DB)); - } else if (param_name == "hosts-database") { - return (new DbAccessParser(param_name, DbAccessParser::HOSTS_DB)); - } else { - isc_throw(BadValue, "Unexpected parameter name (" << param_name - << ") passed to DbAccessParser::factory"); - } - } protected: /// @brief Get database access parameters @@ -118,6 +96,7 @@ protected: return (values_); } + /// @brief Construct database access string /// /// Constructs the database access string from the stored parameters. @@ -125,6 +104,7 @@ protected: /// @return Database access string std::string getDbAccessString() const; + private: std::map values_; ///< Stored parameter values diff --git a/src/lib/dhcpsrv/tests/dbaccess_parser_unittest.cc b/src/lib/dhcpsrv/tests/dbaccess_parser_unittest.cc index e71dc2530f..674b78cc39 100644 --- a/src/lib/dhcpsrv/tests/dbaccess_parser_unittest.cc +++ b/src/lib/dhcpsrv/tests/dbaccess_parser_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2012-2016 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2012-2017 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -43,7 +43,7 @@ public: /// (the last in particular). /// /// As some of the tests have the side-effect of altering the logging - /// settings (when the parser's "build" method is called), ensure that + /// settings (when the parser's "parse" method is called), ensure that /// the logging is reset to the default after each test completes. ~DbAccessParserTest() { LeaseMgrFactory::destroy(); @@ -194,14 +194,20 @@ public: /// @brief Constructor /// /// @brief Keyword/value collection of database access parameters - TestDbAccessParser(const std::string& param_name, DbAccessParser::DBType type) - : DbAccessParser(param_name, type) + TestDbAccessParser(DbAccessParser::DBType type) + : DbAccessParser(type) {} /// @brief Destructor virtual ~TestDbAccessParser() {} + /// @brief Parse configuration value + void parse(ConstElementPtr database_config) { + CfgDbAccessPtr cfg_db(new CfgDbAccess()); + DbAccessParser::parse(cfg_db, database_config); + } + /// Allow use of superclass's protected functions. using DbAccessParser::getDbAccessParameters; using DbAccessParser::getDbAccessString; @@ -236,8 +242,8 @@ TEST_F(DbAccessParserTest, validTypeMemfile) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_NO_THROW(parser.build(json_elements)); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_NO_THROW(parser.parse(json_elements)); checkAccessString("Valid memfile", parser.getDbAccessParameters(), config); } @@ -252,8 +258,8 @@ TEST_F(DbAccessParserTest, emptyKeyword) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_NO_THROW(parser.build(json_elements)); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_NO_THROW(parser.parse(json_elements)); checkAccessString("Valid memfile", parser.getDbAccessParameters(), config); } @@ -269,8 +275,8 @@ TEST_F(DbAccessParserTest, persistV4Memfile) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_NO_THROW(parser.build(json_elements)); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_NO_THROW(parser.parse(json_elements)); checkAccessString("Valid memfile", parser.getDbAccessParameters(), config); @@ -288,8 +294,8 @@ TEST_F(DbAccessParserTest, persistV6Memfile) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_NO_THROW(parser.build(json_elements)); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_NO_THROW(parser.parse(json_elements)); checkAccessString("Valid memfile", parser.getDbAccessParameters(), config); @@ -307,8 +313,8 @@ TEST_F(DbAccessParserTest, validLFCInterval) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_NO_THROW(parser.build(json_elements)); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_NO_THROW(parser.parse(json_elements)); checkAccessString("Valid LFC Interval", parser.getDbAccessParameters(), config); } @@ -325,8 +331,8 @@ TEST_F(DbAccessParserTest, negativeLFCInterval) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_THROW(parser.build(json_elements), BadValue); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_THROW(parser.parse(json_elements), BadValue); } // This test checks that the parser rejects the too large (greater than @@ -341,8 +347,8 @@ TEST_F(DbAccessParserTest, largeLFCInterval) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_THROW(parser.build(json_elements), BadValue); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_THROW(parser.parse(json_elements), BadValue); } // This test checks that the parser accepts the valid value of the @@ -357,8 +363,8 @@ TEST_F(DbAccessParserTest, validTimeout) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_NO_THROW(parser.build(json_elements)); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_NO_THROW(parser.parse(json_elements)); checkAccessString("Valid timeout", parser.getDbAccessParameters(), config); } @@ -375,8 +381,8 @@ TEST_F(DbAccessParserTest, negativeTimeout) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_THROW(parser.build(json_elements), BadValue); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_THROW(parser.parse(json_elements), BadValue); } // This test checks that the parser rejects a too large (greater than @@ -391,8 +397,8 @@ TEST_F(DbAccessParserTest, largeTimeout) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_THROW(parser.build(json_elements), BadValue); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_THROW(parser.parse(json_elements), BadValue); } // Check that the parser works with a valid MySQL configuration @@ -408,8 +414,8 @@ TEST_F(DbAccessParserTest, validTypeMysql) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_NO_THROW(parser.build(json_elements)); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_NO_THROW(parser.parse(json_elements)); checkAccessString("Valid mysql", parser.getDbAccessParameters(), config); } @@ -425,20 +431,8 @@ TEST_F(DbAccessParserTest, missingTypeKeyword) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_THROW(parser.build(json_elements), TypeKeywordMissing); -} - -// Check that the factory function works. -TEST_F(DbAccessParserTest, factory) { - - // Check that the parser is built through the factory. - boost::scoped_ptr parser( - DbAccessParser::factory("lease-database") - ); - EXPECT_TRUE(parser); - DbAccessParser* dbap = dynamic_cast(parser.get()); - EXPECT_NE(static_cast(NULL), dbap); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_THROW(parser.parse(json_elements), TypeKeywordMissing); } // Check reconfiguration. Checks that incremental changes applied to the @@ -485,7 +479,7 @@ TEST_F(DbAccessParserTest, incrementalChanges) { "name", "keatest", NULL}; - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); // First configuration string should cause a representation of that string // to be held. @@ -493,7 +487,7 @@ TEST_F(DbAccessParserTest, incrementalChanges) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - EXPECT_NO_THROW(parser.build(json_elements)); + EXPECT_NO_THROW(parser.parse(json_elements)); checkAccessString("Initial configuration", parser.getDbAccessParameters(), config1); @@ -503,7 +497,7 @@ TEST_F(DbAccessParserTest, incrementalChanges) { json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - EXPECT_NO_THROW(parser.build(json_elements)); + EXPECT_NO_THROW(parser.parse(json_elements)); checkAccessString("Subsequent configuration", parser.getDbAccessParameters(), config2); @@ -513,7 +507,7 @@ TEST_F(DbAccessParserTest, incrementalChanges) { json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - EXPECT_NO_THROW(parser.build(json_elements)); + EXPECT_NO_THROW(parser.parse(json_elements)); checkAccessString("Incremental configuration", parser.getDbAccessParameters(), config3); @@ -523,7 +517,7 @@ TEST_F(DbAccessParserTest, incrementalChanges) { json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - EXPECT_THROW(parser.build(json_elements), BadValue); + EXPECT_THROW(parser.parse(json_elements), BadValue); checkAccessString("Incompatible incremental change", parser.getDbAccessParameters(), config3); @@ -533,7 +527,7 @@ TEST_F(DbAccessParserTest, incrementalChanges) { json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - EXPECT_NO_THROW(parser.build(json_elements)); + EXPECT_NO_THROW(parser.parse(json_elements)); checkAccessString("Compatible incremental change", parser.getDbAccessParameters(), config4); } @@ -549,8 +543,8 @@ TEST_F(DbAccessParserTest, getDbAccessString) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_NO_THROW(parser.build(json_elements)); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_NO_THROW(parser.parse(json_elements)); // Get the database access string std::string dbaccess = parser.getDbAccessString(); @@ -575,8 +569,8 @@ TEST_F(DbAccessParserTest, validReadOnly) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_NO_THROW(parser.build(json_elements)); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_NO_THROW(parser.parse(json_elements)); checkAccessString("Valid readonly parameter", parser.getDbAccessParameters(), @@ -597,8 +591,8 @@ TEST_F(DbAccessParserTest, invalidReadOnly) { ConstElementPtr json_elements = Element::fromJSON(json_config); EXPECT_TRUE(json_elements); - TestDbAccessParser parser("lease-database", DbAccessParser::LEASE_DB); - EXPECT_THROW(parser.build(json_elements), BadValue); + TestDbAccessParser parser(DbAccessParser::LEASE_DB); + EXPECT_THROW(parser.parse(json_elements), BadValue); }