]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2780] Added some parser tests for allocator
authorMarcin Siodelski <msiodelski@gmail.com>
Mon, 20 Mar 2023 17:50:30 +0000 (18:50 +0100)
committerMarcin Siodelski <msiodelski@gmail.com>
Wed, 29 Mar 2023 12:44:07 +0000 (14:44 +0200)
src/lib/dhcpsrv/parsers/shared_network_parser.cc
src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc
src/lib/dhcpsrv/tracking_lease_mgr.h

index 0e8dcb42b85e47850c62f6a92113752573cfc4f8..1d6d73c66ce35e484e79530c2bde58d821e92f66 100644 (file)
@@ -388,6 +388,9 @@ SharedNetwork6Parser::parse(const data::ConstElementPtr& shared_network_data) {
 
         // Parse allocator params.
         parseAllocatorParams(shared_network_data, network);
+        if (network->getAllocatorType() == "flq") {
+            isc_throw(BadValue, "Free Lease Queue allocator is not supported for IPv6 address pools");
+        }
 
         // Parse prefix delegation allocator params.
         auto network6 = boost::dynamic_pointer_cast<Network6>(shared_network);
index 1f5287cb4ffbc66245ea10a70e19fd3acbe00b9c..ea2f3b3af9744b905be2c5a0eaef75b9e53d5bb0 100644 (file)
@@ -545,6 +545,24 @@ TEST_F(SharedNetwork4ParserTest, parseValidWithEqualRenewRebind) {
     ASSERT_TRUE(network);
 }
 
+// Test that FLQ allocator can be used for a shared network.
+TEST_F(SharedNetwork4ParserTest, parseFLQAllocator) {
+    IfaceMgrTestConfig ifmgr(true);
+
+    // Basic configuration for shared network.
+    std::string config = "{ \"name\": \"lion\", \"allocator\": \"flq\" }";
+    ElementPtr config_element = Element::fromJSON(config);
+
+    // Parse configuration specified above.
+    SharedNetwork4Parser parser;
+    SharedNetwork4Ptr network;
+
+    ASSERT_NO_THROW(network = parser.parse(config_element));
+    ASSERT_TRUE(network);
+    EXPECT_EQ("flq", network->getAllocatorType().get());
+}
+
+
 /// @brief Test fixture class for SharedNetwork6Parser class.
 class SharedNetwork6ParserTest : public SharedNetworkParserTest {
 public:
@@ -1054,4 +1072,35 @@ TEST_F(SharedNetwork6ParserTest, iface) {
     EXPECT_EQ("eth1961", network->getIface().get());
 }
 
+// Test that the FLQ allocator can't be used for DHCPv6 address assignment.
+TEST_F(SharedNetwork6ParserTest, parseFLQAllocatorNA) {
+    IfaceMgrTestConfig ifmgr(true);
+
+    // Basic configuration for shared network.
+    std::string config = "{ \"name\": \"lion\", \"allocator\": \"flq\" }";
+    ElementPtr config_element = Element::fromJSON(config);
+
+    // Parse configuration specified above.
+    SharedNetwork6Parser parser;
+    EXPECT_THROW(parser.parse(config_element), DhcpConfigError);
+}
+
+// Test that FLQ allocator can be used for prefix delegation.
+TEST_F(SharedNetwork6ParserTest, parseFLQAllocatorPD) {
+    IfaceMgrTestConfig ifmgr(true);
+
+    // Basic configuration for shared network.
+    std::string config = "{ \"name\": \"lion\", \"pd-allocator\": \"flq\" }";
+    ElementPtr config_element = Element::fromJSON(config);
+
+    // Parse configuration specified above.
+    SharedNetwork6Parser parser;
+    SharedNetwork6Ptr network;
+
+    ASSERT_NO_THROW(network = parser.parse(config_element));
+    ASSERT_TRUE(network);
+    EXPECT_EQ("flq", network->getPdAllocatorType().get());
+}
+
+
 } // end of anonymous namespace
index b6f673ccac735a07332658de2d0e741ec5e45616..31e91c6de84b80095503831be09d8a511c912dde 100644 (file)
@@ -260,8 +260,6 @@ public:
     /// @brief Unregisters all callbacks.
     void unregisterAllCallbacks();
 
-protected:
-
     /// @brief Checks if any callbacks have been registered.
     ///
     /// It is a quick check to be performed by the backends whether or not
@@ -270,6 +268,8 @@ protected:
     /// @return true if any callbacks have been registered.
     bool hasCallbacks() const;
 
+protected:
+
     /// @brief Converts callback type to string for logging purposes.
     ///
     /// @param type callback type.