From: Andrei Pavel Date: Tue, 7 Feb 2023 12:23:24 +0000 (+0200) Subject: [#2402] adapt tests to MT enabled by default X-Git-Tag: Kea-2.3.5~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=22fcc845e9c79a0c08f96c42b1ca900c1970efbb;p=thirdparty%2Fkea.git [#2402] adapt tests to MT enabled by default --- diff --git a/src/bin/dhcp4/tests/config_parser_unittest.cc b/src/bin/dhcp4/tests/config_parser_unittest.cc index 5d152356c4..d0afeab884 100644 --- a/src/bin/dhcp4/tests/config_parser_unittest.cc +++ b/src/bin/dhcp4/tests/config_parser_unittest.cc @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -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, "")); } @@ -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, "")); } @@ -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, "")); } @@ -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, "")); 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, "")); 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, "")); 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, "")); 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, "")); } @@ -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, "")); 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, "")); 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, "")); 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, "")); 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, "")); 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, "")); } @@ -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, "")); } @@ -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, "")); @@ -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, "")); // 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& libraries, - bool multi_threading) { +buildHooksLibrariesConfig(const std::vector& libraries = {}, + bool multi_threading = true) { // Create the first part of the configuration string. string config = @@ -4151,34 +4152,17 @@ buildHooksLibrariesConfig(const std::vector& 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 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 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(); diff --git a/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc b/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc index 505e15e1f8..46072020e4 100644 --- a/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc +++ b/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc @@ -34,10 +34,9 @@ #include #include -#include #include #include -#include +#include #include #include @@ -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); diff --git a/src/bin/dhcp4/tests/dhcp4_srv_unittest.cc b/src/bin/dhcp4/tests/dhcp4_srv_unittest.cc index a6840f6b29..d4d3acfc9f 100644 --- a/src/bin/dhcp4/tests/dhcp4_srv_unittest.cc +++ b/src/bin/dhcp4/tests/dhcp4_srv_unittest.cc @@ -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_); diff --git a/src/bin/dhcp4/tests/dhcp4_test_utils.cc b/src/bin/dhcp4/tests/dhcp4_test_utils.cc index c0ee11e0fb..01596e6550 100644 --- a/src/bin/dhcp4/tests/dhcp4_test_utils.cc +++ b/src/bin/dhcp4/tests/dhcp4_test_utils.cc @@ -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 diff --git a/src/bin/dhcp4/tests/dhcp4_test_utils.h b/src/bin/dhcp4/tests/dhcp4_test_utils.h index e500ee0ac6..2de72d943c 100644 --- a/src/bin/dhcp4/tests/dhcp4_test_utils.h +++ b/src/bin/dhcp4/tests/dhcp4_test_utils.h @@ -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 diff --git a/src/bin/dhcp4/tests/get_config_unittest.cc b/src/bin/dhcp4/tests/get_config_unittest.cc index 438c9ac501..9168c2cdbe 100644 --- a/src/bin/dhcp4/tests/get_config_unittest.cc +++ b/src/bin/dhcp4/tests/get_config_unittest.cc @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -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 { diff --git a/src/bin/dhcp4/tests/hooks_unittest.cc b/src/bin/dhcp4/tests/hooks_unittest.cc index 5e7244bbd3..6167daee53 100644 --- a/src/bin/dhcp4/tests/hooks_unittest.cc +++ b/src/bin/dhcp4/tests/hooks_unittest.cc @@ -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_); diff --git a/src/bin/dhcp4/tests/vendor_opts_unittest.cc b/src/bin/dhcp4/tests/vendor_opts_unittest.cc index 608ab74ef5..f75d44ce1b 100644 --- a/src/bin/dhcp4/tests/vendor_opts_unittest.cc +++ b/src/bin/dhcp4/tests/vendor_opts_unittest.cc @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -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")); diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc index a79b485827..71b92a5f4e 100644 --- a/src/bin/dhcp6/tests/config_parser_unittest.cc +++ b/src/bin/dhcp6/tests/config_parser_unittest.cc @@ -31,6 +31,7 @@ #include #include #include +#include #include #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, "")); 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, "")); 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, "")); } @@ -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, "")); 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, "")); 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, "")); 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, "")); 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, "")); 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, "")); } @@ -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, "")); @@ -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& libraries, - bool multi_threading) { +buildHooksLibrariesConfig(const std::vector& libraries = {}, + bool multi_threading = true) { const string lbrace("{"); const string rbrace("}"); const string liblabel("\"library\": "); @@ -4422,34 +4423,17 @@ buildHooksLibrariesConfig(const std::vector& 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 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, "")); @@ -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, "")); @@ -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 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); diff --git a/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc b/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc index 4d009c19bc..66591feb24 100644 --- a/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc +++ b/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc @@ -31,7 +31,9 @@ #include #include +#include #include +#include #include #include @@ -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); diff --git a/src/bin/dhcp6/tests/dhcp6_test_utils.cc b/src/bin/dhcp6/tests/dhcp6_test_utils.cc index fd8f27b122..bf78974d58 100644 --- a/src/bin/dhcp6/tests/dhcp6_test_utils.cc +++ b/src/bin/dhcp6/tests/dhcp6_test_utils.cc @@ -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, diff --git a/src/bin/dhcp6/tests/dhcp6_test_utils.h b/src/bin/dhcp6/tests/dhcp6_test_utils.h index d240253e7f..a28e53d5d0 100644 --- a/src/bin/dhcp6/tests/dhcp6_test_utils.h +++ b/src/bin/dhcp6/tests/dhcp6_test_utils.h @@ -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. diff --git a/src/bin/dhcp6/tests/get_config_unittest.cc b/src/bin/dhcp6/tests/get_config_unittest.cc index ad60a1b359..842805f1d7 100644 --- a/src/bin/dhcp6/tests/get_config_unittest.cc +++ b/src/bin/dhcp6/tests/get_config_unittest.cc @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -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" diff --git a/src/bin/dhcp6/tests/hooks_unittest.cc b/src/bin/dhcp6/tests/hooks_unittest.cc index 327631f281..e4bb9f248b 100644 --- a/src/bin/dhcp6/tests/hooks_unittest.cc +++ b/src/bin/dhcp6/tests/hooks_unittest.cc @@ -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); diff --git a/src/lib/util/tests/multi_threading_mgr_unittest.cc b/src/lib/util/tests/multi_threading_mgr_unittest.cc index f2a46d92b1..4d3ae33a27 100644 --- a/src/lib/util/tests/multi_threading_mgr_unittest.cc +++ b/src/lib/util/tests/multi_threading_mgr_unittest.cc @@ -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 @@ -15,14 +15,24 @@ 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