// Copyright (C) 2019-2021 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 // file, You can obtain one at http://mozilla.org/MPL/2.0/. #ifndef TEST_CONFIG_BACKEND_DHCP6 #define TEST_CONFIG_BACKEND_DHCP6 #include #include #include #include #include #include #include #include #include #include namespace isc { namespace dhcp { namespace test { /// @brief Test config backend that implements all of the DHCPv6 API calls /// /// This backend should be used for unit testing the DHCPv6 server and the /// commands which manipulate the configuration information stored in the /// database. /// /// Server selectors supported by this test configuration backend are a /// superset of the server selectors allowed by the API. Therefore, if /// additional server selectors are allowed by the API in the future /// this backend should not require any additional changes to support them. /// /// This backend stores server configuration information in memory. class TestConfigBackendDHCPv6 : public TestConfigBackend { public: /// @brief Constructor /// /// @param params Database connection parameters. TestConfigBackendDHCPv6(const db::DatabaseConnection::ParameterMap& params) : TestConfigBackend(params) { } /// @brief virtual Destructor. virtual ~TestConfigBackendDHCPv6(){}; /// @brief Registers the backend type with the given backend manager /// /// @param mgr configuration manager to register with /// @brief db_type back end type - Note you will need to /// use the same value here as you do when creating backend instances. static bool registerBackendType(ConfigBackendDHCPv6Mgr& mgr, const std::string& db_type); /// @brief Unregisters the backend from the given backend manager /// /// @param mgr configuration manager to unregister from /// @brief db_type back end type - Note you will need to /// use the same value here as you do when registering the backend type static void unregisterBackendType(ConfigBackendDHCPv6Mgr& mgr, const std::string& db_type); /// @brief Retrieves a single subnet by subnet_prefix. /// /// @param server_selector Server selector. /// @param subnet_prefix Prefix of the subnet to be retrieved. /// @return Pointer to the retrieved subnet or NULL if not found. virtual Subnet6Ptr getSubnet6(const db::ServerSelector& server_selector, const std::string& subnet_prefix) const; /// @brief Retrieves a single subnet by subnet identifier. /// /// @param server_selector Server selector. /// @param subnet_id Identifier of a subnet to be retrieved. /// @return Pointer to the retrieved subnet or NULL if not found. virtual Subnet6Ptr getSubnet6(const db::ServerSelector& server_selector, const SubnetID& subnet_id) const; /// @brief Retrieves all subnets. /// /// @param server_selector Server selector. /// @return Collection of subnets or empty collection if no subnet found. virtual Subnet6Collection getAllSubnets6(const db::ServerSelector& server_selector) const; /// @brief Retrieves subnets modified after specified time. /// /// @param server_selector Server selector. /// @param modification_time Lower bound subnet modification time. /// @return Collection of subnets or empty collection if no subnet found. virtual Subnet6Collection getModifiedSubnets6(const db::ServerSelector& server_selector, const boost::posix_time::ptime& modification_time) const; /// @brief Retrieves all subnets belonging to a specified shared network. /// /// @param server_selector Server selector. /// @param shared_network_name Name of the shared network for which the /// subnets should be retrieved. /// @return Collection of subnets or empty collection if no subnet found. virtual Subnet6Collection getSharedNetworkSubnets6(const db::ServerSelector& server_selector, const std::string& shared_network_name) const; /// @brief Retrieves shared network by name. /// /// @param server_selector Server selector. /// @param name Name of the shared network to be retrieved. /// @return Pointer to the shared network or NULL if not found. virtual SharedNetwork6Ptr getSharedNetwork6(const db::ServerSelector& server_selector, const std::string& name) const; /// @brief Retrieves all shared networks. /// /// @param server_selector Server selector. /// @return Collection of shared network or empty collection if /// no shared network found. virtual SharedNetwork6Collection getAllSharedNetworks6(const db::ServerSelector& server_selector) const; /// @brief Retrieves shared networks modified after specified time. /// /// @param server_selector Server selector. /// @param modification_time Lower bound shared network modification time. /// @return Collection of shared network or empty collection if /// no shared network found. virtual SharedNetwork6Collection getModifiedSharedNetworks6(const db::ServerSelector& server_selector, const boost::posix_time::ptime& modification_time) const; /// @brief Retrieves single option definition by code and space. /// /// @param server_selector Server selector. /// @param code Code of the option to be retrieved. /// @param space Option space of the option to be retrieved. /// @return Pointer to the option definition or NULL if not found. virtual OptionDefinitionPtr getOptionDef6(const db::ServerSelector& server_selector, const uint16_t code, const std::string& space) const; /// @brief Retrieves all option definitions. /// /// @param server_selector Server selector. /// @return Collection of option definitions or empty collection if /// no option definition found. virtual OptionDefContainer getAllOptionDefs6(const db::ServerSelector& server_selector) const; /// @brief Retrieves option definitions modified after specified time. /// /// @param server_selector Server selector. /// @param modification_time Lower bound option definition modification /// time. /// @return Collection of option definitions or empty collection if /// no option definition found. virtual OptionDefContainer getModifiedOptionDefs6(const db::ServerSelector& server_selector, const boost::posix_time::ptime& modification_time) const; /// @brief Retrieves single option by code and space. /// /// @param server_selector Server selector. /// @return Pointer to the retrieved option descriptor or null if /// no option was found. virtual OptionDescriptorPtr getOption6(const db::ServerSelector& server_selector, const uint16_t code, const std::string& space) const; /// @brief Retrieves all global options. /// /// @param server_selector Server selector. /// @return Collection of global options or empty collection if no /// option found. virtual OptionContainer getAllOptions6(const db::ServerSelector& server_selector) const; /// @brief Retrieves option modified after specified time. /// /// @param selector Server selector. /// @param modification_time Lower bound option modification time. /// @return Collection of global options or empty collection if no /// option found. virtual OptionContainer getModifiedOptions6(const db::ServerSelector& server_selector, const boost::posix_time::ptime& modification_time) const; /// @brief Retrieves global parameter value. /// /// @param server_selector Server selector. /// @param name Name of the global parameter to be retrieved. /// @return Value of the global parameter or null if parameter doesn't /// exist. virtual data::StampedValuePtr getGlobalParameter6(const db::ServerSelector& server_selector, const std::string& name) const; /// @brief Retrieves all global parameters. /// /// @param backend_selector Backend selector. /// @return Collection of global parameters. virtual data::StampedValueCollection getAllGlobalParameters6(const db::ServerSelector& server_selector) const; /// @brief Retrieves global parameters modified after specified time. /// /// @param selector Server selector. /// @return Collection of modified global parameters. virtual data::StampedValueCollection getModifiedGlobalParameters6(const db::ServerSelector& server_selector, const boost::posix_time::ptime& modification_time) const; /// @brief Retrieves a client class by name. /// /// @param server_selector Server selector. /// @param name Client class name. /// @return Pointer to the retrieved client class. virtual ClientClassDefPtr getClientClass6(const db::ServerSelector& selector, const std::string& name) const; /// @brief Retrieves all client classes. /// /// @param selector Server selector. /// @return Collection of client classes. virtual ClientClassDictionary getAllClientClasses6(const db::ServerSelector& selector) const; /// @brief Retrieves client classes modified after specified time. /// /// @param selector Server selector. /// @param modification_time Modification time. /// @return Collection of client classes. virtual ClientClassDictionary getModifiedClientClasses6(const db::ServerSelector& selector, const boost::posix_time::ptime& modification_time) const; /// @brief Retrieves the most recent audit entries. /// /// @param server_selector Server selector. /// @param modification_time Timestamp being a lower limit for the returned /// result set, i.e. entries later than specified time are returned. /// @param modification_id Identifier being a lower limit for the returned /// result set, used when two (or more) entries have the same /// modification_time. /// @return Collection of audit entries. virtual db::AuditEntryCollection getRecentAuditEntries(const db::ServerSelector& server_selector, const boost::posix_time::ptime& modification_time, const uint64_t& modification_id) const; /// @brief Retrieves all servers. /// /// @return Collection of servers from the backend. virtual db::ServerCollection getAllServers6() const; /// @brief Retrieves a server. /// /// @param server_tag Tag of the server to be retrieved. /// @return Pointer to the server instance or null pointer if no server /// with the particular tag was found. virtual db::ServerPtr getServer6(const data::ServerTag& server_tag) const; /// @brief Creates or updates a subnet. /// /// @param server_selector Server selector. /// @param subnet Subnet to be added or updated. virtual void createUpdateSubnet6(const db::ServerSelector& server_selector, const Subnet6Ptr& subnet); /// @brief Creates or updates a shared network. /// /// @param server_selector Server selector. /// @param shared_network Shared network to be added or updated. virtual void createUpdateSharedNetwork6(const db::ServerSelector& server_selector, const SharedNetwork6Ptr& shared_network); /// @brief Creates or updates an option definition. /// /// @param server_selector Server selector. /// @param option_def Option definition to be added or updated. virtual void createUpdateOptionDef6(const db::ServerSelector& server_selector, const OptionDefinitionPtr& option_def); /// @brief Creates or updates global option. /// /// @param server_selector Server selector. /// @param option Option to be added or updated. virtual void createUpdateOption6(const db::ServerSelector& server_selector, const OptionDescriptorPtr& option); /// @brief Creates or updates shared network level option. /// /// @param selector Server selector. /// @param shared_network_name Name of a shared network to which option /// belongs. /// @param option Option to be added or updated. virtual void createUpdateOption6(const db::ServerSelector& server_selector, const std::string& shared_network_name, const OptionDescriptorPtr& option); /// @brief Creates or updates subnet level option. /// /// @param server_selector Server selector. /// @param subnet_id Identifier of a subnet to which option belongs. /// @param option Option to be added or updated. virtual void createUpdateOption6(const db::ServerSelector& server_selector, const SubnetID& subnet_id, const OptionDescriptorPtr& option); /// @brief Creates or updates pool level option. /// /// @param server_selector Server selector. /// @param pool_start_address Lower bound address of the pool to which /// the option belongs. /// @param pool_end_address Upper bound address of the pool to which the /// option belongs. /// @param option Option to be added or updated. virtual void createUpdateOption6(const db::ServerSelector& server_selector, const asiolink::IOAddress& pool_start_address, const asiolink::IOAddress& pool_end_address, const OptionDescriptorPtr& option); /// @brief Creates or updates pd pool level option. /// /// @param server_selector Server selector. /// @param pd_pool_prefix Address part of the prefix of the pd pool /// to which the option belongs. /// @param pd_pool_prefix_length Prefix length of the pd pool to which /// the option belongs. /// @param option Option to be added or updated. virtual void createUpdateOption6(const db::ServerSelector& server_selector, const asiolink::IOAddress& pd_pool_prefix, const uint8_t pd_pool_prefix_length, const OptionDescriptorPtr& option); /// @brief Creates or updates global parameter. /// /// @param server_selector Server selector. /// @param value Value of the global parameter. virtual void createUpdateGlobalParameter6(const db::ServerSelector& server_selector, const data::StampedValuePtr& value); /// @brief Creates or updates DHCPv6 client class. /// /// @param server_selector Server selector. /// @param client_class Client class to be added or updated. /// @param follow_class_name name of the class after which the /// new or updated class should be positioned. An empty value /// causes the class to be appended at the end of the class /// hierarchy. virtual void createUpdateClientClass6(const db::ServerSelector& server_selector, const ClientClassDefPtr& client_class, const std::string& follow_class_name); /// @brief Creates or updates a server. /// /// @param server Instance of the server to be stored. virtual void createUpdateServer6(const db::ServerPtr& server); /// @brief Deletes subnet by prefix. /// /// @param server_selector Server selector. /// @param subnet_prefix Prefix of the subnet to be deleted. /// @return Number of deleted subnets. virtual uint64_t deleteSubnet6(const db::ServerSelector& server_selector, const std::string& subnet_prefix); /// @brief Deletes subnet by identifier. /// /// @param server_selector Server selector. /// @param subnet_id Identifier of the subnet to be deleted. /// @return Number of deleted subnets. virtual uint64_t deleteSubnet6(const db::ServerSelector& server_selector, const SubnetID& subnet_id); /// @brief Deletes all subnets. /// /// @param server_selector Server selector. /// @return Number of deleted subnets. virtual uint64_t deleteAllSubnets6(const db::ServerSelector& server_selector); /// @brief Deletes all subnets belonging to a specified shared network. /// /// @param server_selector Server selector. /// @param shared_network_name Name of the shared network for which the /// subnets should be deleted. /// @return Number of deleted subnets. virtual uint64_t deleteSharedNetworkSubnets6(const db::ServerSelector& server_selector, const std::string& shared_network_name); /// @brief Deletes shared network by name. /// /// @param server_selector Server selector. /// @param name Name of the shared network to be deleted. /// @return Number of deleted shared networks.. virtual uint64_t deleteSharedNetwork6(const db::ServerSelector& server_selector, const std::string& name); /// @brief Deletes all shared networks. /// /// @param server_selector Server selector. /// @return Number of deleted shared networks. virtual uint64_t deleteAllSharedNetworks6(const db::ServerSelector& server_selector); /// @brief Deletes option definition. /// /// @param server_selector Server selector. /// @param code Code of the option to be deleted. /// @param space Option space of the option to be deleted. /// @return Number of deleted option definitions. virtual uint64_t deleteOptionDef6(const db::ServerSelector& server_selector, const uint16_t code, const std::string& space); /// @brief Deletes all option definitions. /// /// @param server_selector Server selector. /// @return Number of deleted option definitions. virtual uint64_t deleteAllOptionDefs6(const db::ServerSelector& server_selector); /// @brief Deletes global option. /// /// @param server_selector Server selector. /// @param code Code of the option to be deleted. /// @param space Option space of the option to be deleted. /// @return Number of deleted options. virtual uint64_t deleteOption6(const db::ServerSelector& server_selector, const uint16_t code, const std::string& space); /// @brief Deletes shared network level option. /// /// @param selector Server selector. /// @param shared_network_name Name of the shared network which option /// belongs to. /// @param code Code of the option to be deleted. /// @param space Option space of the option to be deleted. virtual uint64_t deleteOption6(const db::ServerSelector& server_selector, const std::string& shared_network_name, const uint16_t code, const std::string& space); /// @brief Deletes subnet level option. /// /// @param server_selector Server selector. /// @param subnet_id Identifier of the subnet to which deleted option /// belongs. /// @param code Code of the deleted option. /// @param space Option space of the deleted option. /// @return Number of deleted options. virtual uint64_t deleteOption6(const db::ServerSelector& server_selector, const SubnetID& subnet_id, const uint16_t code, const std::string& space); /// @brief Deletes pool level option. /// /// @param server_selector Server selector. /// @param pool_start_address Lower bound address of the pool to which /// deleted option belongs. /// @param pool_end_address Upper bound address of the pool to which the /// deleted option belongs. /// @param code Code of the deleted option. /// @param space Option space of the deleted option. /// @return Number of deleted options. virtual uint64_t deleteOption6(const db::ServerSelector& server_selector, const asiolink::IOAddress& pool_start_address, const asiolink::IOAddress& pool_end_address, const uint16_t code, const std::string& space); /// @brief Deletes pd pool level option. /// /// @param server_selector Server selector. /// @param pd_pool_prefix Address part of the prefix of the pd pool /// to which the deleted option belongs. /// @param pd_pool_prefix_length Prefix length of the pd pool to which /// the deleted option belongs. /// @param code Code of the deleted option. /// @param space Option space of the deleted option. /// @return Number of deleted options. virtual uint64_t deleteOption6(const db::ServerSelector& server_selector, const asiolink::IOAddress& pd_pool_prefix, const uint8_t pd_pool_prefix_length, const uint16_t code, const std::string& space); /// @brief Deletes global parameter. /// /// @param server_selector Server selector. /// @param name Name of the global parameter to be deleted. /// @return Number of deleted global parameters. virtual uint64_t deleteGlobalParameter6(const db::ServerSelector& server_selector, const std::string& name); /// @brief Deletes all global parameters. /// /// @param server_selector Server selector. /// @return Number of deleted global parameters. virtual uint64_t deleteAllGlobalParameters6(const db::ServerSelector& server_selector); /// @brief Deletes DHCPv6 client class. /// /// @param server_selector Server selector. /// @param name Name of the class to be deleted. /// @return Number of deleted client classes. virtual uint64_t deleteClientClass6(const db::ServerSelector& server_selector, const std::string& name); /// @brief Deletes all client classes. /// /// @param server_selector Server selector. /// @return Number of deleted client classes. virtual uint64_t deleteAllClientClasses6(const db::ServerSelector& server_selector); /// @brief Deletes a server from the backend. /// /// @param server_tag Tag of the server to be deleted. /// @return Number of deleted servers. virtual uint64_t deleteServer6(const data::ServerTag& server_tag); /// @brief Deletes all servers from the backend except the logical /// server 'all'. /// /// @return Number of deleted servers. virtual uint64_t deleteAllServers6(); /// @{ /// @brief Containers used to house the "database" entries Subnet6Collection subnets_; SharedNetwork6Collection shared_networks_; OptionDefContainer option_defs_; OptionContainer options_; data::StampedValueCollection globals_; std::vector classes_; db::ServerCollection servers_; /// @} }; /// @brief Shared pointer to the @c TestConfigBackend. typedef boost::shared_ptr TestConfigBackendDHCPv6Ptr; } // namespace test } // namespace dhcp } // namespace isc #endif // TEST_CONFIG_BACKEND_DHCP6