]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2866] Added/restored specific tests
authorFrancis Dupont <fdupont@isc.org>
Wed, 7 Jun 2023 19:50:18 +0000 (21:50 +0200)
committerMarcin Siodelski <marcin@isc.org>
Mon, 26 Jun 2023 12:24:42 +0000 (14:24 +0200)
src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/get_config_unittest.cc
src/lib/dhcpsrv/tests/subnet_unittest.cc

index 54c65f8db9dfe6d95c21bf1aa1198a549abfd305..2d98963a4353c75620c3a671aba033b100607dc1 100644 (file)
@@ -1153,7 +1153,6 @@ TEST_F(Dhcp4ParserTest, subnetGlobalDefaults) {
     EXPECT_EQ(1, subnet->getID());
 }
 
-#if deprecated_unnumbered
 // Goal of this test is to verify that multiple subnets get unique
 // subnet-ids. Also, test checks that it's possible to do reconfiguration
 // multiple times.
@@ -1185,7 +1184,6 @@ TEST_F(Dhcp4ParserTest, multipleSubnets) {
 
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP4(config));
-    extractConfig(config);
 
     int cnt = 0; // Number of reconfigurations
 
@@ -1213,7 +1211,6 @@ TEST_F(Dhcp4ParserTest, multipleSubnets) {
         // a bit.
     } while (++cnt < 10);
 }
