]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2402] adapt tests to MT enabled by default
authorAndrei Pavel <andrei@isc.org>
Tue, 7 Feb 2023 12:23:24 +0000 (14:23 +0200)
committerAndrei Pavel <andrei@isc.org>
Tue, 14 Feb 2023 12:23:05 +0000 (14:23 +0200)
15 files changed:
src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc
src/bin/dhcp4/tests/dhcp4_srv_unittest.cc
src/bin/dhcp4/tests/dhcp4_test_utils.cc
src/bin/dhcp4/tests/dhcp4_test_utils.h
src/bin/dhcp4/tests/get_config_unittest.cc
src/bin/dhcp4/tests/hooks_unittest.cc
src/bin/dhcp4/tests/vendor_opts_unittest.cc
src/bin/dhcp6/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc
src/bin/dhcp6/tests/dhcp6_test_utils.cc
src/bin/dhcp6/tests/dhcp6_test_utils.h
src/bin/dhcp6/tests/get_config_unittest.cc
src/bin/dhcp6/tests/hooks_unittest.cc
src/lib/util/tests/multi_threading_mgr_unittest.cc

index 5d152356c4ddfa271fc4093759f7b70fe01d00a8..d0afeab884ec3b01116517c23f1311b4d56f5033 100644 (file)
@@ -32,6 +32,7 @@
 #include <stats/stats_mgr.h>
 #include <testutils/log_utils.h>
 #include <testutils/gtest_utils.h>
+#include <testutils/test_to_element.h>
 #include <util/chrono_time_utils.h>
 #include <util/doubles.h>
 
@@ -327,7 +328,7 @@ public:
         }
 
         ConstElementPtr status;
-        EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+        EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
         ASSERT_TRUE(status);
 
         int rcode;
@@ -530,7 +531,7 @@ public:
         ConstElementPtr x;
         std::string config = createConfigWithOption(param_value, parameter);
         ConstElementPtr json = parseDHCP4(config);
-        EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+        EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
         checkResult(x, 1);
         EXPECT_TRUE(errorContainsPosition(x, "<string>"));
     }
@@ -547,7 +548,7 @@ public:
         ConstElementPtr x;
         std::string config = createConfigWithOption(params);
         ConstElementPtr json = parseDHCP4(config);
-        EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+        EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
         checkResult(x, 1);
         EXPECT_TRUE(errorContainsPosition(x, "<string>"));
     }
@@ -644,7 +645,7 @@ public:
         ConstElementPtr status;
         try {
             json = parseJSON(config);
-            status = configureDhcp4Server(*srv_, json);
+            status = Dhcpv4SrvTest::configure(*srv_, json);
         } catch (const std::exception& ex) {
             ADD_FAILURE() << "Unable to " << operation << ". "
                    << "The following configuration was used: " << std::endl
@@ -787,7 +788,7 @@ public:
         ConstElementPtr json;
 
         EXPECT_NO_THROW(json = parseDHCP4(config, true));
-        EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+        EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
         ASSERT_TRUE(status);
         checkResult(status, 0);
 
@@ -838,7 +839,7 @@ TEST_F(Dhcp4ParserTest, bogusCommand) {
 
     ConstElementPtr x;
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_,
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_,
                     parseJSON("{\"bogus\": 5}")));
 
     // returned value must be 1 (configuration parse error)
@@ -857,7 +858,7 @@ TEST_F(Dhcp4ParserTest, emptyInterfaceConfig) {
                                       "\"valid-lifetime\": 4000 }"));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -879,7 +880,7 @@ TEST_F(Dhcp4ParserTest, emptySubnet) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -900,7 +901,7 @@ TEST_F(Dhcp4ParserTest, outBoundValidLifetime) {
     ASSERT_NO_THROW(json = parseDHCP4(too_small));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     string expected = "subnet configuration failed: "
         "the value of min-valid-lifetime (2000) is not "
         "less than (default) valid-lifetime (1000)";
@@ -914,7 +915,7 @@ TEST_F(Dhcp4ParserTest, outBoundValidLifetime) {
         "\"valid-lifetime\": 2000, \"max-valid-lifetime\": 1000 }";
 
     ASSERT_NO_THROW(json = parseDHCP4(too_large));
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     expected = "subnet configuration failed: "
         "the value of (default) valid-lifetime (2000) is not "
         "less than max-valid-lifetime (1000)";
@@ -929,7 +930,7 @@ TEST_F(Dhcp4ParserTest, outBoundValidLifetime) {
         "\"max-valid-lifetime\": 4000 }";
 
     ASSERT_NO_THROW(json = parseDHCP4(before));
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     expected = "subnet configuration failed: "
         "the value of (default) valid-lifetime (1000) is not "
         "between min-valid-lifetime (2000) and max-valid-lifetime (4000)";
@@ -944,7 +945,7 @@ TEST_F(Dhcp4ParserTest, outBoundValidLifetime) {
         "\"max-valid-lifetime\": 4000 }";
 
     ASSERT_NO_THROW(json = parseDHCP4(after));
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     expected = "subnet configuration failed: "
         "the value of (default) valid-lifetime (5000) is not "
         "between min-valid-lifetime (1000) and max-valid-lifetime (4000)";
@@ -959,7 +960,7 @@ TEST_F(Dhcp4ParserTest, outBoundValidLifetime) {
         "\"max-valid-lifetime\": 1000 }";
 
     ASSERT_NO_THROW(json = parseDHCP4(crossed));
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     expected = "subnet configuration failed: "
         "the value of min-valid-lifetime (2000) is not "
         "less than max-valid-lifetime (1000)";
@@ -978,7 +979,7 @@ TEST_F(Dhcp4ParserTest, outBoundGlobalValidLifetime) {
     ASSERT_NO_THROW(json = parseDHCP4(too_small));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     string expected =
         "the value of min-valid-lifetime (2000) is not "
         "less than (default) valid-lifetime (1000)";
@@ -989,7 +990,7 @@ TEST_F(Dhcp4ParserTest, outBoundGlobalValidLifetime) {
         "\"valid-lifetime\": 2000, \"max-valid-lifetime\": 1000 }";
 
     ASSERT_NO_THROW(json = parseDHCP4(too_large));
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     expected =
         "the value of (default) valid-lifetime (2000) is not "
         "less than max-valid-lifetime (1000)";
@@ -1001,7 +1002,7 @@ TEST_F(Dhcp4ParserTest, outBoundGlobalValidLifetime) {
         "\"max-valid-lifetime\": 4000 }";
 
     ASSERT_NO_THROW(json = parseDHCP4(before));
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     expected =
         "the value of (default) valid-lifetime (1000) is not "
         "between min-valid-lifetime (2000) and max-valid-lifetime (4000)";
@@ -1013,7 +1014,7 @@ TEST_F(Dhcp4ParserTest, outBoundGlobalValidLifetime) {
         "\"max-valid-lifetime\": 4000 }";
 
     ASSERT_NO_THROW(json = parseDHCP4(after));
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     expected =
         "the value of (default) valid-lifetime (5000) is not "
         "between min-valid-lifetime (1000) and max-valid-lifetime (4000)";
@@ -1025,7 +1026,7 @@ TEST_F(Dhcp4ParserTest, outBoundGlobalValidLifetime) {
         "\"max-valid-lifetime\": 1000 }";
 
     ASSERT_NO_THROW(json = parseDHCP4(crossed));
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     expected =
         "the value of min-valid-lifetime (2000) is not "
         "less than max-valid-lifetime (1000)";
@@ -1048,7 +1049,7 @@ TEST_F(Dhcp4ParserTest, unspecifiedRenewTimer) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -1082,7 +1083,7 @@ TEST_F(Dhcp4ParserTest, unspecifiedRebindTimer) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -1118,7 +1119,7 @@ TEST_F(Dhcp4ParserTest, subnetGlobalDefaults) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -1174,7 +1175,7 @@ TEST_F(Dhcp4ParserTest, multipleSubnets) {
     int cnt = 0; // Number of reconfigurations
 
     do {
-        EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+        EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
         checkResult(x, 0);
 
         CfgMgr::instance().commit();
@@ -1233,7 +1234,7 @@ TEST_F(Dhcp4ParserTest, multipleSubnetsExplicitIDs) {
 
     int cnt = 0; // Number of reconfigurations
     do {
-        EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+        EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
         checkResult(x, 0);
 
         CfgMgr::instance().commit();
@@ -1288,7 +1289,7 @@ TEST_F(Dhcp4ParserTest, multipleSubnetsOverlappingIDs) {
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP4(config));
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 1);
     EXPECT_TRUE(errorContainsPosition(x, "<string>"));
 }
@@ -1371,7 +1372,7 @@ TEST_F(Dhcp4ParserTest, reconfigureRemoveSubnet) {
 
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP4(config4));
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     const Subnet4Collection* subnets =
@@ -1383,7 +1384,7 @@ TEST_F(Dhcp4ParserTest, reconfigureRemoveSubnet) {
 
     // Do the reconfiguration (the last subnet is removed)
     ASSERT_NO_THROW(json = parseDHCP4(config_first3));
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     subnets = CfgMgr::instance().getStagingCfg()->getCfgSubnets4()->getAll();
@@ -1401,14 +1402,14 @@ TEST_F(Dhcp4ParserTest, reconfigureRemoveSubnet) {
     /// CASE 2: Configure 4 subnets, then reconfigure and remove one
     /// from in between (not first, not last)
     ASSERT_NO_THROW(json = parseDHCP4(config4));
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     CfgMgr::instance().clear();
 
     // Do reconfiguration
     ASSERT_NO_THROW(json = parseDHCP4(config_second_removed));
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     subnets = CfgMgr::instance().getStagingCfg()->getCfgSubnets4()->getAll();
@@ -1444,7 +1445,7 @@ TEST_F(Dhcp4ParserTest, nextServerGlobal) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -1483,7 +1484,7 @@ TEST_F(Dhcp4ParserTest, nextServerSubnet) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -1578,31 +1579,31 @@ TEST_F(Dhcp4ParserTest, nextServerNegative) {
 
     // check if returned status is always a failure
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json1));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json1));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json2));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json2));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json3));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json3));
     checkResult(status, 0);
     EXPECT_FALSE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json4));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json4));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json5));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json5));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 }
@@ -1630,7 +1631,7 @@ TEST_F(Dhcp4ParserTest, nextServerOverride) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -1678,13 +1679,13 @@ TEST_F(Dhcp4ParserTest, echoClientId) {
 
     // Now check that "false" configuration is really applied.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json_false));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json_false));
     ASSERT_FALSE(CfgMgr::instance().getStagingCfg()->getEchoClientId());
 
     CfgMgr::instance().clear();
 
     // Now check that "true" configuration is really applied.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json_true));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json_true));
     ASSERT_TRUE(CfgMgr::instance().getStagingCfg()->getEchoClientId());
 
     // In any case revert back to the default value (true)
@@ -1715,7 +1716,7 @@ TEST_F(Dhcp4ParserTest, matchClientIdNoGlobal) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(status, 0);
 
     CfgSubnets4Ptr cfg = CfgMgr::instance().getStagingCfg()->getCfgSubnets4();
@@ -1761,7 +1762,7 @@ TEST_F(Dhcp4ParserTest, matchClientIdGlobal) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(status, 0);
 
     CfgSubnets4Ptr cfg = CfgMgr::instance().getStagingCfg()->getCfgSubnets4();
@@ -1806,7 +1807,7 @@ TEST_F(Dhcp4ParserTest, authoritativeNoGlobal) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(status, 0);
 
     CfgSubnets4Ptr cfg = CfgMgr::instance().getStagingCfg()->getCfgSubnets4();
@@ -1852,7 +1853,7 @@ TEST_F(Dhcp4ParserTest, authoritativeGlobal) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(status, 0);
 
     CfgSubnets4Ptr cfg = CfgMgr::instance().getStagingCfg()->getCfgSubnets4();
@@ -1897,7 +1898,7 @@ TEST_F(Dhcp4ParserTest, subnetLocal) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value should be 0 (configuration success)
     checkResult(status, 0);
@@ -1940,7 +1941,7 @@ TEST_F(Dhcp4ParserTest, multiplePools) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(status, 0);
 
     const Subnet4Collection* subnets =
@@ -1989,7 +1990,7 @@ TEST_F(Dhcp4ParserTest, poolOutOfSubnet) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value must be 1 (values error)
     // as the pool does not belong to that subnet
@@ -2015,7 +2016,7 @@ TEST_F(Dhcp4ParserTest, poolPrefixLen) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value must be 0 (configuration accepted)
     checkResult(status, 0);
@@ -2111,7 +2112,7 @@ TEST_F(Dhcp4ParserTest, badPools) {
     ASSERT_NO_THROW(json7 = parseDHCP4(config_bogus7));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json1));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json1));
 
     // check if returned status is always a failure
     checkResult(status, 1);
@@ -2119,37 +2120,37 @@ TEST_F(Dhcp4ParserTest, badPools) {
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json2));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json2));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json3));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json3));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json4));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json4));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json5));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json5));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json6));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json6));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json7));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json7));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 }
@@ -2233,7 +2234,7 @@ TEST_F(Dhcp4ParserTest, badSubnetValues) {
             ASSERT_NO_THROW(config = parseDHCP4((*scenario).config_json_))
                             << "invalid json, broken test";
             ConstElementPtr status;
-            EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, config));
+            EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, config));
             checkResult(status, 1);
             EXPECT_EQ(comment_->stringValue(), (*scenario).exp_error_msg_);
         }
