]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1405] fixed unittests
authorRazvan Becheriu <razvan@isc.org>
Mon, 12 Oct 2020 10:43:49 +0000 (13:43 +0300)
committerRazvan Becheriu <razvan@isc.org>
Wed, 18 Nov 2020 13:55:22 +0000 (15:55 +0200)
src/lib/dhcpsrv/parsers/reservation_modes_parser.cc
src/lib/dhcpsrv/tests/reservation_modes_parser_unittest.cc

index 978412d7a6243c5c3c511ce9f281771c050f3ae6..cf14ff407fec4a3e1a28cb09006d1051b573ed96 100644 (file)
@@ -28,28 +28,32 @@ HostReservationModesParser::parse(const ConstElementPtr& control_elem) {
     ConstElementPtr elem;
     uint8_t flags = 0;
 
-    elem  = control_elem->get("global");
-    if (elem) {
-        bool value = elem->boolValue();
-        if (value) {
-            flags |= Network::HR_GLOBAL;
+    try {
+        elem  = control_elem->get("global");
+        if (elem) {
+            bool value = elem->boolValue();
+            if (value) {
+                flags |= Network::HR_GLOBAL;
+            }
         }
-    }
 
-    elem  = control_elem->get("in-subnet");
-    if (elem) {
-        bool value = elem->boolValue();
-        if (value) {
-            flags |= Network::HR_IN_SUBNET;
+        elem  = control_elem->get("in-subnet");
+        if (elem) {
+            bool value = elem->boolValue();
+            if (value) {
+                flags |= Network::HR_IN_SUBNET;
+            }
         }
-    }
 
-    elem  = control_elem->get("out-of-pool");
-    if (elem) {
-        bool value = elem->boolValue();
-        if (value) {
-            flags |= Network::HR_OUT_OF_POOL;
+        elem  = control_elem->get("out-of-pool");
+        if (elem) {
+            bool value = elem->boolValue();
+            if (value) {
+                flags |= Network::HR_OUT_OF_POOL;
+            }
         }
+    } catch (const Exception& ex) {
+        isc_throw(DhcpConfigError, "error parsing element: " << ex.what());
     }
 
     return (static_cast<Network::HRMode>(flags));
index 7800067aa1c3a31c10ea8f5434c05cf2d9df541e..d72a556f942f1c730fc0f3e11d8103087a734295 100644 (file)
@@ -51,39 +51,127 @@ TEST_F(HostReservationModesParserTest, validContent) {
     struct Scenario {
         std::string description_;
         std::string json_;
+        uint8_t expected_result_;
     };
 
     std::vector<Scenario> scenarios = {
         {
-        "queue disabled",
+        "reservation modes disabled",
         "{ \n"
-        "   \"enable-queue\": false \n"
-        "} \n"
+        "   \"global\": false, \n"
+        "   \"in-subnet\": false, \n"
+        "   \"out-of-pool\": false \n"
+        "} \n",
+        Network::HR_DISABLED
         },
         {
-        "queue disabled, arbitrary content allowed",
+        "reservation modes global enabled",
         "{ \n"
-        "   \"enable-queue\": false, \n"
-        "   \"foo\": \"bogus\", \n"
-        "   \"random-int\" : 1234 \n"
-        "} \n"
+        "   \"global\": true, \n"
+        "   \"in-subnet\": false, \n"
+        "   \"out-of-pool\": false \n"
+        "} \n",
+        Network::HR_GLOBAL
         },
         {
-        "queue enabled, with queue-type",
+        "reservation modes in-subnet enabled",
         "{ \n"
-        "   \"enable-queue\": true, \n"
-        "   \"queue-type\": \"some-type\" \n"
-        "} \n"
+        "   \"global\": false, \n"
+        "   \"in-subnet\": true, \n"
+        "   \"out-of-pool\": false \n"
+        "} \n",
+        Network::HR_IN_SUBNET
         },
         {
-        "queue enabled with queue-type and arbitrary content",
+        "reservation modes global and in-subnet enabled",
         "{ \n"
-        "   \"enable-queue\": true, \n"
-        "   \"queue-type\": \"some-type\", \n"
-        "   \"foo\": \"bogus\", \n"
-        "   \"random-int\" : 1234 \n"
-        "} \n"
-        }
+        "   \"global\": true, \n"
+        "   \"in-subnet\": true, \n"
+        "   \"out-of-pool\": false \n"
+        "} \n",
+        Network::HR_GLOBAL|Network::HR_IN_SUBNET
+        },
+        {
+        "reservation modes out-of-pool enabled",
+        "{ \n"
+        "   \"global\": false, \n"
+        "   \"in-subnet\": false, \n"
+        "   \"out-of-pool\": true \n"
+        "} \n",
+        Network::HR_OUT_OF_POOL
+        },
+        {
+        "reservation modes global and out-of-pool enabled",
+        "{ \n"
+        "   \"global\": true, \n"
+        "   \"in-subnet\": false, \n"
+        "   \"out-of-pool\": true \n"
+        "} \n",
+        Network::HR_GLOBAL|Network::HR_OUT_OF_POOL
+        },
+        {
+        "reservation modes in-subnet and out-of-pool enabled",
+        "{ \n"
+        "   \"global\": false, \n"
+        "   \"in-subnet\": true, \n"
+        "   \"out-of-pool\": true \n"
+        "} \n",
+        Network::HR_IN_SUBNET|Network::HR_OUT_OF_POOL
+        },
+        {
+        "reservation modes global, in-subnet and out-of-pool enabled",
+        "{ \n"
+        "   \"global\": true, \n"
+        "   \"in-subnet\": true, \n"
+        "   \"out-of-pool\": true \n"
+        "} \n",
+        Network::HR_GLOBAL|Network::HR_IN_SUBNET|Network::HR_OUT_OF_POOL
+        },
+        {
+        "only global",
+        "{ \n"
+        "   \"global\": true \n"
+        "} \n",
+        Network::HR_GLOBAL
+        },
+        {
+        "only in-subnet",
+        "{ \n"
+        "   \"in-subnet\": true \n"
+        "} \n",
+        Network::HR_IN_SUBNET
+        },
+        {
+        "only out-of-pool",
+        "{ \n"
+        "   \"out-of-pool\": true \n"
+        "} \n",
+        Network::HR_OUT_OF_POOL
+        },
+        {
+        "only global and in-subnet",
+        "{ \n"
+        "   \"global\": true, \n"
+        "   \"in-subnet\": true \n"
+        "} \n",
+        Network::HR_GLOBAL|Network::HR_IN_SUBNET
+        },
+        {
+        "only global and out-of-pool",
+        "{ \n"
+        "   \"global\": true, \n"
+        "   \"out-of-pool\": true \n"
+        "} \n",
+        Network::HR_GLOBAL|Network::HR_OUT_OF_POOL
+        },
+        {
+        "only in-subnet and out-of-pool",
+        "{ \n"
+        "   \"in-subnet\": true, \n"
+        "   \"out-of-pool\": true \n"
+        "} \n",
+        Network::HR_IN_SUBNET|Network::HR_OUT_OF_POOL
+        },
     };
 
     // Iterate over the valid scenarios and verify they succeed.
@@ -105,7 +193,7 @@ TEST_F(HostReservationModesParserTest, validContent) {
             }
 
             // Verify the resultant reservation-modes.
-            ASSERT_TRUE(reservation_modes);
+            ASSERT_EQ(scenario.expected_result_, reservation_modes);
         }
     }
 }
@@ -120,28 +208,21 @@ TEST_F(HostReservationModesParserTest, invalidContent) {
 
     std::vector<Scenario> scenarios = {
         {
-        "enable-queue missing",
-        "{ \n"
-        "   \"enable-type\": \"some-type\" \n"
-        "} \n"
-        },
-        {
-        "enable-queue not boolean",
+        "global not boolean",
         "{ \n"
-        "   \"enable-queue\": \"always\" \n"
+        "   \"global\": \"always\" \n"
         "} \n"
         },
         {
-        "queue enabled, type missing",
+        "in-subnet not boolean",
         "{ \n"
-        "   \"enable-queue\": true \n"
+        "   \"in-subnet\": \"always\" \n"
         "} \n"
         },
         {
-        "queue enabled, type not a string",
+        "out-of-pool not boolean",
         "{ \n"
-        "   \"enable-queue\": true, \n"
-        "   \"queue-type\": 7777 \n"
+        "   \"out-of-pool\": \"always\" \n"
         "} \n"
         }
     };