-#endif
 
 // This test checks that it is possible to assign arbitrary ids for subnets.
 TEST_F(Dhcp4ParserTest, multipleSubnetsExplicitIDs) {
index 9ba9e352243d999b482770822701bdc7ed07e903..bd8435fd48043e849df7e240415889e72de922ea 100644 (file)
@@ -1426,22 +1426,19 @@ TEST_F(Dhcp6ParserTest, multipleSubnets) {
         "\"rebind-timer\": 2000, "
         "\"renew-timer\": 1000, "
         "\"subnet6\": [ { "
-        "    \"id\": 1,"
         "    \"pools\": [ { \"pool\": \"2001:db8:1::/80\" } ],"
         "    \"subnet\": \"2001:db8:1::/64\" "
         " },"
         " {"
-        "    \"id\": 2,"
         "    \"pools\": [ { \"pool\": \"2001:db8:2::/80\" } ],"
         "    \"subnet\": \"2001:db8:2::/64\", "
+        "    \"id\": 0"
         " },"
         " {"
-        "    \"id\": 3,"
         "    \"pools\": [ { \"pool\": \"2001:db8:3::/80\" } ],"
         "    \"subnet\": \"2001:db8:3::/64\" "
         " },"
         " {"
-        "    \"id\": 4,"
         "    \"pools\": [ { \"pool\": \"2001:db8:4::/80\" } ],"
         "    \"subnet\": \"2001:db8:4::/64\" "
         " } ],"
@@ -1451,7 +1448,6 @@ TEST_F(Dhcp6ParserTest, multipleSubnets) {
 
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP6(config));
-    extractConfig(config);
 
     do {
         EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
index 648254c5a8f66ca043ce0e920d4836fa3daee0c5..fada83ab99c8277d5e7214d7bec5387c4d2bf5f1 100644 (file)
@@ -118,55 +118,6 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"renew-timer\": 1000,\n"
 "        \"subnet6\": [\n"
 "            {\n"
-"                \"id\": 1,\n"
-"                \"pools\": [\n"
-"                    {\n"
-"                        \"pool\": \"2001:db8:1::/80\"\n"
-"                    }\n"
-"                ],\n"
-"                \"subnet\": \"2001:db8:1::/64\"\n"
-"            },\n"
-"            {\n"
-"                \"id\": 2,\n"
-"                \"pools\": [\n"
-"                    {\n"
-"                        \"pool\": \"2001:db8:2::/80\"\n"
-"                    }\n"
-"                ],\n"
-"                \"subnet\": \"2001:db8:2::/64\"\n"
-"            },\n"
-"            {\n"
-"                \"id\": 3,\n"
-"                \"pools\": [\n"
-"                    {\n"
-"                        \"pool\": \"2001:db8:3::/80\"\n"
-"                    }\n"
-"                ],\n"
-"                \"subnet\": \"2001:db8:3::/64\"\n"
-"            },\n"
-"            {\n"
-"                \"id\": 4,\n"
-"                \"pools\": [\n"
-"                    {\n"
-"                        \"pool\": \"2001:db8:4::/80\"\n"
-"                    }\n"
-"                ],\n"
-"                \"subnet\": \"2001:db8:4::/64\"\n"
-"            }\n"
-"        ],\n"
-"        \"valid-lifetime\": 4000\n"
-"    }\n",
-    // CONFIGURATION 3
-"{\n"
-"        \"interfaces-config\": {\n"
-"            \"interfaces\": [ \"*\" ],\n"
-"            \"re-detect\": false\n"
-"        },\n"
-"        \"preferred-lifetime\": 3000,\n"
-"        \"rebind-timer\": 2000,\n"
-"        \"renew-timer\": 1000,\n"
-"        \"subnet6\": [\n"
-"            {\n"
 "                \"id\": 1024,\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -205,7 +156,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 4
+    // CONFIGURATION 3
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -254,7 +205,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 5
+    // CONFIGURATION 4
 "{\n"
 "        \"compatibility\": {\n"
 "            \"lenient-option-parsing\": true\n"
@@ -279,7 +230,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 6
+    // CONFIGURATION 5
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -313,7 +264,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 7
+    // CONFIGURATION 6
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -336,7 +287,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 8
+    // CONFIGURATION 7
 "{\n"
 "        \"preferred-lifetime\": 3000,\n"
 "        \"rebind-timer\": 2000,\n"
@@ -355,7 +306,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 9
+    // CONFIGURATION 8
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -392,7 +343,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 10
+    // CONFIGURATION 9
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -414,7 +365,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 11
+    // CONFIGURATION 10
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -438,7 +389,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 12
+    // CONFIGURATION 11
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -464,7 +415,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 13
+    // CONFIGURATION 12
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -503,7 +454,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 14
+    // CONFIGURATION 13
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -527,7 +478,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 15
+    // CONFIGURATION 14
 "{\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -538,7 +489,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 16
+    // CONFIGURATION 15
 "{\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -550,7 +501,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 17
+    // CONFIGURATION 16
 "{\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -567,7 +518,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 18
+    // CONFIGURATION 17
 "{\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -579,7 +530,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 19
+    // CONFIGURATION 18
 "{\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -591,7 +542,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 20
+    // CONFIGURATION 19
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -624,7 +575,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 21
+    // CONFIGURATION 20
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -657,7 +608,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 22
+    // CONFIGURATION 21
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -699,7 +650,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 23
+    // CONFIGURATION 22
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -736,7 +687,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"renew-timer\": 1000,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 24
+    // CONFIGURATION 23
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -795,7 +746,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 25
+    // CONFIGURATION 24
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -840,7 +791,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 26
+    // CONFIGURATION 25
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -905,7 +856,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 27
+    // CONFIGURATION 26
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -943,7 +894,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 28
+    // CONFIGURATION 27
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -981,7 +932,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 29
+    // CONFIGURATION 28
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"eth0\" ],\n"
@@ -992,7 +943,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"renew-timer\": 1000,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 30
+    // CONFIGURATION 29
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"eth0\", \"eth1\", \"*\" ],\n"
@@ -1003,7 +954,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"renew-timer\": 1000,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 31
+    // CONFIGURATION 30
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1028,7 +979,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 32
+    // CONFIGURATION 31
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1053,7 +1004,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 33
+    // CONFIGURATION 32
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1105,7 +1056,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 34
+    // CONFIGURATION 33
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1139,7 +1090,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 35
+    // CONFIGURATION 34
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1181,7 +1132,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 36
+    // CONFIGURATION 35
 "{\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
@@ -1213,7 +1164,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 37
+    // CONFIGURATION 36
 "{\n"
 "        \"dhcp-ddns\": {\n"
 "            \"enable-updates\": true,\n"
@@ -1252,7 +1203,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 38
+    // CONFIGURATION 37
 "{\n"
 "        \"ddns-generated-prefix\": \"global.prefix\",\n"
 "        \"ddns-override-client-update\": true,\n"
@@ -1299,7 +1250,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 39
+    // CONFIGURATION 38
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1386,7 +1337,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 40
+    // CONFIGURATION 39
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1426,7 +1377,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 41
+    // CONFIGURATION 40
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1439,7 +1390,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"subnet6\": [ ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 42
+    // CONFIGURATION 41
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1452,7 +1403,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"subnet6\": [ ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 43
+    // CONFIGURATION 42
 "{\n"
 "        \"preferred-lifetime\": 3000,\n"
 "        \"rebind-timer\": 2000,\n"
@@ -1540,7 +1491,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 44
+    // CONFIGURATION 43
 "{\n"
 "        \"preferred-lifetime\": 3000,\n"
 "        \"rebind-timer\": 2000,\n"
@@ -1573,7 +1524,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 45
+    // CONFIGURATION 44
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1586,7 +1537,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"subnet6\": [ ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 46
+    // CONFIGURATION 45
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1594,7 +1545,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 47
+    // CONFIGURATION 46
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1602,7 +1553,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 48
+    // CONFIGURATION 47
 "{\n"
 "        \"decline-probation-period\": 12345,\n"
 "        \"interfaces-config\": {\n"
@@ -1611,7 +1562,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 49
+    // CONFIGURATION 48
 "{\n"
 "        \"expired-leases-processing\": {\n"
 "            \"flush-reclaimed-timer-wait-time\": 35,\n"
@@ -1627,7 +1578,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 50
+    // CONFIGURATION 49
 "{\n"
 "        \"client-classes\": [\n"
 "            {\n"
@@ -1660,7 +1611,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 51
+    // CONFIGURATION 50
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1682,7 +1633,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 52
+    // CONFIGURATION 51
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1705,7 +1656,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 53
+    // CONFIGURATION 52
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1733,7 +1684,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 54
+    // CONFIGURATION 53
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1761,7 +1712,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 55
+    // CONFIGURATION 54
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1785,7 +1736,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 56
+    // CONFIGURATION 55
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1810,7 +1761,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 57
+    // CONFIGURATION 56
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -1840,7 +1791,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 58
+    // CONFIGURATION 57
 "{\n"
 "        \"hosts-databases\": [\n"
 "            {\n"
@@ -1865,7 +1816,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"renew-timer\": 1000,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 59
+    // CONFIGURATION 58
 "{\n"
 "        \"client-classes\": [\n"
 "            {\n"
@@ -1990,7 +1941,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "            \"comment\": \"A DHCPv6 server\"\n"
 "        }\n"
 "    }\n",
-    // CONFIGURATION 60
+    // CONFIGURATION 59
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -2055,7 +2006,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        ],\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 61
+    // CONFIGURATION 60
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -2068,7 +2019,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        \"statistic-default-sample-count\": 10,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 62
+    // CONFIGURATION 61
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -2076,7 +2027,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 63
+    // CONFIGURATION 62
 "{\n"
 "        \"interfaces-config\": {\n"
 "            \"interfaces\": [ \"*\" ],\n"
@@ -2089,7 +2040,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "        },\n"
 "        \"subnet6\": [ ]\n"
 "    }\n",
-    // CONFIGURATION 64
+    // CONFIGURATION 63
 "{\n"
 "        \"client-classes\": [\n"
 "            {\n"
@@ -2121,7 +2072,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "            }\n"
 "        ]\n"
 "    }\n",
-    // CONFIGURATION 65
+    // CONFIGURATION 64
 "{\n"
 "        \"client-classes\": [\n"
 "            {\n"
@@ -2475,221 +2426,6 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"pools\": [\n"
 "                    {\n"
 "                        \"option-data\": [ ],\n"
-"                        \"pool\": \"2001:db8:1::/80\"\n"
-"                    }\n"
-"                ],\n"
-"                \"preferred-lifetime\": 3000,\n"
-"                \"rapid-commit\": false,\n"
-"                \"rebind-timer\": 2000,\n"
-"                \"relay\": {\n"
-"                    \"ip-addresses\": [ ]\n"
-"                },\n"
-"                \"renew-timer\": 1000,\n"
-"                \"reservations\": [ ],\n"
-"                \"store-extended-info\": false,\n"
-"                \"subnet\": \"2001:db8:1::/64\",\n"
-"                \"t1-percent\": 0.5,\n"
-"                \"t2-percent\": 0.8,\n"
-"                \"valid-lifetime\": 4000\n"
-"            },\n"
-"            {\n"
-"                \"allocator\": \"iterative\",\n"
-"                \"calculate-tee-times\": true,\n"
-"                \"id\": 2,\n"
-"                \"max-preferred-lifetime\": 3000,\n"
-"                \"max-valid-lifetime\": 4000,\n"
-"                \"min-preferred-lifetime\": 3000,\n"
-"                \"min-valid-lifetime\": 4000,\n"
-"                \"option-data\": [ ],\n"
-"                \"pd-allocator\": \"iterative\",\n"
-"                \"pd-pools\": [ ],\n"
-"                \"pools\": [\n"
-"                    {\n"
-"                        \"option-data\": [ ],\n"
-"                        \"pool\": \"2001:db8:2::/80\"\n"
-"                    }\n"
-"                ],\n"
-"                \"preferred-lifetime\": 3000,\n"
-"                \"rapid-commit\": false,\n"
-"                \"rebind-timer\": 2000,\n"
-"                \"relay\": {\n"
-"                    \"ip-addresses\": [ ]\n"
-"                },\n"
-"                \"renew-timer\": 1000,\n"
-"                \"reservations\": [ ],\n"
-"                \"store-extended-info\": false,\n"
-"                \"subnet\": \"2001:db8:2::/64\",\n"
-"                \"t1-percent\": 0.5,\n"
-"                \"t2-percent\": 0.8,\n"
-"                \"valid-lifetime\": 4000\n"
-"            },\n"
-"            {\n"
-"                \"allocator\": \"iterative\",\n"
-"                \"calculate-tee-times\": true,\n"
-"                \"id\": 3,\n"
-"                \"max-preferred-lifetime\": 3000,\n"
-"                \"max-valid-lifetime\": 4000,\n"
-"                \"min-preferred-lifetime\": 3000,\n"
-"                \"min-valid-lifetime\": 4000,\n"
-"                \"option-data\": [ ],\n"
-"                \"pd-allocator\": \"iterative\",\n"
-"                \"pd-pools\": [ ],\n"
-"                \"pools\": [\n"
-"                    {\n"
-"                        \"option-data\": [ ],\n"
-"                        \"pool\": \"2001:db8:3::/80\"\n"
-"                    }\n"
-"                ],\n"
-"                \"preferred-lifetime\": 3000,\n"
-"                \"rapid-commit\": false,\n"
-"                \"rebind-timer\": 2000,\n"
-"                \"relay\": {\n"
-"                    \"ip-addresses\": [ ]\n"
-"                },\n"
-"                \"renew-timer\": 1000,\n"
-"                \"reservations\": [ ],\n"
-"                \"store-extended-info\": false,\n"
-"                \"subnet\": \"2001:db8:3::/64\",\n"
-"                \"t1-percent\": 0.5,\n"
-"                \"t2-percent\": 0.8,\n"
-"                \"valid-lifetime\": 4000\n"
-"            },\n"
-"            {\n"
-"                \"allocator\": \"iterative\",\n"
-"                \"calculate-tee-times\": true,\n"
-"                \"id\": 4,\n"
-"                \"max-preferred-lifetime\": 3000,\n"
-"                \"max-valid-lifetime\": 4000,\n"
-"                \"min-preferred-lifetime\": 3000,\n"
-"                \"min-valid-lifetime\": 4000,\n"
-"                \"option-data\": [ ],\n"
-"                \"pd-allocator\": \"iterative\",\n"
-"                \"pd-pools\": [ ],\n"
-"                \"pools\": [\n"
-"                    {\n"
-"                        \"option-data\": [ ],\n"
-"                        \"pool\": \"2001:db8:4::/80\"\n"
-"                    }\n"
-"                ],\n"
-"                \"preferred-lifetime\": 3000,\n"
-"                \"rapid-commit\": false,\n"
-"                \"rebind-timer\": 2000,\n"
-"                \"relay\": {\n"
-"                    \"ip-addresses\": [ ]\n"
-"                },\n"
-"                \"renew-timer\": 1000,\n"
-"                \"reservations\": [ ],\n"
-"                \"store-extended-info\": false,\n"
-"                \"subnet\": \"2001:db8:4::/64\",\n"
-"                \"t1-percent\": 0.5,\n"
-"                \"t2-percent\": 0.8,\n"
-"                \"valid-lifetime\": 4000\n"
-"            }\n"
-"        ],\n"
-"        \"t1-percent\": 0.5,\n"
-"        \"t2-percent\": 0.8,\n"
-"        \"valid-lifetime\": 4000\n"
-"    }\n",
-    // CONFIGURATION 3
-"{\n"
-"        \"allocator\": \"iterative\",\n"
-"        \"calculate-tee-times\": true,\n"
-"        \"ddns-generated-prefix\": \"myhost\",\n"
-"        \"ddns-override-client-update\": false,\n"
-"        \"ddns-override-no-update\": false,\n"
-"        \"ddns-qualifying-suffix\": \"\",\n"
-"        \"ddns-replace-client-name\": \"never\",\n"
-"        \"ddns-send-updates\": true,\n"
-"        \"ddns-update-on-renew\": false,\n"
-"        \"ddns-use-conflict-resolution\": true,\n"
-"        \"decline-probation-period\": 86400,\n"
-"        \"dhcp-ddns\": {\n"
-"            \"enable-updates\": false,\n"
-"            \"max-queue-size\": 1024,\n"
-"            \"ncr-format\": \"JSON\",\n"
-"            \"ncr-protocol\": \"UDP\",\n"
-"            \"sender-ip\": \"0.0.0.0\",\n"
-"            \"sender-port\": 0,\n"
-"            \"server-ip\": \"127.0.0.1\",\n"
-"            \"server-port\": 53001\n"
-"        },\n"
-"        \"dhcp-queue-control\": {\n"
-"            \"capacity\": 64,\n"
-"            \"enable-queue\": false,\n"
-"            \"queue-type\": \"kea-ring6\"\n"
-"        },\n"
-"        \"dhcp4o6-port\": 0,\n"
-"        \"early-global-reservations-lookup\": false,\n"
-"        \"expired-leases-processing\": {\n"
-"            \"flush-reclaimed-timer-wait-time\": 25,\n"
-"            \"hold-reclaimed-time\": 3600,\n"
-"            \"max-reclaim-leases\": 100,\n"
-"            \"max-reclaim-time\": 250,\n"
-"            \"reclaim-timer-wait-time\": 10,\n"
-"            \"unwarned-reclaim-cycles\": 5\n"
-"        },\n"
-"        \"hooks-libraries\": [ ],\n"
-"        \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n"
-"        \"hostname-char-replacement\": \"\",\n"
-"        \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n"
-"        \"interfaces-config\": {\n"
-"            \"interfaces\": [ \"*\" ],\n"
-"            \"re-detect\": false\n"
-"        },\n"
-"        \"ip-reservations-unique\": true,\n"
-"        \"lease-database\": {\n"
-"            \"type\": \"memfile\"\n"
-"        },\n"
-"        \"mac-sources\": [ \"any\" ],\n"
-"        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": true,\n"
-"            \"packet-queue-size\": 64,\n"
-"            \"thread-pool-size\": 0\n"
-"        },\n"
-"        \"option-data\": [ ],\n"
-"        \"option-def\": [ ],\n"
-"        \"parked-packet-limit\": 256,\n"
-"        \"pd-allocator\": \"iterative\",\n"
-"        \"preferred-lifetime\": 3000,\n"
-"        \"rebind-timer\": 2000,\n"
-"        \"relay-supplied-options\": [ \"65\" ],\n"
-"        \"renew-timer\": 1000,\n"
-"        \"reservations-global\": false,\n"
-"        \"reservations-in-subnet\": true,\n"
-"        \"reservations-lookup-first\": false,\n"
-"        \"reservations-out-of-pool\": false,\n"
-"        \"sanity-checks\": {\n"
-"            \"extended-info-checks\": \"fix\",\n"
-"            \"lease-checks\": \"warn\"\n"
-"        },\n"
-"        \"server-id\": {\n"
-"            \"enterprise-id\": 0,\n"
-"            \"htype\": 0,\n"
-"            \"identifier\": \"\",\n"
-"            \"persist\": true,\n"
-"            \"time\": 0,\n"
-"            \"type\": \"LLT\"\n"
-"        },\n"
-"        \"server-tag\": \"\",\n"
-"        \"shared-networks\": [ ],\n"
-"        \"statistic-default-sample-age\": 0,\n"
-"        \"statistic-default-sample-count\": 20,\n"
-"        \"store-extended-info\": false,\n"
-"        \"subnet6\": [\n"
-"            {\n"
-"                \"allocator\": \"iterative\",\n"
-"                \"calculate-tee-times\": true,\n"
-"                \"id\": 1,\n"
-"                \"max-preferred-lifetime\": 3000,\n"
-"                \"max-valid-lifetime\": 4000,\n"
-"                \"min-preferred-lifetime\": 3000,\n"
-"                \"min-valid-lifetime\": 4000,\n"
-"                \"option-data\": [ ],\n"
-"                \"pd-allocator\": \"iterative\",\n"
-"                \"pd-pools\": [ ],\n"
-"                \"pools\": [\n"
-"                    {\n"
-"                        \"option-data\": [ ],\n"
 "                        \"pool\": \"2001:db8:3::/80\"\n"
 "                    }\n"
 "                ],\n"
@@ -2805,7 +2541,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 4
+    // CONFIGURATION 3
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -3020,7 +2756,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 5
+    // CONFIGURATION 4
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -3145,7 +2881,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 6
+    // CONFIGURATION 5
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -3271,7 +3007,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 7
+    // CONFIGURATION 6
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -3394,7 +3130,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 8
+    // CONFIGURATION 7
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -3517,7 +3253,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 9
+    // CONFIGURATION 8
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -3678,7 +3414,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 10
+    // CONFIGURATION 9
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -3800,7 +3536,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 11
+    // CONFIGURATION 10
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -3924,7 +3660,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 12
+    // CONFIGURATION 11
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -4050,7 +3786,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 13
+    // CONFIGURATION 12
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -4191,7 +3927,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 14
+    // CONFIGURATION 13
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -4315,7 +4051,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 15
+    // CONFIGURATION 14
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -4412,7 +4148,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 16
+    // CONFIGURATION 15
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -4509,7 +4245,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 17
+    // CONFIGURATION 16
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -4615,7 +4351,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 18
+    // CONFIGURATION 17
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -4712,7 +4448,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 19
+    // CONFIGURATION 18
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -4809,7 +4545,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 20
+    // CONFIGURATION 19
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -4950,7 +4686,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 21
+    // CONFIGURATION 20
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -5091,7 +4827,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 22
+    // CONFIGURATION 21
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -5242,7 +4978,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 23
+    // CONFIGURATION 22
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -5370,7 +5106,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 24
+    // CONFIGURATION 23
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -5548,7 +5284,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 25
+    // CONFIGURATION 24
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -5721,7 +5457,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 26
+    // CONFIGURATION 25
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -5900,7 +5636,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 27
+    // CONFIGURATION 26
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -6039,7 +5775,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 28
+    // CONFIGURATION 27
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -6181,7 +5917,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 29
+    // CONFIGURATION 28
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -6271,7 +6007,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 30
+    // CONFIGURATION 29
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -6361,7 +6097,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 31
+    // CONFIGURATION 30
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -6483,7 +6219,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 32
+    // CONFIGURATION 31
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -6605,7 +6341,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 33
+    // CONFIGURATION 32
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -6823,7 +6559,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 34
+    // CONFIGURATION 33
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -6960,7 +6696,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 35
+    // CONFIGURATION 34
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -7105,7 +6841,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 36
+    // CONFIGURATION 35
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -7227,7 +6963,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 37
+    // CONFIGURATION 36
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -7349,7 +7085,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 38
+    // CONFIGURATION 37
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -7471,7 +7207,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 39
+    // CONFIGURATION 38
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -7736,7 +7472,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 40
+    // CONFIGURATION 39
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -7882,7 +7618,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 41
+    // CONFIGURATION 40
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -7972,7 +7708,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 42
+    // CONFIGURATION 41
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -8062,7 +7798,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 43
+    // CONFIGURATION 42
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -8386,7 +8122,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 44
+    // CONFIGURATION 43
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -8542,7 +8278,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 45
+    // CONFIGURATION 44
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -8632,7 +8368,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 46
+    // CONFIGURATION 45
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -8719,7 +8455,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 47
+    // CONFIGURATION 46
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -8806,7 +8542,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 48
+    // CONFIGURATION 47
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -8893,7 +8629,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 49
+    // CONFIGURATION 48
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -8980,7 +8716,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 50
+    // CONFIGURATION 49
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -9116,7 +8852,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 51
+    // CONFIGURATION 50
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -9238,7 +8974,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 52
+    // CONFIGURATION 51
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -9361,7 +9097,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 53
+    // CONFIGURATION 52
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -9489,7 +9225,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 54
+    // CONFIGURATION 53
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -9617,7 +9353,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 55
+    // CONFIGURATION 54
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -9741,7 +9477,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 56
+    // CONFIGURATION 55
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -9866,7 +9602,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 57
+    // CONFIGURATION 56
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -9996,7 +9732,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 58
+    // CONFIGURATION 57
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -10100,7 +9836,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 59
+    // CONFIGURATION 58
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -10343,7 +10079,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 60
+    // CONFIGURATION 59
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -10573,7 +10309,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 61
+    // CONFIGURATION 60
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -10663,7 +10399,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 4000\n"
 "    }\n",
-    // CONFIGURATION 62
+    // CONFIGURATION 61
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -10750,7 +10486,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 63
+    // CONFIGURATION 62
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -10837,7 +10573,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 64
+    // CONFIGURATION 63
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
@@ -10967,7 +10703,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"t2-percent\": 0.8,\n"
 "        \"valid-lifetime\": 7200\n"
 "    }\n",
-    // CONFIGURATION 65
+    // CONFIGURATION 64
 "{\n"
 "        \"allocator\": \"iterative\",\n"
 "        \"calculate-tee-times\": true,\n"
index ec8337b5d938d50d32b3f3ada385d318c2d0d826..07752cdb0a71fe9d5a8ecf56e8ce81bea8e50a29 100644 (file)
 #include <dhcpsrv/shared_network.h>
 #include <dhcpsrv/subnet.h>
 #include <exceptions/exceptions.h>
+#include <testutils/log_utils.h>
 
 #include <boost/pointer_cast.hpp>
 
 #include <gtest/gtest.h>
 
 using namespace isc;
-using namespace isc::dhcp;
 using namespace isc::asiolink;
+using namespace isc::dhcp;
+using namespace isc::dhcp::test;
 using namespace isc::util;
 
 namespace {
@@ -1957,4 +1959,87 @@ TEST(SubnetFetcherTest, getSubnet6ById) {
     EXPECT_EQ("2001:db8:2::/64", subnet->toText());
 }
 
+// Test fixture for subnet identifier auto-generation.
+class SubnetIdTest : public LogContentTest {
+public:
+
+    /// @brief virtual destructor.
+    virtual ~SubnetIdTest() {
+        Subnet::resetSubnetID();
+    }
+};
+
+// Test class for subnets with id = 0.
+class TestSubnet : public Subnet {
+public:
+    // @brief Constructor.
+    //
+    // @param prefix subnet prefix.
+    // @param len prefix length for the subnet.
+    TestSubnet(const IOAddress& prefix, uint8_t len)
+        : Subnet(prefix, len, 0) {
+    }
+
+    // @brief Returns the default address that will be used for pool selection.
+    virtual IOAddress default_pool() const {
+        isc_throw(NotImplemented, "default_pool");
+    }
+
+    /// @brief Instantiates the allocators and their states.
+    virtual void createAllocators() {
+        isc_throw(NotImplemented, "createAllocators");
+    }
+
+    /// @brief Checks if used pool type is valid.
+    virtual void checkType(Lease::Type type) const {
+        isc_throw(NotImplemented, "checkType " << type);
+    }
+};
+
+// Type of pointers to test subnets.
+typedef boost::shared_ptr<TestSubnet> TestSubnetPtr;
+
+// Test subnet identifier auto-generation.
+TEST_F(SubnetIdTest, unnumbered) {
+    // Reset subnet identifier counter.
+    Subnet::resetSubnetID();
+
+    // First subnet.
+    IOAddress addr1("192.0.2.0");
+    uint8_t len1(25);
+    TestSubnetPtr subnet1;
+    ASSERT_NO_THROW(subnet1.reset(new TestSubnet(addr1, len1)));
+    ASSERT_TRUE(subnet1);
+    EXPECT_EQ(1, subnet1->getID());
+    EXPECT_EQ("192.0.2.0/25", subnet1->toText());
+
+    // Second subnet.
+    IOAddress addr2("192.0.2.128");
+    uint8_t len2(25);
+    TestSubnetPtr subnet2;
+    ASSERT_NO_THROW(subnet2.reset(new TestSubnet(addr2, len2)));
+    ASSERT_TRUE(subnet2);
+    EXPECT_EQ(2, subnet2->getID());
+    EXPECT_EQ("192.0.2.128/25", subnet2->toText());
+
+    // Reset subnet identifier counter again to get another log.
+    Subnet::resetSubnetID();
+
+    // Third subnet.
+    IOAddress addr3("2001:db8:1::");
+    uint8_t len3(64);
+    TestSubnetPtr subnet3;
+    ASSERT_NO_THROW(subnet3.reset(new TestSubnet(addr3, len3)));
+    ASSERT_TRUE(subnet3);
+    EXPECT_EQ(1, subnet3->getID());
+    EXPECT_EQ("2001:db8:1::/64", subnet3->toText());
+
+    // Subnet 1 and 3 are logged.
+    std::string msg = "DHCPSRV_UNNUMBERED_CONFIGURED_SUBNET ";
+    msg += "a subnet was configured unnumbered: ";
+    addString(msg + subnet1->toText());
+    addString(msg + subnet3->toText());
+    EXPECT_TRUE(checkFile());
+}
+
 }