@@ -2257,7 +2258,7 @@ TEST_F(Dhcp4ParserTest, unknownInterface) {
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP4(config, true));
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 }
@@ -2286,7 +2287,7 @@ TEST_F(Dhcp4ParserTest, optionDefIpv4Address) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -2319,7 +2320,7 @@ TEST_F(Dhcp4ParserTest, optionDefIpv4Address) {
     // configuration and should result in removal of the option 100 from the
     // libdhcp++. Note DHCP4 or OPTION_DEFS parsers do not accept empty maps.
     json.reset(new MapElement());
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(status, 0);
 
     EXPECT_FALSE(LibDHCP::getRuntimeOptionDef("isc", 100));
@@ -2351,7 +2352,7 @@ TEST_F(Dhcp4ParserTest, optionDefRecord) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -2407,7 +2408,7 @@ TEST_F(Dhcp4ParserTest, optionDefMultiple) {
 
     // Use the configuration string to create new option definitions.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -2474,7 +2475,7 @@ TEST_F(Dhcp4ParserTest, optionDefDuplicate) {
 
     // Use the configuration string to create new option definitions.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
@@ -2522,7 +2523,7 @@ TEST_F(Dhcp4ParserTest, optionDefArray) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -2565,7 +2566,7 @@ TEST_F(Dhcp4ParserTest, optionDefEncapsulate) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -2600,7 +2601,7 @@ TEST_F(Dhcp4ParserTest, optionDefInvalidName) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -2625,7 +2626,7 @@ TEST_F(Dhcp4ParserTest, optionDefInvalidType) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -2651,7 +2652,7 @@ TEST_F(Dhcp4ParserTest, optionDefInvalidRecordType) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -2677,7 +2678,7 @@ TEST_F(Dhcp4ParserTest, optionIntegerTypes) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 0);
@@ -2702,7 +2703,7 @@ TEST_F(Dhcp4ParserTest, optionDefInvalidEncapsulatedSpace) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -2731,7 +2732,7 @@ TEST_F(Dhcp4ParserTest, optionDefEncapsulatedSpaceAndArray) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -2757,7 +2758,7 @@ TEST_F(Dhcp4ParserTest, optionDefEncapsulateOwnSpace) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -2791,7 +2792,7 @@ TEST_F(Dhcp4ParserTest, optionStandardDefOverride) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -2820,7 +2821,7 @@ TEST_F(Dhcp4ParserTest, optionStandardDefOverride) {
     ASSERT_NO_THROW(json = parseOPTION_DEFS(config));
 
     // Use the configuration string to create new option definition.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -2839,7 +2840,7 @@ TEST_F(Dhcp4ParserTest, optionStandardDefOverride) {
     extractConfig(config);
 
     // Use the configuration string to create new option definition.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     // Expecting success.
     checkResult(status, 0);
@@ -2881,7 +2882,7 @@ TEST_F(Dhcp4ParserTest, optionDataDefaultsGlobal) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     // These options are global
@@ -2952,7 +2953,7 @@ TEST_F(Dhcp4ParserTest, optionDataDefaultsSubnet) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     // These options are subnet options
@@ -3035,7 +3036,7 @@ TEST_F(Dhcp4ParserTest, optionDataTwoSpaces) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -3111,7 +3112,7 @@ TEST_F(Dhcp4ParserTest, optionDataEncapsulate) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -3167,7 +3168,7 @@ TEST_F(Dhcp4ParserTest, optionDataEncapsulate) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -3229,7 +3230,7 @@ TEST_F(Dhcp4ParserTest, optionDataInSingleSubnet) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     Subnet4Ptr subnet = CfgMgr::instance().getStagingCfg()->
@@ -3378,7 +3379,7 @@ TEST_F(Dhcp4ParserTest, optionDataInMultipleSubnets) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     Subnet4Ptr subnet1 = CfgMgr::instance().getStagingCfg()->
@@ -3451,7 +3452,7 @@ TEST_F(Dhcp4ParserTest, optionDataSinglePool) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     Subnet4Ptr subnet = CfgMgr::instance().getStagingCfg()->getCfgSubnets4()->
@@ -3525,7 +3526,7 @@ TEST_F(Dhcp4ParserTest, optionDataMultiplePools) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     Subnet4Ptr subnet = CfgMgr::instance().getStagingCfg()->getCfgSubnets4()->
@@ -3640,7 +3641,7 @@ TEST_F(Dhcp4ParserTest, optionDataValidHexLiterals) {
         ConstElementPtr json;
         ASSERT_NO_THROW(json = parseDHCP4(config));
 
-        EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+        EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
         checkResult(x, 0);
 
         Subnet4Ptr subnet = CfgMgr::instance().getStagingCfg()->
@@ -3686,7 +3687,7 @@ TEST_F(Dhcp4ParserTest, stdOptionData) {
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP4(config));
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     Subnet4Ptr subnet = CfgMgr::instance().getStagingCfg()->
@@ -3741,7 +3742,7 @@ TEST_F(Dhcp4ParserTest, DISABLED_Uint32Parser) {
     ConstElementPtr status;
 
     // CASE 1: 0 - minimum value, should work
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_,
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_,
                     parseDHCP4("{\"renew-timer\": 0}")));
 
     // returned value must be ok (0 is a proper value)
@@ -3749,7 +3750,7 @@ TEST_F(Dhcp4ParserTest, DISABLED_Uint32Parser) {
     /// @todo: check that the renew-timer is really 0
 
     // CASE 2: 4294967295U (UINT_MAX) should work as well
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_,
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_,
                     parseDHCP4("{\"renew-timer\": 4294967295}")));
 
     // returned value must be ok (0 is a proper value)
@@ -3757,7 +3758,7 @@ TEST_F(Dhcp4ParserTest, DISABLED_Uint32Parser) {
     /// @todo: check that the renew-timer is really 4294967295U
 
     // CASE 3: 4294967296U (UINT_MAX + 1) should not work
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_,
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_,
                     parseJSON("{\"renew-timer\": 4294967296}")));
 
     // returned value must be rejected (1 configuration error)
@@ -3765,7 +3766,7 @@ TEST_F(Dhcp4ParserTest, DISABLED_Uint32Parser) {
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     // CASE 4: -1 (UINT_MIN -1 ) should not work
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_,
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_,
                     parseJSON("{\"renew-timer\": -1}")));
 
     // returned value must be rejected (1 configuration error)
