#include <stats/stats_mgr.h>
#include <testutils/log_utils.h>
#include <testutils/gtest_utils.h>
+#include <testutils/test_to_element.h>
#include <util/chrono_time_utils.h>
#include <util/doubles.h>
}
ConstElementPtr status;
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
ASSERT_TRUE(status);
int rcode;
ConstElementPtr x;
std::string config = createConfigWithOption(param_value, parameter);
ConstElementPtr json = parseDHCP4(config);
- EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+ EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
checkResult(x, 1);
EXPECT_TRUE(errorContainsPosition(x, "<string>"));
}
ConstElementPtr x;
std::string config = createConfigWithOption(params);
ConstElementPtr json = parseDHCP4(config);
- EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+ EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
checkResult(x, 1);
EXPECT_TRUE(errorContainsPosition(x, "<string>"));
}
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
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);
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)
"\"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);
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);
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)";
"\"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)";
"\"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)";
"\"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)";
"\"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)";
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)";
"\"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)";
"\"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)";
"\"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)";
"\"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)";
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);
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);
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);
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();
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();
ConstElementPtr json;
ASSERT_NO_THROW(json = parseDHCP4(config));
- EXPECT_NO_THROW(x = configureDhcp4Server(*srv_, json));
+ EXPECT_NO_THROW(x = Dhcpv4SrvTest::configure(*srv_, json));
checkResult(x, 1);
EXPECT_TRUE(errorContainsPosition(x, "<string>"));
}
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 =
// 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();
/// 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();
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);
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);
// check if returned status is always a failure
ConstElementPtr status;
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json1));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json1));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json2));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json2));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json3));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json3));
checkResult(status, 0);
EXPECT_FALSE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json4));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json4));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json5));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json5));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
}
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);
// 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)
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();
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();
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();
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();
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);
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 =
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
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);
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);
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json2));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json2));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json3));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json3));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json4));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json4));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json5));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json5));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json6));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json6));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json7));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json7));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
}
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_);
}
ConstElementPtr json;
ASSERT_NO_THROW(json = parseDHCP4(config, true));
ConstElementPtr status;
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
}
// 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);
// 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));
// 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);
// 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);
// Use the configuration string to create new option definitions.
ConstElementPtr status;
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json));
ASSERT_TRUE(status);
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
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);
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);
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
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
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);
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);
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);
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()->
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()->
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()->
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()->
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()->
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()->
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)
/// @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)
/// @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)
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
// CASE 4: -1 (UINT_MIN -1 ) should not work
- EXPECT_NO_THROW(status = configureDhcp4Server(*srv_,
+ EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_,
parseJSON("{\"renew-timer\": -1}")));
// returned value must be rejected (1 configuration error)
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
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);
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);
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);
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);
// Helper function to return a configuration containing an arbitrary number
// of hooks libraries.
std::string
-buildHooksLibrariesConfig(const std::vector<std::string>& libraries,
- bool multi_threading) {
+buildHooksLibrariesConfig(const std::vector<std::string>& libraries = {},
+ bool multi_threading = true) {
// Create the first part of the configuration string.
string config =
" \"subnet\": \"192.0.2.0/24\""
" } ]");
- if (multi_threading) {
- config += string(
- ","
- "\"multi-threading\": {"
- " \"enable-multi-threading\": true"
- "}");
- }
+ config += R"(,
+ "multi-threading": {
+ "enable-multi-threading": )" +
+ string(multi_threading ? "true" : "false") + R"(
+ })";
config += string("}");
return (config);
}
-// Convenience function for creating hooks library configuration with one or
-// two character string constants.
-std::string
-buildHooksLibrariesConfig(const char* library1 = NULL,
- const char* library2 = NULL) {
- std::vector<std::string> libraries;
- if (library1 != NULL) {
- libraries.push_back(string(library1));
- if (library2 != NULL) {
- libraries.push_back(string(library2));
- }
- }
- return (buildHooksLibrariesConfig(libraries, false));
-}
-
// The goal of this test is to verify the configuration of hooks libraries if
// none are specified.
TEST_F(Dhcp4ParserTest, NoHooksLibraries) {
// 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);
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"));
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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 =
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 =
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
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.
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);
// 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.
// 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);
}
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
}
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);
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);
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);
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);
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);
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);
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
struct Scenario {
std::string description_;
std::string json_;
+ std::string mt_json_;
};
std::vector<Scenario> scenarios = {
{
"no entry",
- ""
+ "",
+ "",
},
{
"queue disabled",
"{ \n"
" \"enable-queue\": false \n"
- "} \n"
+ "} \n",
+ R"("multi-threading": {
+ "enable-multi-threading": false
+ })",
+ },
+ {
+ "queue enabled at first, but gets forcefully disabled by MT",
+ "{ \n"
+ " \"enable-queue\": true \n"
+ "} \n",
+ R"("multi-threading": {
+ "enable-multi-threading": true
+ })",
},
{
"queue disabled, arbitrary content allowed",
" \"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",
" \"queue-type\": \"some-type\", \n"
" \"foo\": \"bogus\", \n"
" \"random-int\" : 1234 \n"
- "} \n"
+ "} \n",
+ R"("multi-threading": {
+ "enable-multi-threading": false
+ })",
}
};
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, "");
// 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
+ ;
}
}
}
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();
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();
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();
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();
std::string content_json =
"{"
- " \"enable-multi-threading\": false,\n"
+ " \"enable-multi-threading\": true,\n"
" \"thread-pool-size\": 0,\n"
" \"packet-queue-size\": 64\n"
"}";
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();
#include <boost/scoped_ptr.hpp>
#include <gtest/gtest.h>
-#include <cstdlib>
#include <fstream>
#include <iomanip>
-#include <iostream>
+#include <regex>
#include <sstream>
#include <thread>
socket_path_ = sandbox.join("kea4.sock");
}
reset();
- MultiThreadingMgr::instance().setMode(false);
}
/// @brief Destructor
CommandMgr::instance().setConnectionTimeout(TIMEOUT_DHCP_SERVER_RECEIVE_COMMAND);
server_.reset();
- MultiThreadingMgr::instance().setMode(false);
};
/// @brief Returns pointer to the server's IO service.
// 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.
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
// 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
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()));
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);
-// 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
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();
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();
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_);
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_);
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_);
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_);
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_);
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_);
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_);
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();
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();
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();
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_);
// 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.
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_);
-// 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
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
-// 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
/// @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
#include <dhcp4/tests/dhcp4_test_utils.h>
#include <dhcp4/tests/get_config_unittest.h>
#include <testutils/gtest_utils.h>
+#include <testutils/test_to_element.h>
#include <boost/algorithm/string.hpp>
#include <gtest/gtest.h>
" \"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"
" },\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"
" },\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"
" },\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"
" \"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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" \"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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
// 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);
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 {
-// 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
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_);
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_);
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_);
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_);
// 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\": {"
" \"library\": \"" + std::string(CALLOUT_LIBRARY_3) + "\""
+ parameters +
" }"
- " ]"
- "}";
+ R"( ],
+ "multi-threading": {
+ "enable-multi-threading": false
+ }
+ })";
ConstElementPtr config = Element::fromJSON(config_str);
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\": [ \"*\" ]"
"},"
" \"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_);
#include <dhcp/tests/pkt_captures.h>
#include <dhcp/docsis3_option_defs.h>
#include <dhcp/dhcp4.h>
+#include <dhcpsrv/cfg_multi_threading.h>
#include <dhcpsrv/cfgmgr.h>
#include <gtest/gtest.h>
// 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_);
// 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_);
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_);
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_);
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_);
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_);
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_);
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_);
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_);
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_);
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_);
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_);
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);
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"));
#include <stats/stats_mgr.h>
#include <testutils/gtest_utils.h>
#include <testutils/log_utils.h>
+#include <testutils/test_to_element.h>
#include <util/chrono_time_utils.h>
#include "test_data_files_config.h"
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 status;
try {
json = parseJSON(config);
- status = configureDhcp6Server(srv_, json);
+ status = Dhcpv6SrvTest::configure(srv_, json);
} catch (const std::exception& ex) {
ADD_FAILURE() << "Unable to " << operation << ". "
ConstElementPtr x;
std::string config = createConfigWithOption(param_value, parameter);
ConstElementPtr json = parseDHCP6(config);
- EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+ EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
checkResult(x, 1);
EXPECT_TRUE(errorContainsPosition(x, "<string>"));
CfgMgr::instance().clear();
ConstElementPtr x;
std::string config = createConfigWithOption(params);
ConstElementPtr json = parseDHCP6(config);
- EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+ EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
checkResult(x, 1);
EXPECT_TRUE(errorContainsPosition(x, "<string>"));
CfgMgr::instance().clear();
// 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.
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);
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)
"\"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);
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)";
"\"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)";
"\"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)";
"\"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)";
"\"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)";
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)";
"\"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)";
"\"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)";
"\"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)";
"\"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)";
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)";
"\"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)";
"\"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)";
"\"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)";
"\"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)";
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)";
"\"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)";
"\"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)";
"\"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)";
"\"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)";
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);
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);
extractConfig(config);
do {
- EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+ EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
checkResult(x, 0);
CfgMgr::instance().commit();
extractConfig(config);
do {
- EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+ EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
checkResult(x, 0);
CfgMgr::instance().commit();
ConstElementPtr json;
ASSERT_NO_THROW(json = parseDHCP6(config));
- EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
+ EXPECT_NO_THROW(x = Dhcpv6SrvTest::configure(srv_, json));
checkResult(x, 1);
EXPECT_TRUE(errorContainsPosition(x, "<string>"));
}
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();
// 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();
/// 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();
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);
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);
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);
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);
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);
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);
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);
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_);
}
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 =
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
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);
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);
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json2));
+ EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json2));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json3));
+ EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json3));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json4));
+ EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json4));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json5));
+ EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json5));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json6));
+ EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json6));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
CfgMgr::instance().clear();
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json7));
+ EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json7));
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
}
// 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.
// 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.
// 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.
// 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.
}
// 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.
// 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);
// 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));
// 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);
// 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);
// Use the configuration string to create new option definitions.
ConstElementPtr status;
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+ EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
ASSERT_TRUE(status);
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
// 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);
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);
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);
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
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
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);
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);
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);
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()->
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()->
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()->
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()->
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()->
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);
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);
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);
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);
// Helper function to return a configuration containing an arbitrary number
// of hooks libraries.
std::string
-buildHooksLibrariesConfig(const std::vector<std::string>& libraries,
- bool multi_threading) {
+buildHooksLibrariesConfig(const std::vector<std::string>& libraries = {},
+ bool multi_threading = true) {
const string lbrace("{");
const string rbrace("}");
const string liblabel("\"library\": ");
" \"space\": \"a-vendor-space\""
" } ]");
- if (multi_threading) {
- config += string(
- ","
- "\"multi-threading\": {"
- " \"enable-multi-threading\": true"
- "}");
- }
+ config += R"(,
+ "multi-threading": {
+ "enable-multi-threading": )" +
+ string(multi_threading ? "true" : "false") + R"(
+ })";
config += string("}");
return (config);
}
-// Convenience function for creating hooks library configuration with one or
-// two character string constants.
-std::string
-buildHooksLibrariesConfig(const char* library1 = NULL,
- const char* library2 = NULL) {
- std::vector<std::string> libraries;
- if (library1 != NULL) {
- libraries.push_back(string(library1));
- if (library2 != NULL) {
- libraries.push_back(string(library2));
- }
- }
- return (buildHooksLibrariesConfig(libraries, false));
-}
-
// The goal of this test is to verify the configuration of hooks libraries if
// none are specified.
TEST_F(Dhcp6ParserTest, NoHooksLibraries) {
// 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);
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"));
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);
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);
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
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);
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);
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);
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 =
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 =
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 =
// 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);
// 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);
// 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);
// 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);
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
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.
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);
// 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.
// 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);
}
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();
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();
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,"
"\"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);
}
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);
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);
"\"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);
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);
"\"valid-lifetime\": 4000 }"));
ConstElementPtr status;
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+ EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
// returned value should be 0 (success)
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
"\"valid-lifetime\": 4000 }"));
ConstElementPtr status;
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+ EXPECT_NO_THROW(status = Dhcpv6SrvTest::configure(srv_, json));
// returned value should be 0 (success)
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
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;
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;
// 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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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
struct Scenario {
std::string description_;
std::string json_;
+ std::string mt_json_;
};
-
std::vector<Scenario> scenarios = {
{
"no entry",
- ""
+ "",
+ "",
},
{
"queue disabled",
"{ \n"
" \"enable-queue\": false \n"
- "} \n"
+ "} \n",
+ R"("multi-threading": {
+ "enable-multi-threading": false
+ })",
+ },
+ {
+ "queue enabled at first, but gets forcefully disabled by MT",
+ "{ \n"
+ " \"enable-queue\": true \n"
+ "} \n",
+ R"("multi-threading": {
+ "enable-multi-threading": true
+ })",
},
{
"queue disabled, arbitrary content allowed",
" \"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",
" \"queue-type\": \"some-type\", \n"
" \"foo\": \"bogus\", \n"
" \"random-int\" : 1234 \n"
- "} \n"
+ "} \n",
+ R"("multi-threading": {
+ "enable-multi-threading": false
+ })",
}
};
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, "");
// 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
+ ;
}
}
}
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.
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.
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();
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();
std::string content_json =
"{"
- " \"enable-multi-threading\": false,\n"
+ " \"enable-multi-threading\": true,\n"
" \"thread-pool-size\": 0,\n"
" \"packet-queue-size\": 64\n"
"}";
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();
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);
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);
#include <boost/scoped_ptr.hpp>
#include <gtest/gtest.h>
+#include <fstream>
#include <iomanip>
+#include <regex>
#include <sstream>
#include <thread>
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.
// 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.
// 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
// 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
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()));
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);
-// 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
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,
-// 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
/// 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.
#include <dhcp6/tests/dhcp6_test_utils.h>
#include <dhcp6/tests/get_config_unittest.h>
#include <testutils/gtest_utils.h>
+#include <testutils/test_to_element.h>
#include <boost/algorithm/string.hpp>
#include <gtest/gtest.h>
" },\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"
" \"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"
" },\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"
" },\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"
" },\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"
" \"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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
" },\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"
-// 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
// 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\": {"
" \"library\": \"" + std::string(CALLOUT_LIBRARY_3) + "\""
+ parameters +
" }"
- " ]"
- "}";
+ R"( ],
+ "multi-threading": {
+ "enable-multi-threading": false
+ }
+ })";
+
ConstElementPtr config = Element::fromJSON(config_str);
-// Copyright (C) 2019-2022 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2019-2023 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
using namespace isc::util;
using namespace isc;
+/// @brief Fixture used to reset multi-threading before and after each test.
+struct MultiThreadingMgrTest : ::testing::Test {
+ MultiThreadingMgrTest() {
+ MultiThreadingMgr::instance().apply(false, 0, 0);
+ }
+ ~MultiThreadingMgrTest() {
+ MultiThreadingMgr::instance().apply(false, 0, 0);
+ }
+};
+
/// @brief Verifies that the default mode is false (MT disabled).
-TEST(MultiThreadingMgrTest, defaultMode) {
+TEST_F(MultiThreadingMgrTest, defaultMode) {
// MT should be disabled
EXPECT_FALSE(MultiThreadingMgr::instance().getMode());
}
/// @brief Verifies that the mode setter works.
-TEST(MultiThreadingMgrTest, setMode) {
+TEST_F(MultiThreadingMgrTest, setMode) {
// enable MT
EXPECT_NO_THROW(MultiThreadingMgr::instance().setMode(true));
// MT should be enabled
}
/// @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
}
/// @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);
}
/// @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
}
/// @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
}
/// @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