]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[709-cb_cmds-add-support-for-commands-to-manage-the-servers] Added delServerTag
authorFrancis Dupont <fdupont@isc.org>
Sun, 30 Jun 2019 13:28:19 +0000 (15:28 +0200)
committerFrancis Dupont <fdupont@isc.org>
Wed, 3 Jul 2019 23:10:51 +0000 (01:10 +0200)
src/lib/cc/base_stamped_element.h
src/lib/cc/stamped_element.cc
src/lib/cc/stamped_element.h
src/lib/cc/tests/stamped_element_unittest.cc

index 11cb4e670b0e48aa6d8021549298c2f3b1ecbba4..e98bd322265b24308e4357bb3aef03cd0288fac2 100644 (file)
@@ -67,7 +67,7 @@ protected:
     /// @brief Database identifier of the configuration element.
     ///
     /// The default value of 0 indicates that the identifier is
-    /// not set. 
+    /// not set.
     uint64_t id_;
 
     /// @brief Holds timestamp value.
index 2384108b3f05a8baf4fcf26a507865bef3b01075..7a36e0cce48a225d2d7eab462ac0068dc82c2f1f 100644 (file)
@@ -23,6 +23,17 @@ StampedElement::hasServerTag(const ServerTag& server_tag) const {
     return (false);
 }
 
+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;
+        }
+    }
+    isc_throw(NotFound, "can't find server tag '" << server_tag << "' to delete");
+}
+
 bool
 StampedElement::hasAllServerTag() const {
     return (hasServerTag(ServerTag(ServerTag::ALL)));
index 892b92873017645f05fe75c80eeb1acc0fea7d40..f470fc9b99a217571eba016a7ba43226fb8dc7cd 100644 (file)
@@ -47,6 +47,14 @@ public:
         server_tags_.push_back(ServerTag(server_tag));
     }
 
+    /// @brief Deletes server tag.
+    ///
+    /// Remove the first occurrence of the given server tag.
+    ///
+    /// @param server_tag server tag to delete.
+    /// @throw NotFound if the server tag cannot be found.
+    void delServerTag(const std::string& server_tag);
+
     /// @brief Returns server tags.
     ///
     /// @return Server tag as string.
index 80d170ef591a0b43a9eb03ad4a25eb58b903d929..53b859807450ae800df249b7c1b15c4fb21502b0 100644 (file)
@@ -71,7 +71,7 @@ TEST(StampedElementTest, update) {
 }
 
 // Tests that one or more server tag can be specified.
-TEST(StampedElementTest, setServerTags) {
+TEST(StampedElementTest, setServerTag) {
     StampedElement element;
     element.setServerTag("foo");
     EXPECT_EQ(1, element.getServerTags().size());
@@ -91,6 +91,26 @@ TEST(StampedElementTest, setServerTags) {
     EXPECT_TRUE(element.hasAllServerTag());
 }
 
+// Tests that a server tag can be deleted.
+TEST(StampedElementTest, delServerTag) {
+    StampedElement element;
+    EXPECT_THROW(element.delServerTag("foo"), isc::NotFound);
+    element.setServerTag("foo");
+    element.setServerTag("foo");
+    ASSERT_EQ(2, element.getServerTags().size());
+    EXPECT_EQ("foo", element.getServerTags()[0].get());
+    EXPECT_EQ("foo", element.getServerTags()[1].get());
+
+    EXPECT_NO_THROW(element.delServerTag("foo"));
+    ASSERT_EQ(1, element.getServerTags().size());
+    EXPECT_EQ("foo", element.getServerTags()[0].get());
+
+    EXPECT_NO_THROW(element.delServerTag("foo"));
+    EXPECT_EQ(0, element.getServerTags().size());
+    EXPECT_THROW(element.delServerTag("foo"), isc::NotFound);
+}
+
+
 // Test that metadata can be created from the StampedElement.
 TEST(StampedElementTest, getMetadata) {
     StampedElement element;