@@ -3815,7 +3816,7 @@ TEST_F(Dhcp4ParserTest, slpOptions) {
     ASSERT_NO_THROW(json = parseDHCP4(config, true));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     // Get options
@@ -3890,7 +3891,7 @@ TEST_F(Dhcp4ParserTest, stdOptionDataEncapsulate) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -3945,7 +3946,7 @@ TEST_F(Dhcp4ParserTest, stdOptionDataEncapsulate) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -4026,7 +4027,7 @@ TEST_F(Dhcp4ParserTest, vendorOptionsHex) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -4082,7 +4083,7 @@ TEST_F(Dhcp4ParserTest, vendorOptionsCsv) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -4106,8 +4107,8 @@ TEST_F(Dhcp4ParserTest, vendorOptionsCsv) {
 // Helper function to return a configuration containing an arbitrary number
 // of hooks libraries.
 std::string
-buildHooksLibrariesConfig(const std::vector<std::string>& libraries,
-                          bool multi_threading) {
+buildHooksLibrariesConfig(const std::vector<std::string>& libraries = {},
+                          bool multi_threading = true) {
 
     // Create the first part of the configuration string.
     string config =
@@ -4151,34 +4152,17 @@ buildHooksLibrariesConfig(const std::vector<std::string>& libraries,
         "    \"subnet\": \"192.0.2.0/24\""
         " } ]");
 
-    if (multi_threading) {
-        config += string(
-            ","
-            "\"multi-threading\": {"
-            "    \"enable-multi-threading\": true"
-            "}");
-    }
+        config += R"(,
+    "multi-threading": {
+        "enable-multi-threading": )" +
+            string(multi_threading ? "true" : "false") + R"(
+    })";
 
     config += string("}");
 
     return (config);
 }
 
-// Convenience function for creating hooks library configuration with one or
-// two character string constants.
-std::string
-buildHooksLibrariesConfig(const char* library1 = NULL,
-                          const char* library2 = NULL) {
-    std::vector<std::string> libraries;
-    if (library1 != NULL) {
-        libraries.push_back(string(library1));
-        if (library2 != NULL) {
-            libraries.push_back(string(library2));
-        }
-    }
-    return (buildHooksLibrariesConfig(libraries, false));
-}
-
 // The goal of this test is to verify the configuration of hooks libraries if
 // none are specified.
 TEST_F(Dhcp4ParserTest, NoHooksLibraries) {
@@ -4198,12 +4182,12 @@ TEST_F(Dhcp4ParserTest, NoHooksLibraries) {
 // Verify parsing fails with one library that will fail validation.
 TEST_F(Dhcp4ParserTest, InvalidLibrary) {
     // Parse a configuration containing a failing library.
-    string config = buildHooksLibrariesConfig(NOT_PRESENT_LIBRARY);
+    string config = buildHooksLibrariesConfig({NOT_PRESENT_LIBRARY});
 
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP4(config));
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // The status object must not be NULL
     ASSERT_TRUE(status);
@@ -4220,8 +4204,9 @@ TEST_F(Dhcp4ParserTest, LibrariesSpecified) {
     EXPECT_FALSE(checkMarkerFileExists(UNLOAD_MARKER_FILE));
 
     // Set up the configuration with two libraries and load them.
-    string config = buildHooksLibrariesConfig(CALLOUT_LIBRARY_1,
-                                              CALLOUT_LIBRARY_2);
+    // Disable multi-threading since one of the libraries is single-threaded.
+    string config = buildHooksLibrariesConfig({CALLOUT_LIBRARY_1, CALLOUT_LIBRARY_2},
+                                              /* multi_threading = */ false);
     ASSERT_TRUE(executeConfiguration(config,
                                      "load two valid libraries"));
 
@@ -4263,7 +4248,7 @@ TEST_F(Dhcp4ParserTest, IncompatibleLibrary2Specified) {
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP4(config));
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // The status object must not be NULL
     ASSERT_TRUE(status);
@@ -4297,7 +4282,7 @@ TEST_F(Dhcp4ParserTest, IncompatibleLibrary3Specified) {
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP4(config));
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // The status object must not be NULL
     ASSERT_TRUE(status);
@@ -4341,7 +4326,7 @@ TEST_F(Dhcp4ParserTest, selectedInterfaces) {
     EXPECT_FALSE(test_config.socketOpen("eth1", AF_INET));
 
     // Apply configuration.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -4380,7 +4365,7 @@ TEST_F(Dhcp4ParserTest, allInterfaces) {
     ASSERT_FALSE(test_config.socketOpen("eth1", AF_INET));
 
     // Apply configuration.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -4416,7 +4401,7 @@ TEST_F(Dhcp4ParserTest, selectedInterfacesAndAddresses) {
     ASSERT_FALSE(test_config.socketOpen("eth1", "192.0.2.5"));
 
     // Apply configuration.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -4465,7 +4450,7 @@ TEST_F(Dhcp4ParserTest, d2ClientConfigValid) {
     extractConfig(config_str);
 
     // Pass the configuration in for parsing.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, config));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -4541,7 +4526,7 @@ TEST_F(Dhcp4ParserTest, d2ClientConfigMoveToGlobal) {
     extractConfig(config_str);
 
     // Pass the configuration in for parsing.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, config));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -4626,7 +4611,7 @@ TEST_F(Dhcp4ParserTest, d2ClientConfigBoth) {
     extractConfig(config_str);
 
     // Pass the configuration in for parsing.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, config));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -4690,7 +4675,7 @@ TEST_F(Dhcp4ParserTest, invalidD2ClientConfig) {
     ASSERT_NO_THROW(config = parseDHCP4(config_str));
 
     // Configuration should not throw, but should fail.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, config));
 
     // check if returned status is failed.
     checkResult(status, 1);
@@ -4728,7 +4713,7 @@ TEST_F(Dhcp4ParserTest, subnetRelayInfo) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value should be 0 (configuration success)
     checkResult(status, 0);
@@ -4765,7 +4750,7 @@ TEST_F(Dhcp4ParserTest, subnetRelayInfoList) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value should be 0 (configuration success)
     checkResult(status, 0);
@@ -4814,7 +4799,7 @@ TEST_F(Dhcp4ParserTest, classifySubnets) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     const Subnet4Collection* subnets =
@@ -4905,7 +4890,7 @@ TEST_F(Dhcp4ParserTest, classifyPools) {
     ASSERT_NO_THROW(json = parseDHCP4(config, true));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     const Subnet4Collection* subnets =
@@ -5053,7 +5038,7 @@ TEST_F(Dhcp4ParserTest, reservations) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     // Make sure all subnets have been successfully configured. There is no
@@ -5206,7 +5191,7 @@ TEST_F(Dhcp4ParserTest, reservationWithOptionDefinition) {
     ASSERT_NO_THROW(json = parseDHCP4(config, true));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     // Hosts configuration must be available.
@@ -5261,7 +5246,7 @@ TEST_F(Dhcp4ParserTest, reservationBogus) {
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 1);
 
     EXPECT_THROW(parseDHCP4(config), Dhcp4ParseError);
@@ -5291,7 +5276,7 @@ TEST_F(Dhcp4ParserTest, reservationBogus) {
     // Remove existing configuration, if any.
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 1);
 
     // Case 3: Broken specification of option data.
@@ -5322,7 +5307,7 @@ TEST_F(Dhcp4ParserTest, reservationBogus) {
     // Remove existing configuration, if any.
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 1);
 }
 
@@ -5394,7 +5379,7 @@ TEST_F(Dhcp4ParserTest, hostReservationPerSubnet) {
     ASSERT_NO_THROW(json = parseDHCP4(hr_config));
     extractConfig(hr_config);
     ConstElementPtr result;
-    EXPECT_NO_THROW(result = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(result = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value should be 0 (success)
     checkResult(result, 0);
@@ -5491,7 +5476,7 @@ TEST_F(Dhcp4ParserTest, hostReservationGlobal) {
     ASSERT_NO_THROW(json = parseDHCP4(hr_config));
     extractConfig(hr_config);
     ConstElementPtr result;
-    EXPECT_NO_THROW(result = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(result = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value should be 0 (success)
     checkResult(result, 0);
@@ -5541,7 +5526,7 @@ TEST_F(Dhcp4ParserTest, declineTimerDefault) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -5564,7 +5549,7 @@ TEST_F(Dhcp4ParserTest, dhcp4o6portDefault) {
     extractConfig(config_txt);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, config));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -5588,7 +5573,7 @@ TEST_F(Dhcp4ParserTest, declineTimer) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -5611,7 +5596,7 @@ TEST_F(Dhcp4ParserTest, declineTimerError) {
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseJSON(config));
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // returned value should be 1 (error)
     checkResult(status, 1);
@@ -5645,7 +5630,7 @@ TEST_F(Dhcp4ParserTest, expiredLeasesProcessing) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // Returned value should be 0 (success)
     checkResult(status, 0);
@@ -5686,7 +5671,7 @@ TEST_F(Dhcp4ParserTest, expiredLeasesProcessingError) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // Returned value should be 0 (error)
     checkResult(status, 1);
@@ -5714,7 +5699,7 @@ TEST_F(Dhcp4ParserTest, 4o6default) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -5749,7 +5734,7 @@ TEST_F(Dhcp4ParserTest, 4o6subnet) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -5813,15 +5798,15 @@ TEST_F(Dhcp4ParserTest, 4o6subnetBogus) {
     ASSERT_NO_THROW(json3 = parseDHCP4(config[0]));
 
     // Check that the first config is rejected.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json1));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json1));
     checkResult(status, 1);
 
     // Check that the second config is rejected.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json2));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json2));
     checkResult(status, 1);
 
     // Check that the third config is rejected.
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json3));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json3));
     checkResult(status, 1);
 }
 
@@ -5845,7 +5830,7 @@ TEST_F(Dhcp4ParserTest, 4o6iface) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -5882,7 +5867,7 @@ TEST_F(Dhcp4ParserTest, 4o6subnetIface) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -5921,7 +5906,7 @@ TEST_F(Dhcp4ParserTest, 4o6subnetInterfaceId) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -5972,7 +5957,7 @@ TEST_F(Dhcp4ParserTest, validClientClassDictionary) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -6039,7 +6024,7 @@ TEST_F(Dhcp4ParserTest, clientClassValidLifetime) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW_LOG(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW_LOG(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -6096,7 +6081,7 @@ TEST_F(Dhcp4ParserTest, templateClientClassValidLifetime) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW_LOG(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW_LOG(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -6996,7 +6981,7 @@ TEST_F(Dhcp4ParserTest, globalReservations) {
     ASSERT_NO_THROW(json = parseDHCP4(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(x, 0);
 
     // Make sure all subnets have been successfully configured. There is no
@@ -7164,18 +7149,32 @@ TEST_F(Dhcp4ParserTest, dhcpQueueControl) {
     struct Scenario {
         std::string description_;
         std::string json_;
+        std::string mt_json_;
     };
 
     std::vector<Scenario> scenarios = {
         {
         "no entry",
-        ""
+        "",
+        "",
         },
         {
         "queue disabled",
         "{ \n"
         "   \"enable-queue\": false \n"
-        "} \n"
+        "} \n",
+        R"("multi-threading": {
+            "enable-multi-threading": false
+        })",
+        },
+        {
+        "queue enabled at first, but gets forcefully disabled by MT",
+        "{ \n"
+        "   \"enable-queue\": true \n"
+        "} \n",
+        R"("multi-threading": {
+            "enable-multi-threading": true
+        })",
         },
         {
         "queue disabled, arbitrary content allowed",
@@ -7183,14 +7182,20 @@ TEST_F(Dhcp4ParserTest, dhcpQueueControl) {
         "   \"enable-queue\": false, \n"
         "   \"foo\": \"bogus\", \n"
         "   \"random-int\" : 1234 \n"
-        "} \n"
+        "} \n",
+        R"("multi-threading": {
+            "enable-multi-threading": false
+        })",
         },
         {
         "queue enabled, with queue-type",
         "{ \n"
         "   \"enable-queue\": true, \n"
         "   \"queue-type\": \"some-type\" \n"
-        "} \n"
+        "} \n",
+        R"("multi-threading": {
+            "enable-multi-threading": false
+        })",
         },
         {
         "queue enabled with queue-type and arbitrary content",
@@ -7199,7 +7204,10 @@ TEST_F(Dhcp4ParserTest, dhcpQueueControl) {
         "   \"queue-type\": \"some-type\", \n"
         "   \"foo\": \"bogus\", \n"
         "   \"random-int\" : 1234 \n"
-        "} \n"
+        "} \n",
+        R"("multi-threading": {
+            "enable-multi-threading": false
+        })",
         }
     };
 
@@ -7222,8 +7230,10 @@ TEST_F(Dhcp4ParserTest, dhcpQueueControl) {
             if (!scenario.json_.empty()) {
                os << ",\n \"dhcp-queue-control\": "  <<  scenario.json_;
             }
-
-            os << "} \n";
+            if (!scenario.mt_json_.empty()) {
+                os << ",\n" << scenario.mt_json_;
+            }
+            os << "\n}\n";
 
             // Configure the server. This should succeed.
             configure(os.str(), CONTROL_RESULT_SUCCESS, "");
@@ -7249,8 +7259,18 @@ TEST_F(Dhcp4ParserTest, dhcpQueueControl) {
             // Add the defaults to expected queue control.
             SimpleParser4::setDefaults(exp_control, SimpleParser4::DHCP_QUEUE_CONTROL4_DEFAULTS);
 
+            // This specific scenario is the only one where we expect enable-queue
+            // to be changed from what the user set it to.
+            if (scenario.description_ == "queue enabled at first, but gets forcefully disabled by MT") {
+                exp_control->set("enable-queue", Element::create(false));
+            }
+
             // Verify that the staged queue control equals the expected queue control.
-            EXPECT_TRUE(staged_control->equals(*exp_control));
+            EXPECT_TRUE(staged_control->equals(*exp_control))
+#ifdef HAVE_CREATE_UNIFIED_DIFF
+                << "\nDiff:\n" << isc::test::generateDiff(prettyPrint(staged_control), prettyPrint(exp_control)) << "\n"
+#endif
+            ;
         }
     }
 }
@@ -7409,7 +7429,7 @@ TEST_F(Dhcp4ParserTest, storeExtendedInfoNoGlobal) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(status, 0);
 
     CfgSubnets4Ptr cfg = CfgMgr::instance().getStagingCfg()->getCfgSubnets4();
@@ -7455,7 +7475,7 @@ TEST_F(Dhcp4ParserTest, storeExtendedInfoGlobal) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(status, 0);
 
     CfgSubnets4Ptr cfg = CfgMgr::instance().getStagingCfg()->getCfgSubnets4();
@@ -7491,7 +7511,7 @@ TEST_F(Dhcp4ParserTest, statsDefaultLimits) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(status, 0);
 
     CfgMgr::instance().commit();
@@ -7513,7 +7533,7 @@ TEST_F(Dhcp4ParserTest, multiThreadingDefaultSettings) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(status, 0);
 
     ConstElementPtr cfg = CfgMgr::instance().getStagingCfg()->getDHCPMultiThreading();
@@ -7521,7 +7541,7 @@ TEST_F(Dhcp4ParserTest, multiThreadingDefaultSettings) {
 
     std::string content_json =
         "{"
-        "    \"enable-multi-threading\": false,\n"
+        "    \"enable-multi-threading\": true,\n"
         "    \"thread-pool-size\": 0,\n"
         "    \"packet-queue-size\": 64\n"
         "}";
@@ -7550,7 +7570,7 @@ TEST_F(Dhcp4ParserTest, multiThreadingSettings) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     checkResult(status, 0);
 
     ConstElementPtr cfg = CfgMgr::instance().getStagingCfg()->getDHCPMultiThreading();
index 505e15e1f8036782a96892c4be1f9cafb6f2f1e1..46072020e4e29fe6b37cbcabeef2bac7198e4633 100644 (file)
 #include <boost/scoped_ptr.hpp>
 #include <gtest/gtest.h>
 
-#include <cstdlib>
 #include <fstream>
 #include <iomanip>
-#include <iostream>
+#include <regex>
 #include <sstream>
 #include <thread>
 
@@ -119,7 +118,6 @@ public:
             socket_path_ = sandbox.join("kea4.sock");
         }
         reset();
-        MultiThreadingMgr::instance().setMode(false);
     }
 
     /// @brief Destructor
@@ -132,7 +130,6 @@ public:
         CommandMgr::instance().setConnectionTimeout(TIMEOUT_DHCP_SERVER_RECEIVE_COMMAND);
 
         server_.reset();
-        MultiThreadingMgr::instance().setMode(false);
     };
 
     /// @brief Returns pointer to the server's IO service.
@@ -449,7 +446,6 @@ TEST_F(CtrlChannelDhcpv4SrvTest, libreload) {
     // Load two libraries
     HookLibsCollection libraries;
     libraries.push_back(make_pair(CALLOUT_LIBRARY_1, ConstElementPtr()));
-    libraries.push_back(make_pair(CALLOUT_LIBRARY_2, ConstElementPtr()));
     HooksManager::loadLibraries(libraries);
 
     // Check they are loaded.
@@ -457,11 +453,7 @@ TEST_F(CtrlChannelDhcpv4SrvTest, libreload) {
         HooksManager::getLibraryInfo();
     ASSERT_TRUE(libraries == loaded_libraries);
 
-    // ... which also included checking that the marker file created by the
-    // load functions exists and holds the correct value (of "12" - the
-    // first library appends "1" to the file, the second appends "2"). Also
-    // check that the unload marker file does not yet exist.
-    EXPECT_TRUE(checkMarkerFile(LOAD_MARKER_FILE, "12"));
+    EXPECT_TRUE(checkMarkerFile(LOAD_MARKER_FILE, "1"));
     EXPECT_FALSE(checkMarkerFileExists(UNLOAD_MARKER_FILE));
 
     // Now execute the "libreload" command.  This should cause the libraries
@@ -476,8 +468,8 @@ TEST_F(CtrlChannelDhcpv4SrvTest, libreload) {
     // Check that the libraries have unloaded and reloaded.  The libraries are
     // unloaded in the reverse order to which they are loaded.  When they load,
     // they should append information to the loading marker file.
-    EXPECT_TRUE(checkMarkerFile(UNLOAD_MARKER_FILE, "21"));
-    EXPECT_TRUE(checkMarkerFile(LOAD_MARKER_FILE, "1212"));
+    EXPECT_TRUE(checkMarkerFile(UNLOAD_MARKER_FILE, "1"));
+    EXPECT_TRUE(checkMarkerFile(LOAD_MARKER_FILE, "11"));
 }
 
 // Check that the "libreload" command will fail to reload libraries which are
@@ -489,6 +481,10 @@ TEST_F(CtrlChannelDhcpv4SrvTest, libreloadFailMultiThreading) {
     ASSERT_FALSE(checkMarkerFileExists(LOAD_MARKER_FILE));
     ASSERT_FALSE(checkMarkerFileExists(UNLOAD_MARKER_FILE));
 
+    // Disable multi-threading to temporarily trick the hook manager
+    // into loading single-threaded libraries.
+    MultiThreadingMgr::instance().setMode(false);
+
     // Load two libraries
     HookLibsCollection libraries;
     libraries.push_back(make_pair(CALLOUT_LIBRARY_1, ConstElementPtr()));
@@ -1144,16 +1140,22 @@ TEST_F(CtrlChannelDhcpv4SrvTest, statusGet) {
 
     auto found_multi_threading = arguments->get("multi-threading-enabled");
     ASSERT_TRUE(found_multi_threading);
-    EXPECT_FALSE(found_multi_threading->boolValue());
+    EXPECT_TRUE(found_multi_threading->boolValue());
 
     auto found_thread_count = arguments->get("thread-pool-size");
-    ASSERT_FALSE(found_thread_count);
+    ASSERT_TRUE(found_thread_count);
+    // The default value varies between systems.
+    // Let's just make sure it's a positive value.
+    EXPECT_LE(0, found_thread_count->intValue());
 
     auto found_queue_size = arguments->get("packet-queue-size");
-    ASSERT_FALSE(found_queue_size);
+    ASSERT_TRUE(found_queue_size);
+    EXPECT_EQ(64, found_queue_size->intValue());
 
     auto found_queue_stats = arguments->get("packet-queue-statistics");
-    ASSERT_FALSE(found_queue_stats);
+    ASSERT_TRUE(found_queue_stats);
+    EXPECT_TRUE(regex_match(found_queue_stats->str(),
+                            regex("[ 0\\.[0-9]+, 0\\.[0-9]+, 0\\.[0-9]+ ]")));
 
     MultiThreadingMgr::instance().setMode(true);
     MultiThreadingMgr::instance().setThreadPoolSize(4);
index a6840f6b29ec70707c48063c0eb1ab5b95b0f18e..d4d3acfc9f52a6ab85482d4958563b5f31b16814 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2011-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -3098,7 +3098,7 @@ TEST_F(Dhcpv4SrvTest, nextServerOverride) {
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP4(config, true));
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
 
     CfgMgr::instance().commit();
 
@@ -3160,7 +3160,7 @@ TEST_F(Dhcpv4SrvTest, nextServerGlobal) {
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP4(config, true));
 
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
 
     CfgMgr::instance().commit();
 
@@ -3228,7 +3228,7 @@ TEST_F(Dhcpv4SrvTest, matchClassification) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = config::parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -3342,7 +3342,7 @@ TEST_F(Dhcpv4SrvTest, matchClassificationOptionName) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = config::parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -3393,7 +3393,7 @@ TEST_F(Dhcpv4SrvTest, matchClassificationOptionDef) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = config::parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -3449,7 +3449,7 @@ TEST_F(Dhcpv4SrvTest, subnetClassPriority) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = config::parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -3523,7 +3523,7 @@ TEST_F(Dhcpv4SrvTest, subnetGlobalPriority) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = config::parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -3596,7 +3596,7 @@ TEST_F(Dhcpv4SrvTest, classGlobalPriority) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = config::parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -3679,7 +3679,7 @@ TEST_F(Dhcpv4SrvTest, classGlobalPersistency) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = config::parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -3813,7 +3813,7 @@ TEST_F(Dhcpv4SrvTest, clientPoolClassify) {
     ASSERT_NO_THROW(json = parseDHCP4(config, true));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
 
     CfgMgr::instance().commit();
 
@@ -3881,7 +3881,7 @@ TEST_F(Dhcpv4SrvTest, clientPoolClassifyKnown) {
     ASSERT_NO_THROW(json = parseDHCP4(config, true));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
 
     CfgMgr::instance().commit();
 
@@ -3937,7 +3937,7 @@ TEST_F(Dhcpv4SrvTest, clientPoolClassifyUnknown) {
     ASSERT_NO_THROW(json = parseDHCP4(config, true));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
 
     CfgMgr::instance().commit();
 
@@ -4001,7 +4001,7 @@ TEST_F(Dhcpv4SrvTest, privateOption) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = config::parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -4904,7 +4904,6 @@ TEST_F(Dhcpv4SrvTest, userContext) {
 
     // This config has one subnet with user-context with one
     // pool (also with context). Make sure the configuration could be accepted.
-    cout << CONFIGS[3] << endl;
     EXPECT_NO_THROW(configure(CONFIGS[3]));
 
     // Now make sure the data was not lost.
@@ -5000,7 +4999,7 @@ TEST_F(Dhcpv4SrvTest, fixedFieldsInClassOrder) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = config::parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
index c0ee11e0fb49b0fce82f57b53fc16f25b0728d84..01596e6550646f094d4ba81535a497179cb7ba1e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2013-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -116,6 +116,16 @@ void Dhcpv4SrvTest::addPrlOption(Pkt4Ptr& pkt) {
     pkt->addOption(option_prl);
 }
 
+ConstElementPtr
+Dhcpv4SrvTest::configure(Dhcpv4Srv& server, ConstElementPtr config) {
+    ConstElementPtr const status(configureDhcp4Server(server, config));
+
+    // Simulate the application of MT config such as in ControlledDhcpvXSrv::processConfig().
+    CfgMultiThreading::apply(CfgMgr::instance().getStagingCfg()->getDHCPMultiThreading());
+
+    return status;
+}
+
 void
 Dhcpv4SrvTest::configureRequestedOptions() {
     // dns-servers
index e500ee0ac6fa8041d2fd6b3e83bb6fbbac5ddac4..2de72d943cf87139ebf87df2db2f700f3172b4b4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2013-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -375,6 +375,17 @@ public:
     /// @param pkt packet to add PRL option to.
     void addPrlOption(Pkt4Ptr& pkt);
 
+    /// @brief Used to configure a server for tests.
+    ///
+    /// A wrapper over configureDhcp4Server() to which any other
+    /// simulations of production code are added.
+    ///
+    /// @brief server the server being tested
+    /// @brief config the configuration the server is configured with
+    ///
+    /// @return a JSON-formatted status of the reconfiguration
+    static ConstElementPtr configure(Dhcpv4Srv& server, isc::data::ConstElementPtr config);
+
     /// @brief Configures options being requested in the PRL option.
     ///
     /// The lpr-servers option is NOT configured here although it is
index 438c9ac5010969b1edfaef01e53f6b3b5b34e9e3..9168c2cdbec8f3f43aec9b6a34f87f0ec49f2cc8 100644 (file)
@@ -20,6 +20,7 @@
 #include <dhcp4/tests/dhcp4_test_utils.h>
 #include <dhcp4/tests/get_config_unittest.h>
 #include <testutils/gtest_utils.h>
+#include <testutils/test_to_element.h>
 
 #include <boost/algorithm/string.hpp>
 #include <gtest/gtest.h>
@@ -2343,7 +2344,7 @@ const char* EXTRACTED_CONFIGS[] = {
 "            \"re-detect\": false\n"
 "        },\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": true,\n"
+"            \"enable-multi-threading\": false,\n"
 "            \"packet-queue-size\": 1024,\n"
 "            \"thread-pool-size\": 48\n"
 "        },\n"
@@ -2408,7 +2409,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -2492,7 +2493,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -2603,7 +2604,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -2716,7 +2717,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"max-valid-lifetime\": 5000,\n"
 "        \"min-valid-lifetime\": 3000,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -2829,7 +2830,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3026,7 +3027,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3223,7 +3224,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3336,7 +3337,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3452,7 +3453,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3568,7 +3569,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3681,7 +3682,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3794,7 +3795,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3937,7 +3938,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4079,7 +4080,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4222,7 +4223,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4366,7 +4367,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"max-valid-lifetime\": 5000,\n"
 "        \"min-valid-lifetime\": 3000,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4479,7 +4480,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4628,7 +4629,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4741,7 +4742,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4833,7 +4834,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4925,7 +4926,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5026,7 +5027,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5118,7 +5119,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5210,7 +5211,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5302,7 +5303,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5394,7 +5395,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5524,7 +5525,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5654,7 +5655,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5794,7 +5795,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5914,7 +5915,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6080,7 +6081,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6219,7 +6220,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6378,7 +6379,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6508,7 +6509,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6643,7 +6644,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6773,7 +6774,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6893,7 +6894,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7050,7 +7051,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7178,7 +7179,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7310,7 +7311,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7394,7 +7395,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7478,7 +7479,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7591,7 +7592,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7704,7 +7705,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7817,7 +7818,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7930,7 +7931,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8043,7 +8044,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8243,7 +8244,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8371,7 +8372,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8643,7 +8644,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8786,7 +8787,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9083,7 +9084,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9227,7 +9228,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9309,7 +9310,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9391,7 +9392,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9473,7 +9474,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9555,7 +9556,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9668,7 +9669,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9781,7 +9782,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9894,7 +9895,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10007,7 +10008,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10146,7 +10147,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10280,7 +10281,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10412,7 +10413,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10521,7 +10522,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10634,7 +10635,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10748,7 +10749,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10866,7 +10867,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10998,7 +10999,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -11129,7 +11130,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -11317,7 +11318,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -11513,7 +11514,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -11692,7 +11693,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -11833,7 +11834,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -11974,7 +11975,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -12058,7 +12059,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -12140,7 +12141,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"match-client-id\": true,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": true,\n"
+"            \"enable-multi-threading\": false,\n"
 "            \"packet-queue-size\": 1024,\n"
 "            \"thread-pool-size\": 48\n"
 "        },\n"
@@ -12418,9 +12419,17 @@ TEST_P(Dhcp4GetConfigTest, run) {
         // get the expected config using the generic JSON syntax parser
         ASSERT_NO_THROW_LOG(jsonj = parseJSON(expected));
         // the generic JSON parser does not handle comments
-        EXPECT_TRUE(isEquivalent(jsond, moveComments(jsonj)));
+        EXPECT_TRUE(isEquivalent(jsond, moveComments(jsonj)))
+#ifdef HAVE_CREATE_UNIFIED_DIFF
+            << "\nDiff:\n" << generateDiff(prettyPrint(jsond), prettyPrint(jsonj)) << "\n"
+#endif
+        ;
         // check that unparsed and expected values match
-        EXPECT_TRUE(isEquivalent(dhcp, jsonj));
+        EXPECT_TRUE(isEquivalent(dhcp, jsonj))
+#ifdef HAVE_CREATE_UNIFIED_DIFF
+            << "\nDiff:\n" << generateDiff(prettyPrint(dhcp), prettyPrint(jsonj)) << "\n"
+#endif
+        ;
         // check on pretty prints too
         std::string current = prettyPrint(dhcp, 4, 4) + "\n";
         EXPECT_EQ(expected, current);
@@ -12439,7 +12448,11 @@ TEST_P(Dhcp4GetConfigTest, run) {
     ConstElementPtr unparsed2;
     ASSERT_NO_THROW_LOG(unparsed2 = extracted2->toElement());
     ASSERT_TRUE(unparsed2);
-    EXPECT_TRUE(isEquivalent(unparsed, unparsed2));
+    EXPECT_TRUE(isEquivalent(unparsed, unparsed2))
+#ifdef HAVE_CREATE_UNIFIED_DIFF
+        << "\nDiff:\n" << generateDiff(prettyPrint(unparsed), prettyPrint(unparsed2)) << "\n"
+#endif
+    ;
 }
 
 class IntToString {
index 5e7244bbd30db512f04c8b8c02536ba34649aca1..6167daee534f8bb51739c9171386e5e48cc77bc6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2015-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2015-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -1710,7 +1710,7 @@ TEST_F(HooksDhcpv4SrvTest, subnet4SelectSimple) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -1793,7 +1793,7 @@ TEST_F(HooksDhcpv4SrvTest, subnet4SelectChange) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -3020,7 +3020,7 @@ TEST_F(HooksDhcpv4SrvTest, host4Identifier) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -3091,7 +3091,7 @@ TEST_F(HooksDhcpv4SrvTest, host4IdentifierHWAddr) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -3232,7 +3232,8 @@ TEST_F(LoadUnloadDhcpv4SrvTest, Dhcpv4SrvConfigured) {
 
         // Minimal valid configuration for the server. It includes the
         // section which loads the callout library #3, which implements
-        // dhcp4_srv_configured callout.
+        // dhcp4_srv_configured callout. MT needs to be disabled
+        // since the library is single-threaded.
         string config_str =
             "{"
             "    \"interfaces-config\": {"
@@ -3251,8 +3252,11 @@ TEST_F(LoadUnloadDhcpv4SrvTest, Dhcpv4SrvConfigured) {
             "            \"library\": \"" + std::string(CALLOUT_LIBRARY_3) + "\""
             + parameters +
             "        }"
-            "    ]"
-            "}";
+          R"(    ],
+                 "multi-threading": {
+                    "enable-multi-threading": false
+                }
+            })";
 
         ConstElementPtr config = Element::fromJSON(config_str);
 
@@ -3303,6 +3307,10 @@ TEST_F(HooksDhcpv4SrvTest, leases4ParkedPacketLimit) {
     IfaceMgrTestConfig test_config(true);
 
     // Configure 1 directly reachable subnet, parked-packet-limit of 1.
+    // TODO: investigate why enabling MT causes exception BadValue with message
+    // "interface eth1 doesn't exist and therefore it is impossible"
+    // " to find a suitable subnet for its IPv4 address" to be thrown, and
+    // sometimes a segfault.
     string config = "{ \"interfaces-config\": {"
         "    \"interfaces\": [ \"*\" ]"
         "},"
@@ -3314,14 +3322,18 @@ TEST_F(HooksDhcpv4SrvTest, leases4ParkedPacketLimit) {
         "    \"subnet\": \"192.0.2.0/24\", "
         "    \"interface\": \"eth1\" "
         " } ],"
-        "\"valid-lifetime\": 4000 }";
+        "\"valid-lifetime\": 4000,"
+        R"("multi-threading": {
+            "enable-multi-threading": false
+        }
+        })";
 
     ConstElementPtr json;
     EXPECT_NO_THROW(json = parseDHCP4(config));
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
index 608ab74ef57d575f500a77b5727212d916ec8d33..f75d44ce1be041dc0bb7322052811cd11fe3dc2c 100644 (file)
@@ -35,6 +35,7 @@
 #include <dhcp/tests/pkt_captures.h>
 #include <dhcp/docsis3_option_defs.h>
 #include <dhcp/dhcp4.h>
+#include <dhcpsrv/cfg_multi_threading.h>
 #include <dhcpsrv/cfgmgr.h>
 
 #include <gtest/gtest.h>
@@ -176,7 +177,7 @@ public:
         // Configure a mocked server.
         NakedDhcpv4Srv srv(0);
         ConstElementPtr x;
-        EXPECT_NO_THROW(x = configureDhcp4Server(srv, json));
+        EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(srv, json));
         ASSERT_TRUE(x);
         comment_ = parseAnswer(rcode_, x);
         ASSERT_EQ(0, rcode_);
@@ -445,7 +446,7 @@ public:
         // Configure a mocked server.
         NakedDhcpv4Srv srv(0);
         ConstElementPtr x;
-        EXPECT_NO_THROW(x = configureDhcp4Server(srv, json));
+        EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(srv, json));
         ASSERT_TRUE(x);
         comment_ = parseAnswer(rcode_, x);
         ASSERT_EQ(0, rcode_);
@@ -602,7 +603,7 @@ TEST_F(VendorOptsTest, vendorOptionsDocsis) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -928,13 +929,13 @@ TEST_F(VendorOptsTest, vendorOptionsDocsisDefinitions) {
     NakedDhcpv4Srv srv(0);
 
     // This should fail (missing option definition)
-    EXPECT_NO_THROW(x = configureDhcp4Server(srv, json_bogus));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(srv, json_bogus));
     ASSERT_TRUE(x);
     comment_ = parseAnswer(rcode_, x);
     ASSERT_EQ(1, rcode_);
 
     // This should work (option definition present)
-    EXPECT_NO_THROW(x = configureDhcp4Server(srv, json_valid));
+    EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(srv, json_valid));
     ASSERT_TRUE(x);
     comment_ = parseAnswer(rcode_, x);
     ASSERT_EQ(0, rcode_);
@@ -1079,7 +1080,7 @@ TEST_F(VendorOptsTest, option43LastResort) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -1151,7 +1152,7 @@ TEST_F(VendorOptsTest, option43BadRaw) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -1239,7 +1240,7 @@ TEST_F(VendorOptsTest, option43FailRaw) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -1307,7 +1308,7 @@ TEST_F(VendorOptsTest, option43RawGlobal) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -1397,7 +1398,7 @@ TEST_F(VendorOptsTest, option43RawClass) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -1494,7 +1495,7 @@ TEST_F(VendorOptsTest, option43Class) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -1623,7 +1624,7 @@ TEST_F(VendorOptsTest, option43ClassPriority) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -1758,7 +1759,7 @@ TEST_F(VendorOptsTest, option43Classes) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
@@ -1986,7 +1987,7 @@ TEST_F(Dhcpv4SrvTest, truncatedVIVSOOption) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_) << isc::data::prettyPrint(status);
@@ -2090,14 +2091,14 @@ TEST_F(VendorOptsTest, vendorOpsSubOption0) {
     ConstElementPtr status;
 
     // Configure the server and make sure the config is accepted
-    EXPECT_NO_THROW(status = configureDhcp4Server(srv, json));
+    EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(srv, json));
     ASSERT_TRUE(status);
     comment_ = parseAnswer(rcode_, status);
     ASSERT_EQ(0, rcode_);
 
     CfgMgr::instance().commit();
 
-        // Create a packet with enough to select the subnet and go through
+    // Create a packet with enough to select the subnet and go through
     // the DISCOVER processing
     Pkt4Ptr query(new Pkt4(DHCPDISCOVER, 1234));
     query->setRemoteAddr(IOAddress("192.0.2.1"));
index a79b485827152761519d3a162f04efa4f1f6a740..71b92a5f4e60177a952097d25b34449a2179f961 100644 (file)
@@ -31,6 +31,7 @@
 #include <stats/stats_mgr.h>
 #include <testutils/gtest_utils.h>
 #include <testutils/log_utils.h>
+#include <testutils/test_to_element.h>
 #include <util/chrono_time_utils.h>
 
 #include "test_data_files_config.h"
@@ -436,7 +437,7 @@ public:
         ASSERT_NO_THROW(json = parseDHCP6(config, true));
 
         ConstElementPtr status;
-        EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+        EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
         ASSERT_TRUE(status);
 
         int rcode;
@@ -685,7 +686,7 @@ public:
         ConstElementPtr status;
         try {
             json = parseJSON(config);
-            status = configureDhcp6Server(srv_, json);
+            status = Dhcpv6SrvTest::configure(srv_, json);
 
         } catch (const std::exception& ex) {
             ADD_FAILURE() << "Unable to " << operation << ". "
@@ -803,7 +804,7 @@ public:
         ConstElementPtr x;
         std::string config = createConfigWithOption(param_value, parameter);
         ConstElementPtr json = parseDHCP6(config);
-        EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+        EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
         checkResult(x, 1);
         EXPECT_TRUE(errorContainsPosition(x, "<string>"));
         CfgMgr::instance().clear();
@@ -821,7 +822,7 @@ public:
         ConstElementPtr x;
         std::string config = createConfigWithOption(params);
         ConstElementPtr json = parseDHCP6(config);
-        EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+        EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
         checkResult(x, 1);
         EXPECT_TRUE(errorContainsPosition(x, "<string>"));
         CfgMgr::instance().clear();
@@ -925,7 +926,7 @@ public:
 
         // Make sure that the configuration was successful.
         ConstElementPtr status;
-        EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+        EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
         checkResult(status, 0);
 
         // Get the subnet.
@@ -954,7 +955,7 @@ public:
         ConstElementPtr json;
 
         EXPECT_NO_THROW(json = parseDHCP6(config, true));
-        EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+        EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
         ASSERT_TRUE(status);
         checkResult(status, 0);
 
@@ -1007,7 +1008,7 @@ TEST_F(Dhcp6ParserTest, bogusCommand) {
 
     ConstElementPtr x;
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_,
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_,
                     parseJSON("{\"bogus\": 5}")));
 
     // returned value must be 1 (configuration parse error)
@@ -1027,7 +1028,7 @@ TEST_F(Dhcp6ParserTest, emptyInterfaceConfig) {
                                       "\"valid-lifetime\": 4000 }"));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -1048,7 +1049,7 @@ TEST_F(Dhcp6ParserTest, outBoundValidLifetime) {
     ASSERT_NO_THROW(json = parseDHCP6(too_small));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     string expected = "subnet configuration failed: "
         "the value of min-valid-lifetime (2000) is not "
         "less than (default) valid-lifetime (1000)";
@@ -1062,7 +1063,7 @@ TEST_F(Dhcp6ParserTest, outBoundValidLifetime) {
         "\"valid-lifetime\": 2000, \"max-valid-lifetime\": 1000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(too_large));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected = "subnet configuration failed: "
         "the value of (default) valid-lifetime (2000) is not "
         "less than max-valid-lifetime (1000)";
@@ -1077,7 +1078,7 @@ TEST_F(Dhcp6ParserTest, outBoundValidLifetime) {
         "\"max-valid-lifetime\": 4000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(before));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected = "subnet configuration failed: "
         "the value of (default) valid-lifetime (1000) is not "
         "between min-valid-lifetime (2000) and max-valid-lifetime (4000)";
@@ -1092,7 +1093,7 @@ TEST_F(Dhcp6ParserTest, outBoundValidLifetime) {
         "\"max-valid-lifetime\": 4000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(after));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected = "subnet configuration failed: "
         "the value of (default) valid-lifetime (5000) is not "
         "between min-valid-lifetime (1000) and max-valid-lifetime (4000)";
@@ -1107,7 +1108,7 @@ TEST_F(Dhcp6ParserTest, outBoundValidLifetime) {
         "\"max-valid-lifetime\": 1000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(crossed));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected = "subnet configuration failed: "
         "the value of min-valid-lifetime (2000) is not "
         "less than max-valid-lifetime (1000)";
@@ -1126,7 +1127,7 @@ TEST_F(Dhcp6ParserTest, outBoundGlobalValidLifetime) {
     ASSERT_NO_THROW(json = parseDHCP6(too_small));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     string expected =
         "the value of min-valid-lifetime (2000) is not "
         "less than (default) valid-lifetime (1000)";
@@ -1137,7 +1138,7 @@ TEST_F(Dhcp6ParserTest, outBoundGlobalValidLifetime) {
         "\"valid-lifetime\": 2000, \"max-valid-lifetime\": 1000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(too_large));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected =
         "the value of (default) valid-lifetime (2000) is not "
         "less than max-valid-lifetime (1000)";
@@ -1149,7 +1150,7 @@ TEST_F(Dhcp6ParserTest, outBoundGlobalValidLifetime) {
         "\"max-valid-lifetime\": 4000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(before));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected =
         "the value of (default) valid-lifetime (1000) is not "
         "between min-valid-lifetime (2000) and max-valid-lifetime (4000)";
@@ -1161,7 +1162,7 @@ TEST_F(Dhcp6ParserTest, outBoundGlobalValidLifetime) {
         "\"max-valid-lifetime\": 4000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(after));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected =
         "the value of (default) valid-lifetime (5000) is not "
         "between min-valid-lifetime (1000) and max-valid-lifetime (4000)";
@@ -1173,7 +1174,7 @@ TEST_F(Dhcp6ParserTest, outBoundGlobalValidLifetime) {
         "\"max-valid-lifetime\": 1000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(crossed));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected =
         "the value of min-valid-lifetime (2000) is not "
         "less than max-valid-lifetime (1000)";
@@ -1195,7 +1196,7 @@ TEST_F(Dhcp6ParserTest, outBoundPreferredLifetime) {
     ASSERT_NO_THROW(json = parseDHCP6(too_small));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     string expected = "subnet configuration failed: "
         "the value of min-preferred-lifetime (2000) is not "
         "less than (default) preferred-lifetime (1000)";
@@ -1209,7 +1210,7 @@ TEST_F(Dhcp6ParserTest, outBoundPreferredLifetime) {
         "\"preferred-lifetime\": 2000, \"max-preferred-lifetime\": 1000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(too_large));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected = "subnet configuration failed: "
         "the value of (default) preferred-lifetime (2000) is not "
         "less than max-preferred-lifetime (1000)";
@@ -1224,7 +1225,7 @@ TEST_F(Dhcp6ParserTest, outBoundPreferredLifetime) {
         "\"max-preferred-lifetime\": 4000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(before));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected = "subnet configuration failed: "
         "the value of (default) preferred-lifetime (1000) is not between "
         "min-preferred-lifetime (2000) and max-preferred-lifetime (4000)";
@@ -1239,7 +1240,7 @@ TEST_F(Dhcp6ParserTest, outBoundPreferredLifetime) {
         "\"max-preferred-lifetime\": 4000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(after));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected = "subnet configuration failed: "
         "the value of (default) preferred-lifetime (5000) is not between "
         "min-preferred-lifetime (1000) and max-preferred-lifetime (4000)";
@@ -1254,7 +1255,7 @@ TEST_F(Dhcp6ParserTest, outBoundPreferredLifetime) {
         "\"max-preferred-lifetime\": 1000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(crossed));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected = "subnet configuration failed: "
         "the value of min-preferred-lifetime (2000) is not "
         "less than max-preferred-lifetime (1000)";
@@ -1273,7 +1274,7 @@ TEST_F(Dhcp6ParserTest, outBoundGlobalPreferredLifetime) {
     ASSERT_NO_THROW(json = parseDHCP6(too_small));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     string expected =
         "the value of min-preferred-lifetime (2000) is not "
         "less than (default) preferred-lifetime (1000)";
@@ -1284,7 +1285,7 @@ TEST_F(Dhcp6ParserTest, outBoundGlobalPreferredLifetime) {
         "\"preferred-lifetime\": 2000, \"max-preferred-lifetime\": 1000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(too_large));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected =
         "the value of (default) preferred-lifetime (2000) is not "
         "less than max-preferred-lifetime (1000)";
@@ -1296,7 +1297,7 @@ TEST_F(Dhcp6ParserTest, outBoundGlobalPreferredLifetime) {
         "\"max-preferred-lifetime\": 4000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(before));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected =
         "the value of (default) preferred-lifetime (1000) is not between "
         "min-preferred-lifetime (2000) and max-preferred-lifetime (4000)";
@@ -1308,7 +1309,7 @@ TEST_F(Dhcp6ParserTest, outBoundGlobalPreferredLifetime) {
         "\"max-preferred-lifetime\": 4000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(after));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected =
         "the value of (default) preferred-lifetime (5000) is not between "
         "min-preferred-lifetime (1000) and max-preferred-lifetime (4000)";
@@ -1320,7 +1321,7 @@ TEST_F(Dhcp6ParserTest, outBoundGlobalPreferredLifetime) {
         "\"max-preferred-lifetime\": 1000 }";
 
     ASSERT_NO_THROW(json = parseDHCP6(crossed));
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     expected =
         "the value of min-preferred-lifetime (2000) is not "
         "less than max-preferred-lifetime (1000)";
@@ -1343,7 +1344,7 @@ TEST_F(Dhcp6ParserTest, emptySubnet) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -1371,7 +1372,7 @@ TEST_F(Dhcp6ParserTest, subnetGlobalDefaults) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -1429,7 +1430,7 @@ TEST_F(Dhcp6ParserTest, multipleSubnets) {
     extractConfig(config);
 
     do {
-        EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+        EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
         checkResult(x, 0);
 
         CfgMgr::instance().commit();
@@ -1490,7 +1491,7 @@ TEST_F(Dhcp6ParserTest, multipleSubnetsExplicitIDs) {
     extractConfig(config);
 
     do {
-        EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+        EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
         checkResult(x, 0);
 
         CfgMgr::instance().commit();
@@ -1546,7 +1547,7 @@ TEST_F(Dhcp6ParserTest, multipleSubnetsOverlappingIDs) {
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP6(config));
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 1);
     EXPECT_TRUE(errorContainsPosition(x, "<string>"));
 }
@@ -1633,7 +1634,7 @@ TEST_F(Dhcp6ParserTest, reconfigureRemoveSubnet) {
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP6(config4));
     extractConfig(config4);
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     CfgMgr::instance().commit();
@@ -1645,7 +1646,7 @@ TEST_F(Dhcp6ParserTest, reconfigureRemoveSubnet) {
 
     // Do the reconfiguration (the last subnet is removed)
     ASSERT_NO_THROW(json = parseDHCP6(config_first3));
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     CfgMgr::instance().commit();
@@ -1663,14 +1664,14 @@ TEST_F(Dhcp6ParserTest, reconfigureRemoveSubnet) {
     /// from in between (not first, not last)
 
     ASSERT_NO_THROW(json = parseDHCP6(config4));
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     CfgMgr::instance().commit();
 
     // Do reconfiguration
     ASSERT_NO_THROW(json = parseDHCP6(config_second_removed));
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     CfgMgr::instance().commit();
@@ -1716,7 +1717,7 @@ TEST_F(Dhcp6ParserTest, subnetLocal) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 0 (configuration success)
     checkResult(status, 0);
@@ -1758,7 +1759,7 @@ TEST_F(Dhcp6ParserTest, subnetInterface) {
     extractConfig(config("eth0"));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 0 (configuration success)
     checkResult(status, 0);
@@ -1790,7 +1791,7 @@ TEST_F(Dhcp6ParserTest, subnetInterfaceBogus) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 1 (configuration error)
     checkResult(status, 1);
@@ -1819,7 +1820,7 @@ TEST_F(Dhcp6ParserTest, interfaceGlobal) {
     ConstElementPtr json = parseJSON(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 1 (parse error)
     checkResult(status, 1);
@@ -1852,7 +1853,7 @@ TEST_F(Dhcp6ParserTest, subnetInterfaceId) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // Returned value should be 0 (configuration success)
     checkResult(status, 0);
@@ -1892,7 +1893,7 @@ TEST_F(Dhcp6ParserTest, interfaceIdGlobal) {
     ConstElementPtr json = parseJSON(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // Returned value should be 1 (parse error)
     checkResult(status, 1);
@@ -1919,7 +1920,7 @@ TEST_F(Dhcp6ParserTest, subnetInterfaceAndInterfaceId) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // Returned value should be 1 (configuration error)
     checkResult(status, 1);
@@ -1984,7 +1985,7 @@ TEST_F(Dhcp6ParserTest, badSubnetValues) {
             ASSERT_NO_THROW(config = parseDHCP6((*scenario).config_json_))
                             << "invalid json, broken test";
             ConstElementPtr status;
-            EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
+            EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, config));
             checkResult(status, 1);
             EXPECT_EQ(comment_->stringValue(), (*scenario).exp_error_msg_);
         }
@@ -2067,7 +2068,7 @@ TEST_F(Dhcp6ParserTest, multiplePools) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(status, 0);
 
     const Subnet6Collection* subnets =
@@ -2117,7 +2118,7 @@ TEST_F(Dhcp6ParserTest, poolOutOfSubnet) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value must be 1 (values error)
     // as the pool does not belong to that subnet
@@ -2147,7 +2148,7 @@ TEST_F(Dhcp6ParserTest, poolPrefixLen) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value must be 1 (configuration parse error)
     checkResult(x, 0);
@@ -2251,7 +2252,7 @@ TEST_F(Dhcp6ParserTest, badPools) {
     ASSERT_NO_THROW(json7 = parseDHCP6(config_bogus7));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json1));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json1));
 
     // check if returned status is always a failure
     checkResult(status, 1);
@@ -2259,37 +2260,37 @@ TEST_F(Dhcp6ParserTest, badPools) {
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json2));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json2));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json3));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json3));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json4));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json4));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json5));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json5));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json6));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json6));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json7));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json7));
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
 }
@@ -2324,7 +2325,7 @@ TEST_F(Dhcp6ParserTest, pdPoolBasics) {
     // Verify that DHCP6 configuration processing succeeds.
     // Returned value must be non-empty ConstElementPtr to config result.
     // rcode should be 0 which indicates successful configuration processing.
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     // Test that we can retrieve the subnet.
@@ -2383,7 +2384,7 @@ TEST_F(Dhcp6ParserTest, pdPoolPrefixExclude) {
     // Verify that DHCP6 configuration processing succeeds.
     // Returned value must be non-empty ConstElementPtr to config result.
     // rcode should be 0 which indicates successful configuration processing.
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     // Test that we can retrieve the subnet.
@@ -2464,7 +2465,7 @@ TEST_F(Dhcp6ParserTest, pdPoolList) {
     // Verify that DHCP6 configuration processing succeeds.
     // Returned value must be non-empty ConstElementPtr to config result.
     // rcode should be 0 which indicates successful configuration processing.
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     // Test that we can retrieve the subnet.
@@ -2521,7 +2522,7 @@ TEST_F(Dhcp6ParserTest, subnetAndPrefixDelegated) {
     // Verify that DHCP6 configuration processing succeeds.
     // Returned value must be non-empty ConstElementPtr to config result.
     // rcode should be 0 which indicates successful configuration processing.
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     // Test that we can retrieve the subnet.
@@ -2626,7 +2627,7 @@ TEST_F(Dhcp6ParserTest, invalidPdPools) {
         }
 
         // Configuration processing should fail without a throw.
-        ASSERT_NO_THROW(x = configureDhcp6Server(srv_, json));
+        ASSERT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
 
         // Returned value must be non-empty ConstElementPtr to config result.
         // rcode should be 1 which indicates configuration error.
@@ -2659,7 +2660,7 @@ TEST_F(Dhcp6ParserTest, optionDefIpv6Address) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -2691,7 +2692,7 @@ TEST_F(Dhcp6ParserTest, optionDefIpv6Address) {
     // configuration and should result in removal of the option 100 from the
     // libdhcp++. Note DHCP6 or OPTION_DEFS parsers do not accept empty maps.
     json.reset(new MapElement());
-    ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(status, 0);
 
     EXPECT_FALSE(LibDHCP::getRuntimeOptionDef("isc", 100));
@@ -2723,7 +2724,7 @@ TEST_F(Dhcp6ParserTest, optionDefRecord) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -2778,7 +2779,7 @@ TEST_F(Dhcp6ParserTest, optionDefMultiple) {
 
     // Use the configuration string to create new option definitions.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -2843,7 +2844,7 @@ TEST_F(Dhcp6ParserTest, optionDefDuplicate) {
 
     // Use the configuration string to create new option definitions.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
@@ -2891,7 +2892,7 @@ TEST_F(Dhcp6ParserTest, optionDefArray) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -2932,7 +2933,7 @@ TEST_F(Dhcp6ParserTest, optionDefEncapsulate) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -2966,7 +2967,7 @@ TEST_F(Dhcp6ParserTest, optionDefInvalidName) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -2991,7 +2992,7 @@ TEST_F(Dhcp6ParserTest, optionDefInvalidType) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -3017,7 +3018,7 @@ TEST_F(Dhcp6ParserTest, optionDefInvalidRecordType) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -3043,7 +3044,7 @@ TEST_F(Dhcp6ParserTest, optionIntegerTypes) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 0);
@@ -3068,7 +3069,7 @@ TEST_F(Dhcp6ParserTest, optionDefInvalidEncapsulatedSpace) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -3097,7 +3098,7 @@ TEST_F(Dhcp6ParserTest, optionDefEncapsulatedSpaceAndArray) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -3123,7 +3124,7 @@ TEST_F(Dhcp6ParserTest, optionDefEncapsulateOwnSpace) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -3157,7 +3158,7 @@ TEST_F(Dhcp6ParserTest, optionStandardDefOverride) {
 
     // Use the configuration string to create new option definition.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -3186,7 +3187,7 @@ TEST_F(Dhcp6ParserTest, optionStandardDefOverride) {
     json = parseOPTION_DEFS(config);
 
     // Use the configuration string to create new option definition.
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     // Expecting parsing error (error code 1).
     checkResult(status, 1);
@@ -3208,7 +3209,7 @@ TEST_F(Dhcp6ParserTest, optionStandardDefOverride) {
     json = parseOPTION_DEFS(config);
 
     // Use the configuration string to create new option definition.
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     // Expecting success.
     checkResult(status, 0);
@@ -3250,7 +3251,7 @@ TEST_F(Dhcp6ParserTest, optionDataDefaultsGlobal) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     // These options are global
@@ -3323,7 +3324,7 @@ TEST_F(Dhcp6ParserTest, optionDataDefaultsSubnet) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     // These options are subnet options
@@ -3415,7 +3416,7 @@ TEST_F(Dhcp6ParserTest, optionDataTwoSpaces) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -3492,7 +3493,7 @@ TEST_F(Dhcp6ParserTest, optionDataEncapsulate) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -3549,7 +3550,7 @@ TEST_F(Dhcp6ParserTest, optionDataEncapsulate) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -3609,7 +3610,7 @@ TEST_F(Dhcp6ParserTest, optionDataInMultipleSubnets) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     Subnet6Ptr subnet1 = CfgMgr::instance().getStagingCfg()->getCfgSubnets6()->
@@ -3710,7 +3711,7 @@ TEST_F(Dhcp6ParserTest, optionDataMultiplePools) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     Subnet6Ptr subnet = CfgMgr::instance().getStagingCfg()->getCfgSubnets6()->
@@ -3961,7 +3962,7 @@ TEST_F(Dhcp6ParserTest, optionDataValidHexLiterals) {
         ConstElementPtr json;
         ASSERT_NO_THROW(json = parseDHCP6(config));
 
-        EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+        EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
         checkResult(x, 0);
 
         Subnet6Ptr subnet = CfgMgr::instance().getStagingCfg()->getCfgSubnets6()->
@@ -4007,7 +4008,7 @@ TEST_F(Dhcp6ParserTest, stdOptionData) {
     std::string config = createConfigWithOption(params);
     ConstElementPtr json = parseDHCP6(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     Subnet6Ptr subnet = CfgMgr::instance().getStagingCfg()->getCfgSubnets6()->
@@ -4062,7 +4063,7 @@ TEST_F(Dhcp6ParserTest, rdnssOption) {
     std::string config = createConfigWithOption(params);
     ConstElementPtr json = parseDHCP6(config, true);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     Subnet6Ptr subnet = CfgMgr::instance().getStagingCfg()->getCfgSubnets6()->
@@ -4142,7 +4143,7 @@ TEST_F(Dhcp6ParserTest, vendorOptionsHex) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -4201,7 +4202,7 @@ TEST_F(Dhcp6ParserTest, vendorOptionsCsv) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -4268,7 +4269,7 @@ TEST_F(Dhcp6ParserTest, DISABLED_stdOptionDataEncapsulate) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -4319,7 +4320,7 @@ TEST_F(Dhcp6ParserTest, DISABLED_stdOptionDataEncapsulate) {
 
     ASSERT_NO_THROW(json = parseDHCP6(config));
     extractConfig(config);
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -4374,8 +4375,8 @@ TEST_F(Dhcp6ParserTest, DISABLED_stdOptionDataEncapsulate) {
 // Helper function to return a configuration containing an arbitrary number
 // of hooks libraries.
 std::string
-buildHooksLibrariesConfig(const std::vector<std::string>& libraries,
-                          bool multi_threading) {
+buildHooksLibrariesConfig(const std::vector<std::string>& libraries = {},
+                          bool multi_threading = true) {
     const string lbrace("{");
     const string rbrace("}");
     const string liblabel("\"library\": ");
@@ -4422,34 +4423,17 @@ buildHooksLibrariesConfig(const std::vector<std::string>& libraries,
         "    \"space\": \"a-vendor-space\""
         " } ]");
 
-    if (multi_threading) {
-        config += string(
-            ","
-            "\"multi-threading\": {"
-            "    \"enable-multi-threading\": true"
-            "}");
-    }
+        config += R"(,
+    "multi-threading": {
+        "enable-multi-threading": )" +
+            string(multi_threading ? "true" : "false") + R"(
+    })";
 
     config += string("}");
 
     return (config);
 }
 
-// Convenience function for creating hooks library configuration with one or
-// two character string constants.
-std::string
-buildHooksLibrariesConfig(const char* library1 = NULL,
-                          const char* library2 = NULL) {
-    std::vector<std::string> libraries;
-    if (library1 != NULL) {
-        libraries.push_back(string(library1));
-        if (library2 != NULL) {
-            libraries.push_back(string(library2));
-        }
-    }
-    return (buildHooksLibrariesConfig(libraries, false));
-}
-
 // The goal of this test is to verify the configuration of hooks libraries if
 // none are specified.
 TEST_F(Dhcp6ParserTest, NoHooksLibraries) {
@@ -4469,13 +4453,13 @@ TEST_F(Dhcp6ParserTest, NoHooksLibraries) {
 // Verify parsing fails with one library that will fail validation.
 TEST_F(Dhcp6ParserTest, InvalidLibrary) {
     // Parse a configuration containing a failing library.
-    string config = buildHooksLibrariesConfig(NOT_PRESENT_LIBRARY);
+    string config = buildHooksLibrariesConfig({NOT_PRESENT_LIBRARY});
 
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP6(config));
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // The status object must not be NULL
     ASSERT_TRUE(status);
@@ -4492,8 +4476,8 @@ TEST_F(Dhcp6ParserTest, LibrariesSpecified) {
     EXPECT_FALSE(checkMarkerFileExists(UNLOAD_MARKER_FILE));
 
     // Set up the configuration with two libraries and load them.
-    string config = buildHooksLibrariesConfig(CALLOUT_LIBRARY_1,
-                                              CALLOUT_LIBRARY_2);
+    string config = buildHooksLibrariesConfig({CALLOUT_LIBRARY_1, CALLOUT_LIBRARY_2},
+                                              /* multi_threading = */ false);
     ASSERT_TRUE(executeConfiguration(config,
                                      "load two valid libraries"));
 
@@ -4533,7 +4517,7 @@ TEST_F(Dhcp6ParserTest, IncompatibleLibrary2Specified) {
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP6(config));
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // The status object must not be NULL
     ASSERT_TRUE(status);
@@ -4567,7 +4551,7 @@ TEST_F(Dhcp6ParserTest, IncompatibleLibrary3Specified) {
     ConstElementPtr json;
     ASSERT_NO_THROW(json = parseDHCP6(config));
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // The status object must not be NULL
     ASSERT_TRUE(status);
@@ -4607,7 +4591,7 @@ TEST_F(Dhcp6ParserTest, selectedInterfaces) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value must be 1 (values error)
     // as the pool does not belong to that subnet
@@ -4645,7 +4629,7 @@ TEST_F(Dhcp6ParserTest, allInterfaces) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(status, 0);
 
     CfgMgr::instance().getStagingCfg()->getCfgIface()->openSockets(AF_INET6, 10000);
@@ -4676,7 +4660,7 @@ TEST_F(Dhcp6ParserTest, subnetRelayInfo) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 0 (configuration success)
     checkResult(status, 0);
@@ -4709,7 +4693,7 @@ TEST_F(Dhcp6ParserTest, subnetRelayInfoList) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 0 (configuration success)
     checkResult(status, 0);
@@ -4756,7 +4740,7 @@ TEST_F(Dhcp6ParserTest, classifySubnets) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     const Subnet6Collection* subnets =
@@ -4848,7 +4832,7 @@ TEST_F(Dhcp6ParserTest, classifyPools) {
     ASSERT_NO_THROW(json = parseDHCP6(config, true));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     const Subnet6Collection* subnets =
@@ -4946,7 +4930,7 @@ TEST_F(Dhcp6ParserTest, classifyPdPools) {
     ASSERT_NO_THROW(json = parseDHCP6(config, true));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     const Subnet6Collection* subnets =
@@ -5038,7 +5022,7 @@ TEST_F(Dhcp6ParserTest, d2ClientConfigValid) {
 
     // Pass the configuration in for parsing.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, config));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -5114,7 +5098,7 @@ TEST_F(Dhcp6ParserTest, d2ClientConfigMoveToGlobal) {
 
     // Pass the configuration in for parsing.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, config));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -5199,7 +5183,7 @@ TEST_F(Dhcp6ParserTest, d2ClientConfigBoth) {
 
     // Pass the configuration in for parsing.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, config));
 
     // check if returned status is OK
     checkResult(status, 0);
@@ -5262,7 +5246,7 @@ TEST_F(Dhcp6ParserTest, invalidD2ClientConfig) {
 
     // Configuration should not throw, but should fail.
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, config));
 
     // check if returned status is failed.
     checkResult(status, 1);
@@ -5378,7 +5362,7 @@ TEST_F(Dhcp6ParserTest, reservations) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     // Make sure all subnets have been successfully configured. There is no
@@ -5539,7 +5523,7 @@ TEST_F(Dhcp6ParserTest, reservationWithOptionDefinition) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     // Hosts configuration must be available.
@@ -5592,7 +5576,7 @@ TEST_F(Dhcp6ParserTest, reservationBogus) {
 
     ConstElementPtr json = parseJSON(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 1);
 
     EXPECT_THROW(parseDHCP6(config), Dhcp6ParseError);
@@ -5624,7 +5608,7 @@ TEST_F(Dhcp6ParserTest, reservationBogus) {
     // Remove existing configuration, if any.
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 1);
 
     // Case 3: Broken specification of option data.
@@ -5657,7 +5641,7 @@ TEST_F(Dhcp6ParserTest, reservationBogus) {
     // Remove existing configuration, if any.
     CfgMgr::instance().clear();
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 1);
 }
 
@@ -5680,7 +5664,7 @@ TEST_F(Dhcp6ParserTest, macSources1) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(status, 0);
 
     CfgMACSources sources = CfgMgr::instance().getStagingCfg()->getMACSources().get();
@@ -5710,7 +5694,7 @@ TEST_F(Dhcp6ParserTest, macSources2) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(status, 0);
 
     CfgMACSources sources = CfgMgr::instance().getStagingCfg()->getMACSources().get();
@@ -5727,7 +5711,7 @@ TEST_F(Dhcp6ParserTest, macSources2) {
 TEST_F(Dhcp6ParserTest, macSourcesEmpty) {
     ConstElementPtr status;
 
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_,
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_,
                     parseJSON("{ " + genIfaceConfig() + ","
                               "\"mac-sources\": [ ],"
                               "\"preferred-lifetime\": 3000,"
@@ -5755,7 +5739,7 @@ TEST_F(Dhcp6ParserTest, macSourcesBogus) {
                                       "\"valid-lifetime\": 4000 }"));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     // returned value should be 1 (failure)
     checkResult(status, 1);
 }
@@ -5830,7 +5814,7 @@ TEST_F(Dhcp6ParserTest, hostReservationPerSubnet) {
     extractConfig(hr_config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -5931,7 +5915,7 @@ TEST_F(Dhcp6ParserTest, hostReservationGlobal) {
     extractConfig(hr_config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -5976,7 +5960,7 @@ TEST_F(Dhcp6ParserTest, rsooNumbers) {
                    "\"valid-lifetime\": 4000 }"));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -6013,7 +5997,7 @@ TEST_F(Dhcp6ParserTest, rsooNames) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -6063,7 +6047,7 @@ TEST_F(Dhcp6ParserTest, rsooNegativeNumber) {
                    "\"valid-lifetime\": 4000 }"));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     // returned value should be 0 (success)
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
@@ -6081,7 +6065,7 @@ TEST_F(Dhcp6ParserTest, rsooBogusName) {
                    "\"valid-lifetime\": 4000 }"));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     // returned value should be 0 (success)
     checkResult(status, 1);
     EXPECT_TRUE(errorContainsPosition(status, "<string>"));
@@ -6097,7 +6081,7 @@ TEST_F(Dhcp6ParserTest, notExistDataDir) {
     ASSERT_NO_THROW(config = parseDHCP6(config_txt));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, config));
 
     // returned value should be 1 (error)
     int rcode;
@@ -6119,7 +6103,7 @@ TEST_F(Dhcp6ParserTest, notDirDataDir) {
     ASSERT_NO_THROW(config = parseDHCP6(config_txt));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, config));
 
     // returned value should be 1 (error)
     int rcode;
@@ -6144,7 +6128,7 @@ TEST_F(Dhcp6ParserTest, testDataDir) {
     // Do not export it as it will keep the current TEST_DATA_BUILDDIR...
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, config));
 
     // returned value should be 0 (success);
     checkResult(status, 0);
@@ -6167,7 +6151,7 @@ TEST_F(Dhcp6ParserTest, declineTimerDefault) {
     extractConfig(config_txt);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, config));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -6190,7 +6174,7 @@ TEST_F(Dhcp6ParserTest, dhcp4o6portDefault) {
     extractConfig(config_txt);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, config));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -6213,7 +6197,7 @@ TEST_F(Dhcp6ParserTest, declineTimer) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 0 (success)
     checkResult(status, 0);
@@ -6234,7 +6218,7 @@ TEST_F(Dhcp6ParserTest, declineTimerError) {
     ConstElementPtr json = parseJSON(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // returned value should be 1 (error)
     checkResult(status, 1);
@@ -6268,7 +6252,7 @@ TEST_F(Dhcp6ParserTest, expiredLeasesProcessing) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // Returned value should be 0 (success)
     checkResult(status, 0);
@@ -6309,7 +6293,7 @@ TEST_F(Dhcp6ParserTest, expiredLeasesProcessingError) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
 
     // Returned value should be 0 (error)
     checkResult(status, 1);
@@ -6346,7 +6330,7 @@ TEST_F(Dhcp6ParserTest, validClientClassDictionary) {
     extractConfig(config);
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -6575,7 +6559,7 @@ TEST_F(Dhcp6ParserTest, invalidPoolRange) {
     ASSERT_NO_THROW(json = parseDHCP6(config, true));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     int rcode;
     ConstElementPtr comment = parseAnswer(rcode, status);
@@ -6606,7 +6590,7 @@ TEST_F(Dhcp6ParserTest, outsideSubnetPool) {
     ASSERT_NO_THROW(json = parseDHCP6(config, true));
 
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     int rcode;
     ConstElementPtr comment = parseAnswer(rcode, status);
@@ -7598,7 +7582,7 @@ TEST_F(Dhcp6ParserTest, globalReservations) {
     ASSERT_NO_THROW(json = parseDHCP6(config));
     extractConfig(config);
 
-    EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(x, 0);
 
     // Make sure all subnets have been successfully configured. There is no
@@ -7748,18 +7732,31 @@ TEST_F(Dhcp6ParserTest, dhcpQueueControl) {
     struct Scenario {
         std::string description_;
         std::string json_;
+        std::string mt_json_;
     };
-
     std::vector<Scenario> scenarios = {
         {
         "no entry",
-        ""
+        "",
+        "",
         },
         {
         "queue disabled",
         "{ \n"
         "   \"enable-queue\": false \n"
-        "} \n"
+        "} \n",
+        R"("multi-threading": {
+            "enable-multi-threading": false
+        })",
+        },
+        {
+        "queue enabled at first, but gets forcefully disabled by MT",
+        "{ \n"
+        "   \"enable-queue\": true \n"
+        "} \n",
+        R"("multi-threading": {
+            "enable-multi-threading": true
+        })",
         },
         {
         "queue disabled, arbitrary content allowed",
@@ -7767,14 +7764,20 @@ TEST_F(Dhcp6ParserTest, dhcpQueueControl) {
         "   \"enable-queue\": false, \n"
         "   \"foo\": \"bogus\", \n"
         "   \"random-int\" : 1234 \n"
-        "} \n"
+        "} \n",
+        R"("multi-threading": {
+            "enable-multi-threading": false
+        })",
         },
         {
         "queue enabled, with queue-type",
         "{ \n"
         "   \"enable-queue\": true, \n"
         "   \"queue-type\": \"some-type\" \n"
-        "} \n"
+        "} \n",
+        R"("multi-threading": {
+            "enable-multi-threading": false
+        })",
         },
         {
         "queue enabled with queue-type and arbitrary content",
@@ -7783,7 +7786,10 @@ TEST_F(Dhcp6ParserTest, dhcpQueueControl) {
         "   \"queue-type\": \"some-type\", \n"
         "   \"foo\": \"bogus\", \n"
         "   \"random-int\" : 1234 \n"
-        "} \n"
+        "} \n",
+        R"("multi-threading": {
+            "enable-multi-threading": false
+        })",
         }
     };
 
@@ -7806,8 +7812,10 @@ TEST_F(Dhcp6ParserTest, dhcpQueueControl) {
             if (!scenario.json_.empty()) {
                os << ",\n \"dhcp-queue-control\": "  <<  scenario.json_;
             }
-
-            os << "} \n";
+            if (!scenario.mt_json_.empty()) {
+                os << ",\n" << scenario.mt_json_;
+            }
+            os << "\n}\n";
 
             // Configure the server. This should succeed.
             configure(os.str(), CONTROL_RESULT_SUCCESS, "");
@@ -7833,8 +7841,18 @@ TEST_F(Dhcp6ParserTest, dhcpQueueControl) {
             // Add the defaults to expected queue control.
             SimpleParser6::setDefaults(exp_control, SimpleParser6::DHCP_QUEUE_CONTROL6_DEFAULTS);
 
+            // This specific scenario is the only one where we expect enable-queue
+            // to be changed from what the user set it to.
+            if (scenario.description_ == "queue enabled at first, but gets forcefully disabled by MT") {
+                exp_control->set("enable-queue", Element::create(false));
+            }
+
             // Verify that the staged queue control equals the expected queue control.
-            EXPECT_TRUE(staged_control->equals(*exp_control));
+            EXPECT_TRUE(staged_control->equals(*exp_control))
+#ifdef HAVE_CREATE_UNIFIED_DIFF
+                << "\nDiff:\n" << isc::test::generateDiff(prettyPrint(staged_control), prettyPrint(exp_control)) << "\n"
+#endif
+            ;
         }
     }
 }
@@ -7927,7 +7945,7 @@ TEST_F(Dhcp6ParserTest, storeExtendedInfoGlobal) {
 
     ConstElementPtr json = parseJSON(config);
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(status, 0);
 
     // First subnet should override the global value.
@@ -7963,7 +7981,7 @@ TEST_F(Dhcp6ParserTest, storeExtendedInfoNoGlobal) {
 
     ConstElementPtr json = parseJSON(config);
     ConstElementPtr status;
-    EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(status, 0);
 
     // First subnet should use global default.
@@ -7994,7 +8012,7 @@ TEST_F(Dhcp6ParserTest, statsDefaultLimits) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(status, 0);
 
     CfgMgr::instance().commit();
@@ -8016,7 +8034,7 @@ TEST_F(Dhcp6ParserTest, multiThreadingDefaultSettings) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(status, 0);
 
     ConstElementPtr cfg = CfgMgr::instance().getStagingCfg()->getDHCPMultiThreading();
@@ -8024,7 +8042,7 @@ TEST_F(Dhcp6ParserTest, multiThreadingDefaultSettings) {
 
     std::string content_json =
         "{"
-        "    \"enable-multi-threading\": false,\n"
+        "    \"enable-multi-threading\": true,\n"
         "    \"thread-pool-size\": 0,\n"
         "    \"packet-queue-size\": 64\n"
         "}";
@@ -8053,7 +8071,7 @@ TEST_F(Dhcp6ParserTest, multiThreadingSettings) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
+    ASSERT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
     checkResult(status, 0);
 
     ConstElementPtr cfg = CfgMgr::instance().getStagingCfg()->getDHCPMultiThreading();
@@ -8096,7 +8114,7 @@ TEST_F(Dhcp6ParserTest, clientClassValidPreferredLifetime) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW_LOG(status = configureDhcp6Server(srv_, json));
+    ASSERT_NO_THROW_LOG(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
@@ -8160,7 +8178,7 @@ TEST_F(Dhcp6ParserTest, templateClientClassValidPreferredLifetime) {
     extractConfig(config);
 
     ConstElementPtr status;
-    ASSERT_NO_THROW_LOG(status = configureDhcp6Server(srv_, json));
+    ASSERT_NO_THROW_LOG(status = Dhcpv6SrvTest::configure(srv_, json));
     ASSERT_TRUE(status);
     checkResult(status, 0);
 
index 4d009c19bc45d1b5a1c9328d7250a107611280fc..66591feb240ae1350b49e5925b98b4c0b071f67d 100644 (file)
@@ -31,7 +31,9 @@
 #include <boost/scoped_ptr.hpp>
 #include <gtest/gtest.h>
 
+#include <fstream>
 #include <iomanip>
+#include <regex>
 #include <sstream>
 #include <thread>
 
@@ -152,14 +154,12 @@ public:
             socket_path_ = sandbox.join("/kea6.sock");
         }
         reset();
-        MultiThreadingMgr::instance().setMode(false);
     }
 
     /// @brief Destructor
     ~CtrlChannelDhcpv6SrvTest() {
         server_.reset();
         reset();
-        MultiThreadingMgr::instance().setMode(false);
     };
 
     /// @brief Returns pointer to the server's IO service.
@@ -463,7 +463,6 @@ TEST_F(CtrlChannelDhcpv6SrvTest, libreload) {
     // Load two libraries
     HookLibsCollection libraries;
     libraries.push_back(make_pair(CALLOUT_LIBRARY_1, ConstElementPtr()));
-    libraries.push_back(make_pair(CALLOUT_LIBRARY_2, ConstElementPtr()));
     HooksManager::loadLibraries(libraries);
 
     // Check they are loaded.
@@ -475,7 +474,7 @@ TEST_F(CtrlChannelDhcpv6SrvTest, libreload) {
     // load functions exists and holds the correct value (of "12" - the
     // first library appends "1" to the file, the second appends "2"). Also
     // check that the unload marker file does not yet exist.
-    EXPECT_TRUE(checkMarkerFile(LOAD_MARKER_FILE, "12"));
+    EXPECT_TRUE(checkMarkerFile(LOAD_MARKER_FILE, "1"));
     EXPECT_FALSE(checkMarkerFileExists(UNLOAD_MARKER_FILE));
 
     // Now execute the "libreload" command.  This should cause the libraries
@@ -490,8 +489,8 @@ TEST_F(CtrlChannelDhcpv6SrvTest, libreload) {
     // Check that the libraries have unloaded and reloaded.  The libraries are
     // unloaded in the reverse order to which they are loaded.  When they load,
     // they should append information to the loading marker file.
-    EXPECT_TRUE(checkMarkerFile(UNLOAD_MARKER_FILE, "21"));
-    EXPECT_TRUE(checkMarkerFile(LOAD_MARKER_FILE, "1212"));
+    EXPECT_TRUE(checkMarkerFile(UNLOAD_MARKER_FILE, "1"));
+    EXPECT_TRUE(checkMarkerFile(LOAD_MARKER_FILE, "11"));
 }
 
 // Check that the "libreload" command will fail to reload libraries which are
@@ -503,6 +502,10 @@ TEST_F(CtrlChannelDhcpv6SrvTest, libreloadFailMultiThreading) {
     ASSERT_FALSE(checkMarkerFileExists(LOAD_MARKER_FILE));
     ASSERT_FALSE(checkMarkerFileExists(UNLOAD_MARKER_FILE));
 
+    // Disable multi-threading to temporarily trick the hook manager
+    // into loading single-threaded libraries.
+    MultiThreadingMgr::instance().setMode(false);
+
     // Load two libraries
     HookLibsCollection libraries;
     libraries.push_back(make_pair(CALLOUT_LIBRARY_1, ConstElementPtr()));
@@ -1032,16 +1035,22 @@ TEST_F(CtrlChannelDhcpv6SrvTest, statusGet) {
 
     auto found_multi_threading = arguments->get("multi-threading-enabled");
     ASSERT_TRUE(found_multi_threading);
-    EXPECT_FALSE(found_multi_threading->boolValue());
+    EXPECT_TRUE(found_multi_threading->boolValue());
 
     auto found_thread_count = arguments->get("thread-pool-size");
-    ASSERT_FALSE(found_thread_count);
+    ASSERT_TRUE(found_thread_count);
+    // The default value varies between systems.
+    // Let's just make sure it's a positive value.
+    EXPECT_LE(0, found_thread_count->intValue());
 
     auto found_queue_size = arguments->get("packet-queue-size");
-    ASSERT_FALSE(found_queue_size);
+    ASSERT_TRUE(found_queue_size);
+    EXPECT_EQ(64, found_queue_size->intValue());
 
     auto found_queue_stats = arguments->get("packet-queue-statistics");
-    ASSERT_FALSE(found_queue_stats);
+    ASSERT_TRUE(found_queue_stats);
+    EXPECT_TRUE(regex_match(found_queue_stats->str(),
+                            regex("[ 0\\.[0-9]+, 0\\.[0-9]+, 0\\.[0-9]+ ]")));
 
     MultiThreadingMgr::instance().setMode(true);
     MultiThreadingMgr::instance().setThreadPoolSize(4);
index fd8f27b122b81e6b6b0ea390d34e48bd67386aaa..bf78974d5869127140c5e32909ba31cdb0247fb5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2013-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -843,6 +843,16 @@ Dhcpv6SrvTest::testReceiveStats(uint8_t pkt_type, const std::string& stat_name)
     EXPECT_EQ(1, tested_stat->getInteger().first);
 }
 
+ConstElementPtr
+Dhcpv6SrvTest::configure(Dhcpv6Srv& server, ConstElementPtr config) {
+    ConstElementPtr const status(configureDhcp6Server(server, config));
+
+    // Simulate the application of MT config such as in ControlledDhcpvXSrv::processConfig().
+    CfgMultiThreading::apply(CfgMgr::instance().getStagingCfg()->getDHCPMultiThreading());
+
+    return status;
+}
+
 void
 Dhcpv6SrvTest::configure(const std::string& config,
                          const bool commit,
index d240253e7fa2c2fc25bcbc6d42ca0544613c542c..a28e53d5d088de51ad201c2f1a7ed157a64b48de 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2013-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -571,6 +571,17 @@ public:
     /// Removes existing configuration.
     ~Dhcpv6SrvTest();
 
+    /// @brief Used to configure a server for tests.
+    ///
+    /// A wrapper over configureDhcp6Server() to which any other
+    /// simulations of production code are added.
+    ///
+    /// @brief server the server being tested
+    /// @brief config the configuration the server is configured with
+    ///
+    /// @return a JSON-formatted status of the reconfiguration
+    static ConstElementPtr configure(Dhcpv6Srv& server, isc::data::ConstElementPtr config);
+
     /// @brief Runs DHCPv6 configuration from the JSON string.
     ///
     /// @param config String holding server configuration in JSON format.
index ad60a1b359c6b3e69b8712ca031207289dcd196f..842805f1d7e71304541bab15a5ef4b60fcce15e5 100644 (file)
@@ -20,6 +20,7 @@
 #include <dhcp6/tests/dhcp6_test_utils.h>
 #include <dhcp6/tests/get_config_unittest.h>
 #include <testutils/gtest_utils.h>
+#include <testutils/test_to_element.h>
 
 #include <boost/algorithm/string.hpp>
 #include <gtest/gtest.h>
@@ -2133,7 +2134,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -2227,7 +2228,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"min-preferred-lifetime\": 2000,\n"
 "        \"min-valid-lifetime\": 3000,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -2349,7 +2350,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -2564,7 +2565,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -2779,7 +2780,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -2998,7 +2999,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        \"min-preferred-lifetime\": 2000,\n"
 "        \"min-valid-lifetime\": 3000,\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3120,7 +3121,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3243,7 +3244,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3366,7 +3367,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3527,7 +3528,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3649,7 +3650,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3773,7 +3774,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -3899,7 +3900,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4040,7 +4041,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4164,7 +4165,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4262,7 +4263,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4360,7 +4361,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4467,7 +4468,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4565,7 +4566,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4663,7 +4664,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4802,7 +4803,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -4941,7 +4942,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5090,7 +5091,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5216,7 +5217,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5391,7 +5392,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5562,7 +5563,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5737,7 +5738,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -5874,7 +5875,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6015,7 +6016,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6105,7 +6106,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6195,7 +6196,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6317,7 +6318,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6439,7 +6440,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6657,7 +6658,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6794,7 +6795,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -6939,7 +6940,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7061,7 +7062,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7183,7 +7184,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7305,7 +7306,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7564,7 +7565,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7709,7 +7710,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"client-link-addr-option\", \"remote-id\", \"subscriber-id\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7799,7 +7800,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"client-link-addr-option\", \"remote-id\", \"subscriber-id\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -7889,7 +7890,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8213,7 +8214,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8369,7 +8370,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8459,7 +8460,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8547,7 +8548,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8635,7 +8636,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8723,7 +8724,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8825,7 +8826,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -8947,7 +8948,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9069,7 +9070,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9192,7 +9193,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9320,7 +9321,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9448,7 +9449,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9572,7 +9573,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9697,7 +9698,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9841,7 +9842,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -9966,7 +9967,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10179,7 +10180,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10405,7 +10406,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10495,7 +10496,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10687,7 +10688,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
@@ -10823,7 +10824,7 @@ const char* UNPARSED_CONFIGS[] = {
 "        },\n"
 "        \"mac-sources\": [ \"any\" ],\n"
 "        \"multi-threading\": {\n"
-"            \"enable-multi-threading\": false,\n"
+"            \"enable-multi-threading\": true,\n"
 "            \"packet-queue-size\": 64,\n"
 "            \"thread-pool-size\": 0\n"
 "        },\n"
index 327631f281ded5cfd3f7532617af2281d0e790a7..e4bb9f248bbffdbdf478c11cd624aaf85064e5f5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2013-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -5611,7 +5611,8 @@ TEST_F(LoadUnloadDhcpv6SrvTest, Dhcpv6SrvConfigured) {
 
         // Minimal valid configuration for the server. It includes the
         // section which loads the callout library #3, which implements
-        // dhcp6_srv_configured callout.
+        // dhcp6_srv_configured callout. MT needs to be disabled
+        // since the library is single-threaded.
         string config_str =
             "{"
             "    \"interfaces-config\": {"
@@ -5631,8 +5632,12 @@ TEST_F(LoadUnloadDhcpv6SrvTest, Dhcpv6SrvConfigured) {
             "            \"library\": \"" + std::string(CALLOUT_LIBRARY_3) + "\""
             + parameters +
             "        }"
-            "    ]"
-            "}";
+          R"(    ],
+                 "multi-threading": {
+                    "enable-multi-threading": false
+                }
+            })";
+
 
         ConstElementPtr config = Element::fromJSON(config_str);
 
index f2a46d92b138047a15c2083bb624dcb19a8a5150..4d3ae33a27c653922a6eaeabba6d9c5ebe63269b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2019-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2019-2023 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
 using namespace isc::util;
 using namespace isc;
 
+/// @brief Fixture used to reset multi-threading before and after each test.
+struct MultiThreadingMgrTest : ::testing::Test {
+    MultiThreadingMgrTest() {
+        MultiThreadingMgr::instance().apply(false, 0, 0);
+    }
+    ~MultiThreadingMgrTest() {
+        MultiThreadingMgr::instance().apply(false, 0, 0);
+    }
+};
+
 /// @brief Verifies that the default mode is false (MT disabled).
-TEST(MultiThreadingMgrTest, defaultMode) {
+TEST_F(MultiThreadingMgrTest, defaultMode) {
     // MT should be disabled
     EXPECT_FALSE(MultiThreadingMgr::instance().getMode());
 }
 
 /// @brief Verifies that the mode setter works.
-TEST(MultiThreadingMgrTest, setMode) {
+TEST_F(MultiThreadingMgrTest, setMode) {
     // enable MT
     EXPECT_NO_THROW(MultiThreadingMgr::instance().setMode(true));
     // MT should be enabled
@@ -34,13 +44,13 @@ TEST(MultiThreadingMgrTest, setMode) {
 }
 
 /// @brief Verifies that accessing the thread pool works.
-TEST(MultiThreadingMgrTest, threadPool) {
+TEST_F(MultiThreadingMgrTest, threadPool) {
     // get the thread pool
     EXPECT_NO_THROW(MultiThreadingMgr::instance().getThreadPool());
 }
 
 /// @brief Verifies that the thread pool size setter works.
-TEST(MultiThreadingMgrTest, threadPoolSize) {
+TEST_F(MultiThreadingMgrTest, threadPoolSize) {
     // default thread count is 0
     EXPECT_EQ(MultiThreadingMgr::instance().getThreadPoolSize(), 0);
     // set thread count to 16
@@ -54,7 +64,7 @@ TEST(MultiThreadingMgrTest, threadPoolSize) {
 }
 
 /// @brief Verifies that the packet queue size setter works.
-TEST(MultiThreadingMgrTest, packetQueueSize) {
+TEST_F(MultiThreadingMgrTest, packetQueueSize) {
     // default queue size is 0
     EXPECT_EQ(MultiThreadingMgr::instance().getPacketQueueSize(), 0);
     EXPECT_EQ(MultiThreadingMgr::instance().getThreadPool().getMaxQueueSize(), 0);
@@ -71,13 +81,13 @@ TEST(MultiThreadingMgrTest, packetQueueSize) {
 }
 
 /// @brief Verifies that detecting thread count works.
-TEST(MultiThreadingMgrTest, detectThreadCount) {
+TEST_F(MultiThreadingMgrTest, detectThreadCount) {
     // detecting thread count should work
     EXPECT_NE(MultiThreadingMgr::detectThreadCount(), 0);
 }
 
 /// @brief Verifies that apply settings works.
-TEST(MultiThreadingMgrTest, applyConfig) {
+TEST_F(MultiThreadingMgrTest, applyConfig) {
     // get the thread pool
     auto& thread_pool = MultiThreadingMgr::instance().getThreadPool();
     // MT should be disabled
@@ -125,7 +135,7 @@ TEST(MultiThreadingMgrTest, applyConfig) {
 }
 
 /// @brief Verifies that the critical section flag works.
-TEST(MultiThreadingMgrTest, criticalSectionFlag) {
+TEST_F(MultiThreadingMgrTest, criticalSectionFlag) {
     // get the thread pool
     auto& thread_pool = MultiThreadingMgr::instance().getThreadPool();
     // MT should be disabled
@@ -175,7 +185,7 @@ TEST(MultiThreadingMgrTest, criticalSectionFlag) {
 }
 
 /// @brief Verifies that the critical section works.
-TEST(MultiThreadingMgrTest, criticalSection) {
+TEST_F(MultiThreadingMgrTest, criticalSection) {
     // get the thread pool instance
     auto& thread_pool = MultiThreadingMgr::instance().getThreadPool();
     // thread pool should be stopped