Commit 892ab41d authored by Marcin Siodelski's avatar Marcin Siodelski

[#93,!63] Throw exception if the server selector is unassigned.

parent 78a457e6
......@@ -185,7 +185,10 @@ public:
void createUpdateGlobalParameter4(const db::ServerSelector& server_selector,
const StampedValuePtr& value) {
MySqlTransaction transaction(conn_);
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "creating or updating global parameter");
......@@ -197,6 +200,8 @@ public:
MySqlBinding::createString(value->getName())
};
MySqlTransaction transaction(conn_);
// Try to update the existing row.
if (conn_.updateDeleteQuery(MySqlConfigBackendDHCPv4Impl::UPDATE_GLOBAL_PARAMETER4,
in_bindings) == 0) {
......@@ -656,6 +661,11 @@ public:
void createUpdateSubnet4(const ServerSelector& server_selector,
const Subnet4Ptr& subnet) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "creating or updating subnet");
// Convert DHCPv4o6 interface id to text.
......@@ -984,6 +994,12 @@ public:
/// network doesn't exist.
SharedNetwork4Ptr getSharedNetwork4(const ServerSelector& server_selector,
const std::string& name) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "fetching shared network");
MySqlBindingCollection in_bindings = {
......@@ -1043,6 +1059,12 @@ public:
/// @param subnet Pointer to the shared network to be inserted or updated.
void createUpdateSharedNetwork4(const ServerSelector& server_selector,
const SharedNetwork4Ptr& shared_network) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "creating or updating shared network");
MySqlBindingCollection in_bindings = {
......@@ -1142,6 +1164,11 @@ public:
void createUpdateOption4(const ServerSelector& server_selector,
const OptionDescriptorPtr& option) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "creating or updating global option");
MySqlBindingCollection in_bindings = {
......@@ -1187,6 +1214,11 @@ public:
const SubnetID& subnet_id,
const OptionDescriptorPtr& option) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector,
"creating or updating subnet level option");
......@@ -1258,6 +1290,11 @@ public:
const uint64_t pool_id,
const OptionDescriptorPtr& option) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector,
"creating or updating pool level option");
......@@ -1304,6 +1341,12 @@ public:
void createUpdateOption4(const ServerSelector& server_selector,
const std::string& shared_network_name,
const OptionDescriptorPtr& option) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "creating or updating shared"
" network level option");
......@@ -1354,6 +1397,12 @@ public:
OptionDefinitionPtr getOptionDef4(const ServerSelector& server_selector,
const uint16_t code,
const std::string& space) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "fetching option definition");
OptionDefContainer option_defs;
......@@ -1418,6 +1467,12 @@ public:
OptionDescriptorPtr
getOption4(const ServerSelector& server_selector, const uint16_t code,
const std::string& space) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "fetching global option");
OptionContainer options;
......@@ -1488,6 +1543,12 @@ public:
const SubnetID& subnet_id,
const uint16_t code,
const std::string& space) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "fetching subnet level option");
OptionContainer options;
......@@ -1517,6 +1578,12 @@ public:
const uint64_t pool_id,
const uint16_t code,
const std::string& space) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "fetching pool level option");
OptionContainer options;
......@@ -1546,6 +1613,12 @@ public:
const std::string& shared_network_name,
const uint16_t code,
const std::string& space) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "fetching shared network"
" level option");
......@@ -1568,6 +1641,12 @@ public:
/// @param option_def Pointer to the option definition to be inserted or updated.
void createUpdateOptionDef4(const ServerSelector& server_selector,
const OptionDefinitionPtr& option_def) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "creating or updating option definition");
ElementPtr record_types = Element::createList();
......@@ -1645,6 +1724,12 @@ public:
uint64_t deleteOptionDef4(const ServerSelector& server_selector,
const uint16_t code,
const std::string& space) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "deleting option definition");
MySqlBindingCollection in_bindings = {
......@@ -1666,6 +1751,12 @@ public:
uint64_t deleteOption4(const ServerSelector& server_selector,
const uint16_t code,
const std::string& space) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "deleting global option");
MySqlBindingCollection in_bindings = {
......@@ -1690,6 +1781,12 @@ public:
const SubnetID& subnet_id,
const uint16_t code,
const std::string& space) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "deleting option for a subnet");
MySqlBindingCollection in_bindings = {
......@@ -1716,6 +1813,12 @@ public:
const IOAddress& pool_end_address,
const uint16_t code,
const std::string& space) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "deleting option for a pool");
MySqlBindingCollection in_bindings = {
......@@ -1743,6 +1846,12 @@ public:
const std::string& shared_network_name,
const uint16_t code,
const std::string& space) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "deleting option for a shared network");
MySqlBindingCollection in_bindings = {
......@@ -1765,6 +1874,12 @@ public:
/// @return Number of deleted options.
uint64_t deleteOptions4(const ServerSelector& server_selector,
const Subnet4Ptr& subnet) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "deleting options for a subnet");
MySqlBindingCollection in_bindings = {
......@@ -1785,6 +1900,12 @@ public:
/// @return Number of deleted options.
uint64_t deleteOptions4(const ServerSelector& server_selector,
const SharedNetwork4Ptr& shared_network) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, "deleting options for a shared network");
MySqlBindingCollection in_bindings = {
......
......@@ -32,6 +32,7 @@ public:
/// @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.
/// @throw NotImplemented if server selector is "unassigned".
virtual Subnet4Ptr
getSubnet4(const db::ServerSelector& server_selector,
const std::string& subnet_prefix) const;
......@@ -41,6 +42,7 @@ public:
/// @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.
/// @throw NotImplemented if server selector is "unassigned".
virtual Subnet4Ptr
getSubnet4(const db::ServerSelector& server_selector, const SubnetID& subnet_id) const;
......@@ -65,6 +67,7 @@ public:
/// @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.
/// @throw NotImplemented if server selector is "unassigned".
virtual SharedNetwork4Ptr
getSharedNetwork4(const db::ServerSelector& server_selector,
const std::string& name) const;
......@@ -93,6 +96,7 @@ public:
/// @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.
/// @throw NotImplemented if server selector is "unassigned".
virtual OptionDefinitionPtr
getOptionDef4(const db::ServerSelector& server_selector, const uint16_t code,
const std::string& space) const;
......@@ -121,6 +125,7 @@ public:
/// @param server_selector Server selector.
/// @return Pointer to the retrieved option descriptor or null if
/// no option was found.
/// @throw NotImplemented if server selector is "unassigned".
virtual OptionDescriptorPtr
getOption4(const db::ServerSelector& server_selector, const uint16_t code,
const std::string& space) const;
......@@ -148,6 +153,7 @@ public:
/// @param server_selector Server selector.
/// @param name Name of the global parameter to be retrieved.
/// @return Value of the global parameter.
/// @throw NotImplemented if server selector is "unassigned".
virtual data::StampedValuePtr
getGlobalParameter4(const db::ServerSelector& server_selector,
const std::string& name) const;
......@@ -170,6 +176,7 @@ public:
///
/// @param server_selector Server selector.
/// @param subnet Subnet to be added or updated.
/// @throw NotImplemented if server selector is "unassigned".
virtual void
createUpdateSubnet4(const db::ServerSelector& server_selector,
const Subnet4Ptr& subnet);
......@@ -178,6 +185,7 @@ public:
///
/// @param server_selector Server selector.
/// @param shared_network Shared network to be added or updated.
/// @throw NotImplemented if server selector is "unassigned".
virtual void
createUpdateSharedNetwork4(const db::ServerSelector& server_selector,
const SharedNetwork4Ptr& shared_network);
......@@ -186,6 +194,7 @@ public:
///
/// @param server_selector Server selector.
/// @param option_def Option definition to be added or updated.
/// @throw NotImplemented if server selector is "unassigned".
virtual void
createUpdateOptionDef4(const db::ServerSelector& server_selector,
const OptionDefinitionPtr& option_def);
......@@ -194,6 +203,7 @@ public:
///
/// @param server_selector Server selector.
/// @param option Option to be added or updated.
/// @throw NotImplemented if server selector is "unassigned".
virtual void
createUpdateOption4(const db::ServerSelector& server_selector,
const OptionDescriptorPtr& option);
......@@ -204,6 +214,7 @@ public:
/// @param shared_network_name Name of a shared network to which option
/// belongs.
/// @param option Option to be added or updated.
/// @throw NotImplemented if server selector is "unassigned".
virtual void
createUpdateOption4(const db::ServerSelector& server_selector,
const std::string& shared_network_name,
......@@ -214,6 +225,7 @@ public:
/// @param server_selector Server selector.
/// @param subnet_id Identifier of a subnet to which option belongs.
/// @param option Option to be added or updated.
/// @throw NotImplemented if server selector is "unassigned".
virtual void
createUpdateOption4(const db::ServerSelector& server_selector,
const SubnetID& subnet_id,
......@@ -227,6 +239,7 @@ public:
/// @param pool_end_address Upper bound address of the pool to which the
/// option belongs.
/// @param option Option to be added or updated.
/// @throw NotImplemented if server selector is "unassigned".
virtual void
createUpdateOption4(const db::ServerSelector& server_selector,
const asiolink::IOAddress& pool_start_address,
......@@ -238,6 +251,7 @@ public:
/// @param server_selector Server selector.
/// @param name Name of the global parameter.
/// @param value Value of the global parameter.
/// @throw NotImplemented if server selector is "unassigned".
virtual void
createUpdateGlobalParameter4(const db::ServerSelector& server_selector,
const data::StampedValuePtr& value);
......@@ -247,6 +261,7 @@ public:
/// @param server_selector Server selector.
/// @param subnet_prefix Prefix of the subnet to be deleted.
/// @return Number of deleted subnets.
/// @throw NotImplemented if server selector is "unassigned".
virtual uint64_t
deleteSubnet4(const db::ServerSelector& server_selector,
const std::string& subnet_prefix);
......@@ -256,6 +271,7 @@ public:
/// @param server_selector Server selector.
/// @param subnet_id Identifier of the subnet to be deleted.
/// @return Number of deleted subnets.
/// @throw NotImplemented if server selector is "unassigned".
virtual uint64_t
deleteSubnet4(const db::ServerSelector& server_selector, const SubnetID& subnet_id);
......@@ -263,6 +279,7 @@ public:
///
/// @param server_selector Server selector.
/// @return Number of deleted subnets.
/// @throw NotImplemented if server selector is "unassigned".
virtual uint64_t
deleteAllSubnets4(const db::ServerSelector& server_selector);
......@@ -271,6 +288,7 @@ public:
/// @param server_selector Server selector.
/// @param name Name of the shared network to be deleted.
/// @return Number of deleted shared networks.
/// @throw NotImplemented if server selector is "unassigned".
virtual uint64_t
deleteSharedNetwork4(const db::ServerSelector& server_selector,
const std::string& name);
......@@ -288,6 +306,7 @@ public:
/// @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.
/// @throw NotImplemented if server selector is "unassigned".
virtual uint64_t
deleteOptionDef4(const db::ServerSelector& server_selector, const uint16_t code,
const std::string& space);
......@@ -296,6 +315,7 @@ public:
///
/// @param server_selector Server selector.
/// @return Number of deleted option definitions.
/// @throw NotImplemented if server selector is "unassigned".
virtual uint64_t
deleteAllOptionDefs4(const db::ServerSelector& server_selector);
......@@ -305,6 +325,7 @@ public:
/// @param code Code of the option to be deleted.
/// @param space Option space of the option to be deleted.
/// @return Number of deleted options.
/// @throw NotImplemented if server selector is "unassigned".
virtual uint64_t
deleteOption4(const db::ServerSelector& server_selector, const uint16_t code,
const std::string& space);
......@@ -316,6 +337,7 @@ public:
/// option belongs to
/// @param code Code of the deleted option.
/// @param space Option space of the deleted option.
/// @throw NotImplemented if server selector is "unassigned".
virtual uint64_t
deleteOption4(const db::ServerSelector& server_selector,
const std::string& shared_network_name,
......@@ -330,6 +352,7 @@ public:
/// @param code Code of the deleted option.
/// @param space Option space of the deleted option.
/// @return Number of deleted options.
/// @throw NotImplemented if server selector is "unassigned".
virtual uint64_t
deleteOption4(const db::ServerSelector& server_selector, const SubnetID& subnet_id,
const uint16_t code, const std::string& space);
......@@ -344,6 +367,7 @@ public:
/// @param code Code of the deleted option.
/// @param space Option space of the deleted option.
/// @return Number of deleted options.
/// @throw NotImplemented if server selector is "unassigned".
virtual uint64_t
deleteOption4(const db::ServerSelector& server_selector,
const asiolink::IOAddress& pool_start_address,
......@@ -356,6 +380,7 @@ public:
/// @param server_selector Server selector.
/// @param name Name of the global parameter to be deleted.
/// @return Number of deleted global parameters.
/// @throw NotImplemented if server selector is "unassigned".
virtual uint64_t
deleteGlobalParameter4(const db::ServerSelector& server_selector,
const std::string& name);
......@@ -364,6 +389,7 @@ public:
///
/// @param server_selector Server selector.
/// @return Number of deleted global parameters.
/// @throw NotImplemented if server selector is "unassigned".
virtual uint64_t
deleteAllGlobalParameters4(const db::ServerSelector& server_selector);
......
......@@ -85,6 +85,12 @@ uint64_t
MySqlConfigBackendImpl::deleteFromTable(const int index,
const ServerSelector& server_selector,
const std::string& operation) {
if (server_selector.amUnassigned()) {
isc_throw(NotImplemented, "managing configuration for no particular server"
" (unassigned) is unsupported at the moment");
}
auto tag = getServerTag(server_selector, operation);
MySqlBindingCollection in_bindings = {
......
......@@ -88,6 +88,13 @@ public:
return (tags_);
}
/// @brief Convenience method checking if the server selector is "unassigned".
///
/// @return true if the selector is "unassigned", false otherwise.
bool amUnassigned() const {
return (getType() == Type::UNASSIGNED);
}
private:
/// @brief Constructor used for "unassigned" and "all" slection types.
......
......@@ -16,6 +16,7 @@ namespace {
TEST(ServerSelectorTest, unassigned) {
ServerSelector selector = ServerSelector::UNASSIGNED();
EXPECT_EQ(ServerSelector::Type::UNASSIGNED, selector.getType());
EXPECT_TRUE(selector.amUnassigned());
EXPECT_TRUE(selector.getTags().empty());
}
......@@ -23,6 +24,7 @@ TEST(ServerSelectorTest, unassigned) {
TEST(ServerSelectorTest, all) {
ServerSelector selector = ServerSelector::ALL();
EXPECT_EQ(ServerSelector::Type::ALL, selector.getType());
EXPECT_FALSE(selector.amUnassigned());
EXPECT_TRUE(selector.getTags().empty());
}
......@@ -30,6 +32,7 @@ TEST(ServerSelectorTest, all) {
TEST(ServerSelectorTest, one) {
ServerSelector selector = ServerSelector::ONE("some-tag");
EXPECT_EQ(ServerSelector::Type::SUBSET, selector.getType());
EXPECT_FALSE(selector.amUnassigned());
std::set<std::string> tags = selector.getTags();
ASSERT_EQ(1, tags.size());
......@@ -40,6 +43,7 @@ TEST(ServerSelectorTest, one) {
TEST(ServerSelectorTest, multiple) {
ServerSelector selector = ServerSelector::MULTIPLE({ "tag1", "tag2", "tag3" });
EXPECT_EQ(ServerSelector::Type::SUBSET, selector.getType());
EXPECT_FALSE(selector.amUnassigned());
std::set<std::string> tags = selector.getTags();
ASSERT_EQ(3, tags.size());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment