From: Marcin Siodelski Date: Tue, 9 Jul 2019 16:04:02 +0000 (+0200) Subject: [#716,!412] StampedElement stores server tags in a set rather that vector. X-Git-Tag: Kea-1.6.0-beta2~80 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8c3f8ac21034fdf49700fbac3ff4e06835c109c8;p=thirdparty%2Fkea.git [#716,!412] StampedElement stores server tags in a set rather that vector. --- diff --git a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc index e48f0318cd..ee96023ddb 100644 --- a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc +++ b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc @@ -643,7 +643,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, createUpdateDeleteGlobalParameter4) { EXPECT_TRUE(returned_global_parameter->getModificationTime() == global_parameter->getModificationTime()); ASSERT_EQ(1, returned_global_parameter->getServerTags().size()); - EXPECT_EQ("all", returned_global_parameter->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global_parameter->getServerTags().begin()->get()); // Because we have added the global parameter for all servers, it // should be also returned for the explicitly specified server. @@ -655,7 +655,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, createUpdateDeleteGlobalParameter4) { EXPECT_TRUE(returned_global_parameter->getModificationTime() == global_parameter->getModificationTime()); ASSERT_EQ(1, returned_global_parameter->getServerTags().size()); - EXPECT_EQ("all", returned_global_parameter->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global_parameter->getServerTags().begin()->get()); // Check that the parameter is updated when selector is specified correctly. global_parameter = StampedValue::create("global", "fish"); @@ -669,7 +669,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, createUpdateDeleteGlobalParameter4) { EXPECT_TRUE(returned_global_parameter->getModificationTime() == global_parameter->getModificationTime()); ASSERT_EQ(1, returned_global_parameter->getServerTags().size()); - EXPECT_EQ("all", returned_global_parameter->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global_parameter->getServerTags().begin()->get()); { SCOPED_TRACE("UPDATE audit entry for the global parameter"); @@ -783,7 +783,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, globalParameters4WithServerTags) { ASSERT_TRUE(returned_global); EXPECT_EQ(global_parameter3->getValue(), returned_global->getValue()); ASSERT_EQ(1, returned_global->getServerTags().size()); - EXPECT_EQ("all", returned_global->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global->getServerTags().begin()->get()); // Try to fetch the value specified for the server1. This should override the // value specified for all servers. @@ -795,7 +795,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, globalParameters4WithServerTags) { EXPECT_EQ(global_parameter1->getValue(), returned_global->getValue()); ASSERT_EQ(1, returned_global->getServerTags().size()); - EXPECT_EQ("server1", returned_global->getServerTags()[0].get()); + EXPECT_EQ("server1", returned_global->getServerTags().begin()->get()); // The same in case of the server2. EXPECT_NO_THROW( @@ -805,7 +805,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, globalParameters4WithServerTags) { ASSERT_TRUE(returned_global); EXPECT_EQ(global_parameter2->getValue(), returned_global->getValue()); ASSERT_EQ(1, returned_global->getServerTags().size()); - EXPECT_EQ("server2", returned_global->getServerTags()[0].get()); + EXPECT_EQ("server2", returned_global->getServerTags().begin()->get()); StampedValueCollection returned_globals; @@ -824,7 +824,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, globalParameters4WithServerTags) { std::map values; for (auto g = returned_globals.begin(); g != returned_globals.end(); ++g) { ASSERT_EQ(1, (*g)->getServerTags().size()); - values[(*g)->getServerTags()[0].get()] = ((*g)->getValue()); + values[(*g)->getServerTags().begin()->get()] = ((*g)->getValue()); } ASSERT_EQ(3, values.size()); @@ -842,7 +842,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, globalParameters4WithServerTags) { returned_global = *returned_globals.begin(); EXPECT_EQ(global_parameter3->getValue(), returned_global->getValue()); ASSERT_EQ(1, returned_global->getServerTags().size()); - EXPECT_EQ("all", returned_global->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global->getServerTags().begin()->get()); // Delete the server1. It should remove associations of this server with the // global parameter and the global parameter itself. @@ -857,7 +857,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, globalParameters4WithServerTags) { // the server1 specific value with the server1 should be gone. EXPECT_EQ(global_parameter3->getValue(), returned_global->getValue()); ASSERT_EQ(1, returned_global->getServerTags().size()); - EXPECT_EQ("all", returned_global->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global->getServerTags().begin()->get()); { SCOPED_TRACE("DELETE audit entry for the global parameter after server deletion"); @@ -899,7 +899,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, globalParameters4WithServerTags) { // logical server should not be deleted. EXPECT_EQ(global_parameter3->getValue(), returned_global->getValue()); ASSERT_EQ(1, returned_global->getServerTags().size()); - EXPECT_EQ("all", returned_global->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global->getServerTags().begin()->get()); { SCOPED_TRACE("DELETE audit entry for the global parameter after deletion of" @@ -944,7 +944,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getAllGlobalParameters4) { for (auto param = parameters_index.begin(); param != parameters_index.end(); ++param) { ASSERT_EQ(1, (*param)->getServerTags().size()); - EXPECT_EQ("all", (*param)->getServerTags()[0].get()); + EXPECT_EQ("all", (*param)->getServerTags().begin()->get()); } // Should be able to fetch these parameters when explicitly providing @@ -1014,7 +1014,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getSubnet4) { test_subnets_[0]->getID()); ASSERT_TRUE(returned_subnet); ASSERT_EQ(1, returned_subnet->getServerTags().size()); - EXPECT_EQ("all", returned_subnet->getServerTags()[0].get()); + EXPECT_EQ("all", returned_subnet->getServerTags().begin()->get()); // The easiest way to verify whether the returned subnet matches the inserted // subnet is to convert both to text. @@ -1194,7 +1194,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getSubnet4ByPrefix) { "192.0.2.0/24"); ASSERT_TRUE(returned_subnet); ASSERT_EQ(1, returned_subnet->getServerTags().size()); - EXPECT_EQ("all", returned_subnet->getServerTags()[0].get()); + EXPECT_EQ("all", returned_subnet->getServerTags().begin()->get()); // Verify subnet contents. EXPECT_EQ(subnet->toElement()->str(), returned_subnet->toElement()->str()); @@ -1240,7 +1240,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getAllSubnets4) { // See if the subnets are returned ok. for (auto i = 0; i < subnets.size(); ++i) { ASSERT_EQ(1, subnets[i]->getServerTags().size()); - EXPECT_EQ("all", subnets[i]->getServerTags()[0].get()); + EXPECT_EQ("all", subnets[i]->getServerTags().begin()->get()); EXPECT_EQ(test_subnets_[i + 1]->toElement()->str(), subnets[i]->toElement()->str()); } @@ -1408,7 +1408,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getSharedNetworkSubnets4) { // Check server tag ASSERT_EQ(1, subnets[0]->getServerTags().size()); - EXPECT_EQ("all", subnets[0]->getServerTags()[0].get()); + EXPECT_EQ("all", subnets[0]->getServerTags().begin()->get()); // Fetch all subnets belonging to shared network level2. subnets = cbptr_->getSharedNetworkSubnets4(ServerSelector::ALL(), "level2"); @@ -1473,7 +1473,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getSharedNetwork4) { EXPECT_GT(network->getId(), 0); ASSERT_EQ(1, network->getServerTags().size()); - EXPECT_EQ(expected_tag, network->getServerTags()[0].get()); + EXPECT_EQ(expected_tag, network->getServerTags().begin()->get()); // The easiest way to verify whether the returned shared network matches the // inserted shared network is to convert both to text. @@ -1712,7 +1712,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getAllSharedNetworks4) { EXPECT_EQ(test_networks_[i + 1]->toElement()->str(), networks[i]->toElement()->str()); ASSERT_EQ(1, networks[i]->getServerTags().size()); - EXPECT_EQ("all", networks[i]->getServerTags()[0].get()); + EXPECT_EQ("all", networks[i]->getServerTags().begin()->get()); } // Add some subnets. @@ -2201,7 +2201,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getOptionDef4) { ASSERT_TRUE(returned_option_def); EXPECT_GT(returned_option_def->getId(), 0); ASSERT_EQ(1, returned_option_def->getServerTags().size()); - EXPECT_EQ("all", returned_option_def->getServerTags()[0].get()); + EXPECT_EQ("all", returned_option_def->getServerTags().begin()->get()); EXPECT_TRUE(returned_option_def->equals(*option_def)); @@ -2466,7 +2466,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getAllOptionDefs4) { // See if option definitions are returned ok. for (auto def = option_defs.begin(); def != option_defs.end(); ++def) { ASSERT_EQ(1, (*def)->getServerTags().size()); - EXPECT_EQ("all", (*def)->getServerTags()[0].get()); + EXPECT_EQ("all", (*def)->getServerTags().begin()->get()); bool success = false; for (auto i = 1; i < test_option_defs_.size(); ++i) { if ((*def)->equals(*test_option_defs_[i])) { @@ -2846,7 +2846,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getAllOptions4) { testOptionsEquivalent(*test_options_[0], *option0); EXPECT_GT(option0->getId(), 0); ASSERT_EQ(1, option0->getServerTags().size()); - EXPECT_EQ("all", option0->getServerTags()[0].get()); + EXPECT_EQ("all", option0->getServerTags().begin()->get()); } { @@ -2856,7 +2856,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getAllOptions4) { testOptionsEquivalent(*test_options_[1], *option1); EXPECT_GT(option1->getId(), 0); ASSERT_EQ(1, option1->getServerTags().size()); - EXPECT_EQ("all", option1->getServerTags()[0].get()); + EXPECT_EQ("all", option1->getServerTags().begin()->get()); } { @@ -2866,7 +2866,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getAllOptions4) { testOptionsEquivalent(*test_options_[5], *option5); EXPECT_GT(option5->getId(), 0); ASSERT_EQ(1, option5->getServerTags().size()); - EXPECT_EQ("all", option5->getServerTags()[0].get()); + EXPECT_EQ("all", option5->getServerTags().begin()->get()); } } diff --git a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc index aa1ba0313e..b1be84ac5a 100644 --- a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc +++ b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc @@ -683,7 +683,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, createUpdateDeleteGlobalParameter6) { EXPECT_TRUE(returned_global_parameter->getModificationTime() == global_parameter->getModificationTime()); ASSERT_EQ(1, returned_global_parameter->getServerTags().size()); - EXPECT_EQ("all", returned_global_parameter->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global_parameter->getServerTags().begin()->get()); // Because we have added the global parameter for all servers, it // should be also returned for the explicitly specified server. @@ -695,7 +695,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, createUpdateDeleteGlobalParameter6) { EXPECT_TRUE(returned_global_parameter->getModificationTime() == global_parameter->getModificationTime()); ASSERT_EQ(1, returned_global_parameter->getServerTags().size()); - EXPECT_EQ("all", returned_global_parameter->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global_parameter->getServerTags().begin()->get()); // Check that the parameter is updated when selector is specified correctly. global_parameter = StampedValue::create("global", "fish"); @@ -815,7 +815,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, globalParameters6WithServerTags) { ASSERT_TRUE(returned_global); EXPECT_EQ(global_parameter3->getValue(), returned_global->getValue()); ASSERT_EQ(1, returned_global->getServerTags().size()); - EXPECT_EQ("all", returned_global->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global->getServerTags().begin()->get()); // Try to fetch the value specified for the server1. This should override the // value specified for all servers. @@ -827,7 +827,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, globalParameters6WithServerTags) { EXPECT_EQ(global_parameter1->getValue(), returned_global->getValue()); ASSERT_EQ(1, returned_global->getServerTags().size()); - EXPECT_EQ("server1", returned_global->getServerTags()[0].get()); + EXPECT_EQ("server1", returned_global->getServerTags().begin()->get()); // The same in case of the server2. EXPECT_NO_THROW( @@ -837,7 +837,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, globalParameters6WithServerTags) { ASSERT_TRUE(returned_global); EXPECT_EQ(global_parameter2->getValue(), returned_global->getValue()); ASSERT_EQ(1, returned_global->getServerTags().size()); - EXPECT_EQ("server2", returned_global->getServerTags()[0].get()); + EXPECT_EQ("server2", returned_global->getServerTags().begin()->get()); StampedValueCollection returned_globals; @@ -856,7 +856,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, globalParameters6WithServerTags) { std::map values; for (auto g = returned_globals.begin(); g != returned_globals.end(); ++g) { ASSERT_EQ(1, (*g)->getServerTags().size()); - values[(*g)->getServerTags()[0].get()] = ((*g)->getValue()); + values[(*g)->getServerTags().begin()->get()] = ((*g)->getValue()); } ASSERT_EQ(3, values.size()); @@ -874,7 +874,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, globalParameters6WithServerTags) { returned_global = *returned_globals.begin(); EXPECT_EQ(global_parameter3->getValue(), returned_global->getValue()); ASSERT_EQ(1, returned_global->getServerTags().size()); - EXPECT_EQ("all", returned_global->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global->getServerTags().begin()->get()); // Delete the server1. It should remove associations of this server with the // global parameter and the global parameter itself. @@ -889,7 +889,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, globalParameters6WithServerTags) { // the server1 specific value with the server1 should be gone. EXPECT_EQ(global_parameter3->getValue(), returned_global->getValue()); ASSERT_EQ(1, returned_global->getServerTags().size()); - EXPECT_EQ("all", returned_global->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global->getServerTags().begin()->get()); { SCOPED_TRACE("DELETE audit entry for the global parameter after server deletion"); @@ -931,7 +931,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, globalParameters6WithServerTags) { // logical server should not be deleted. EXPECT_EQ(global_parameter3->getValue(), returned_global->getValue()); ASSERT_EQ(1, returned_global->getServerTags().size()); - EXPECT_EQ("all", returned_global->getServerTags()[0].get()); + EXPECT_EQ("all", returned_global->getServerTags().begin()->get()); { SCOPED_TRACE("DELETE audit entry for the global parameter after deletion of" @@ -969,7 +969,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getAllGlobalParameters6) { for (auto param = parameters_index.begin(); param != parameters_index.end(); ++param) { ASSERT_EQ(1, (*param)->getServerTags().size()); - EXPECT_EQ("all", (*param)->getServerTags()[0].get()); + EXPECT_EQ("all", (*param)->getServerTags().begin()->get()); } // Verify their values. @@ -1046,7 +1046,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getSubnet6) { test_subnets_[0]->getID()); ASSERT_TRUE(returned_subnet); ASSERT_EQ(1, returned_subnet->getServerTags().size()); - EXPECT_EQ("all", returned_subnet->getServerTags()[0].get()); + EXPECT_EQ("all", returned_subnet->getServerTags().begin()->get()); // The easiest way to verify whether the returned subnet matches the inserted // subnet is to convert both to text. @@ -1190,7 +1190,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getSubnet6SharedNetwork) { test_subnets_[0]->getID()); ASSERT_TRUE(returned_subnet); ASSERT_EQ(1, returned_subnet->getServerTags().size()); - EXPECT_EQ("all", returned_subnet->getServerTags()[0].get()); + EXPECT_EQ("all", returned_subnet->getServerTags().begin()->get()); // The easiest way to verify whether the returned subnet matches the inserted // subnet is to convert both to text. @@ -1212,7 +1212,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getSubnet6ByPrefix) { "2001:db8::/64"); ASSERT_TRUE(returned_subnet); ASSERT_EQ(1, returned_subnet->getServerTags().size()); - EXPECT_EQ("all", returned_subnet->getServerTags()[0].get()); + EXPECT_EQ("all", returned_subnet->getServerTags().begin()->get()); // Verify subnet contents. EXPECT_EQ(subnet->toElement()->str(), returned_subnet->toElement()->str()); @@ -1260,7 +1260,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getAllSubnets6) { EXPECT_EQ(test_subnets_[i + 1]->toElement()->str(), subnets[i]->toElement()->str()); ASSERT_EQ(1, subnets[i]->getServerTags().size()); - EXPECT_EQ("all", subnets[i]->getServerTags()[0].get()); + EXPECT_EQ("all", subnets[i]->getServerTags().begin()->get()); } // Attempt to remove the non existing subnet should return 0. @@ -1488,7 +1488,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getSharedNetwork6) { EXPECT_GT(network->getId(), 0); ASSERT_EQ(1, network->getServerTags().size()); - EXPECT_EQ(expected_tag, network->getServerTags()[0].get()); + EXPECT_EQ(expected_tag, network->getServerTags().begin()->get()); // The easiest way to verify whether the returned shared network matches the // inserted shared network is to convert both to text. @@ -1727,7 +1727,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getAllSharedNetworks6) { EXPECT_EQ(test_networks_[i + 1]->toElement()->str(), networks[i]->toElement()->str()); ASSERT_EQ(1, networks[i]->getServerTags().size()); - EXPECT_EQ("all", networks[i]->getServerTags()[0].get()); + EXPECT_EQ("all", networks[i]->getServerTags().begin()->get()); } // Add some subnets. @@ -2219,7 +2219,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getOptionDef6) { ASSERT_TRUE(returned_option_def); EXPECT_GT(returned_option_def->getId(), 0); ASSERT_EQ(1, returned_option_def->getServerTags().size()); - EXPECT_EQ("all", returned_option_def->getServerTags()[0].get()); + EXPECT_EQ("all", returned_option_def->getServerTags().begin()->get()); EXPECT_TRUE(returned_option_def->equals(*option_def)); @@ -2485,7 +2485,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getAllOptionDefs6) { // See if option definitions are returned ok. for (auto def = option_defs.begin(); def != option_defs.end(); ++def) { ASSERT_EQ(1, (*def)->getServerTags().size()); - EXPECT_EQ("all", (*def)->getServerTags()[0].get()); + EXPECT_EQ("all", (*def)->getServerTags().begin()->get()); bool success = false; for (auto i = 1; i < test_option_defs_.size(); ++i) { if ((*def)->equals(*test_option_defs_[i])) { @@ -2868,7 +2868,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getAllOptions6) { testOptionsEquivalent(*test_options_[0], *option0); EXPECT_GT(option0->getId(), 0); ASSERT_EQ(1, option0->getServerTags().size()); - EXPECT_EQ("all", option0->getServerTags()[0].get()); + EXPECT_EQ("all", option0->getServerTags().begin()->get()); } { @@ -2878,7 +2878,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getAllOptions6) { testOptionsEquivalent(*test_options_[1], *option1); EXPECT_GT(option1->getId(), 0); ASSERT_EQ(1, option1->getServerTags().size()); - EXPECT_EQ("all", option1->getServerTags()[0].get()); + EXPECT_EQ("all", option1->getServerTags().begin()->get()); } { @@ -2888,7 +2888,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getAllOptions6) { testOptionsEquivalent(*test_options_[5], *option5); EXPECT_GT(option5->getId(), 0); ASSERT_EQ(1, option5->getServerTags().size()); - EXPECT_EQ("all", option5->getServerTags()[0].get()); + EXPECT_EQ("all", option5->getServerTags().begin()->get()); } } diff --git a/src/lib/cc/stamped_element.cc b/src/lib/cc/stamped_element.cc index 7a36e0cce4..eb147d2d87 100644 --- a/src/lib/cc/stamped_element.cc +++ b/src/lib/cc/stamped_element.cc @@ -15,23 +15,14 @@ StampedElement::StampedElement() bool StampedElement::hasServerTag(const ServerTag& server_tag) const { - for (auto tag : server_tags_) { - if (tag.get() == server_tag.get()) { - return (true); - } - } - return (false); + return (server_tags_.count(server_tag) > 0); } void StampedElement::delServerTag(const std::string& server_tag) { - for (auto it = server_tags_.begin(); it < server_tags_.end(); ++it) { - if (it->get() == server_tag) { - server_tags_.erase(it); - return; - } + if (!server_tags_.erase(ServerTag(server_tag))) { + isc_throw(NotFound, "can't find server tag '" << server_tag << "' to delete"); } - isc_throw(NotFound, "can't find server tag '" << server_tag << "' to delete"); } bool diff --git a/src/lib/cc/stamped_element.h b/src/lib/cc/stamped_element.h index f470fc9b99..c6768260b9 100644 --- a/src/lib/cc/stamped_element.h +++ b/src/lib/cc/stamped_element.h @@ -9,7 +9,7 @@ #include #include -#include +#include namespace isc { namespace data { @@ -44,7 +44,7 @@ public: /// @param server_tag new server tag. /// @throw BadValue if the server tag length exceeds 256 characters. void setServerTag(const std::string& server_tag) { - server_tags_.push_back(ServerTag(server_tag)); + server_tags_.insert(ServerTag(server_tag)); } /// @brief Deletes server tag. @@ -57,8 +57,8 @@ public: /// @brief Returns server tags. /// - /// @return Server tag as string. - std::vector getServerTags() const { + /// @return Server tags. + std::set getServerTags() const { return (server_tags_); } @@ -82,7 +82,7 @@ public: private: /// @brief Holds server tags. - std::vector server_tags_; + std::set server_tags_; }; } // end of namespace isc::data diff --git a/src/lib/cc/tests/stamped_element_unittest.cc b/src/lib/cc/tests/stamped_element_unittest.cc index 53b8598074..1ffcd84ca9 100644 --- a/src/lib/cc/tests/stamped_element_unittest.cc +++ b/src/lib/cc/tests/stamped_element_unittest.cc @@ -75,12 +75,10 @@ TEST(StampedElementTest, setServerTag) { StampedElement element; element.setServerTag("foo"); EXPECT_EQ(1, element.getServerTags().size()); - EXPECT_EQ("foo", element.getServerTags()[0].get()); + EXPECT_EQ("foo", element.getServerTags().begin()->get()); element.setServerTag("bar"); EXPECT_EQ(2, element.getServerTags().size()); - EXPECT_EQ("foo", element.getServerTags()[0].get()); - EXPECT_EQ("bar", element.getServerTags()[1].get()); EXPECT_TRUE(element.hasServerTag(ServerTag("foo"))); EXPECT_TRUE(element.hasServerTag(ServerTag("bar"))); @@ -96,18 +94,19 @@ TEST(StampedElementTest, delServerTag) { StampedElement element; EXPECT_THROW(element.delServerTag("foo"), isc::NotFound); element.setServerTag("foo"); - element.setServerTag("foo"); + element.setServerTag("bar"); + ASSERT_EQ(2, element.getServerTags().size()); - EXPECT_EQ("foo", element.getServerTags()[0].get()); - EXPECT_EQ("foo", element.getServerTags()[1].get()); + EXPECT_TRUE(element.hasServerTag(ServerTag("foo"))); + EXPECT_TRUE(element.hasServerTag(ServerTag("bar"))); EXPECT_NO_THROW(element.delServerTag("foo")); ASSERT_EQ(1, element.getServerTags().size()); - EXPECT_EQ("foo", element.getServerTags()[0].get()); + EXPECT_TRUE(element.hasServerTag(ServerTag("bar"))); - EXPECT_NO_THROW(element.delServerTag("foo")); + EXPECT_NO_THROW(element.delServerTag("bar")); EXPECT_EQ(0, element.getServerTags().size()); - EXPECT_THROW(element.delServerTag("foo"), isc::NotFound); + EXPECT_THROW(element.delServerTag("bar"), isc::NotFound); }