#include "test_data_files_config.h"
#include "test_libraries.h"
#include "marker_file.h"
+#include "dhcp6_test_utils.h"
#include <boost/foreach.hpp>
#include <gtest/gtest.h>
params["space"] = DHCP6_OPTION_SPACE;
params["code"] = "38";
params["data"] = "ABCDEF0105";
- params["csv-format"] = "False";
+ params["csv-format"] = "false";
} else if (parameter == "space") {
params["name"] = "subscriber-id";
params["space"] = param_value;
params["code"] = "38";
params["data"] = "ABCDEF0105";
- params["csv-format"] = "False";
+ params["csv-format"] = "false";
} else if (parameter == "code") {
params["name"] = "subscriber-id";
params["space"] = DHCP6_OPTION_SPACE;
params["code"] = param_value;
params["data"] = "ABCDEF0105";
- params["csv-format"] = "False";
+ params["csv-format"] = "false";
} else if (parameter == "data") {
params["name"] = "subscriber-id";
params["space"] = DHCP6_OPTION_SPACE;
params["code"] = "38";
params["data"] = param_value;
- params["csv-format"] = "False";
+ params["csv-format"] = "false";
} else if (parameter == "csv-format") {
params["name"] = "subscriber-id";
params["space"] = DHCP6_OPTION_SPACE;
/// latter case, a failure will have been added to the current test.
bool
executeConfiguration(const std::string& config, const char* operation) {
+ ConstElementPtr json;
ConstElementPtr status;
try {
- ElementPtr json = Element::fromJSON(config);
+ json = parseJSON(config);
status = configureDhcp6Server(srv_, json);
} catch (const std::exception& ex) {
const std::string& parameter) {
ConstElementPtr x;
std::string config = createConfigWithOption(param_value, parameter);
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json = parseJSON(config);
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 1);
EXPECT_TRUE(errorContainsPosition(x, "<string>"));
testInvalidOptionParam(const std::map<std::string, std::string>& params) {
ConstElementPtr x;
std::string config = createConfigWithOption(params);
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json = parseJSON(config);
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 1);
EXPECT_TRUE(errorContainsPosition(x, "<string>"));
CfgMgr::instance().clear();
// Configure the server.
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json = parseJSON(config);
// Make sure that the configuration was successful.
ConstElementPtr status;
ConstElementPtr x;
EXPECT_NO_THROW(x = configureDhcp6Server(srv_,
- Element::fromJSON("{\"version\": 0}")));
+ parseJSON("{\"version\": 0}")));
// returned value must be 0 (configuration accepted)
checkResult(x, 0);
ConstElementPtr x;
EXPECT_NO_THROW(x = configureDhcp6Server(srv_,
- Element::fromJSON("{\"bogus\": 5}")));
+ parseJSON("{\"bogus\": 5}")));
// returned value must be 1 (configuration parse error)
checkResult(x, 1);
/// subnets defined can be accepted.
TEST_F(Dhcp6ParserTest, emptySubnet) {
- ConstElementPtr status;
-
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_,
- Element::fromJSON("{ " + genIfaceConfig() + ","
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6("{ " + genIfaceConfig() + ","
"\"preferred-lifetime\": 3000,"
"\"rebind-timer\": 2000, "
"\"renew-timer\": 1000, "
"\"subnet6\": [ ], "
- "\"valid-lifetime\": 4000 }")));
+ "\"valid-lifetime\": 4000 }"));
+ ConstElementPtr status;
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
+
// returned value should be 0 (success)
checkResult(status, 0);
}
/// parameter timer definitions.
TEST_F(Dhcp6ParserTest, subnetGlobalDefaults) {
- ConstElementPtr status;
-
string config = "{ " + genIfaceConfig() + ","
"\"preferred-lifetime\": 3000,"
"\"rebind-timer\": 2000, "
" \"subnet\": \"2001:db8:1::/64\" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// check if returned status is OK
int cnt = 0; // Number of reconfigurations
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
do {
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
int cnt = 0; // Number of reconfigurations
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
do {
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 1);
// CASE 1: Configure 4 subnets, then reconfigure and remove the
// last one.
- ElementPtr json = Element::fromJSON(config4);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config4));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
ASSERT_EQ(4, subnets->size()); // We expect 4 subnets
// Do the reconfiguration (the last subnet is removed)
- json = Element::fromJSON(config_first3);
+ ASSERT_NO_THROW(json = parseDHCP6(config_first3));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
/// CASE 2: Configure 4 subnets, then reconfigure and remove one
/// from in between (not first, not last)
- json = Element::fromJSON(config4);
+ ASSERT_NO_THROW(json = parseDHCP6(config4));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
CfgMgr::instance().commit();
// Do reconfiguration
- json = Element::fromJSON(config_second_removed);
+ ASSERT_NO_THROW(json = parseDHCP6(config_second_removed));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
// on a per subnet basis.
TEST_F(Dhcp6ParserTest, subnetLocal) {
- ConstElementPtr status;
-
string config = "{ " + genIfaceConfig() + ","
"\"preferred-lifetime\": 3000,"
"\"rebind-timer\": 2000, "
" \"subnet\": \"2001:db8:1::/64\" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 0 (configuration success)
// interface defined.
TEST_F(Dhcp6ParserTest, subnetInterface) {
- ConstElementPtr status;
-
// There should be at least one interface
string config = "{ " + genIfaceConfig() + ","
"\"valid-lifetime\": 4000 }";
cout << config << endl;
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 0 (configuration success)
// Subnet6 definition.
TEST_F(Dhcp6ParserTest, subnetInterfaceBogus) {
- ConstElementPtr status;
-
// There should be at least one interface
string config = "{ " + genIfaceConfig() + ","
"\"valid-lifetime\": 4000 }";
cout << config << endl;
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 1 (configuration error)
// parameter.
TEST_F(Dhcp6ParserTest, interfaceGlobal) {
- ConstElementPtr status;
-
string config = "{ " + genIfaceConfig() + ","
"\"preferred-lifetime\": 3000,"
"\"rebind-timer\": 2000, "
"\"valid-lifetime\": 4000 }";
cout << config << endl;
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 1 (parse error)
" \"subnet\": \"2001:db8:1::/64\" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
" \"subnet\": \"2001:db8:1::/64\" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
" \"subnet\": \"2001:db8:1::/64\" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
"\"subnet6\": [ { "
" \"pools\": [ { \"pool\": \"2001:db8:1::1 - "
"2001:db8:1::ffff\" } ],"
- " \"rapid-commit\": True,"
+ " \"rapid-commit\": true,"
" \"subnet\": \"2001:db8:1::/64\" } ],"
"\"valid-lifetime\": 4000 }",
true);
"\"subnet6\": [ { "
" \"pools\": [ { \"pool\": \"2001:db8:1::1 - "
"2001:db8:1::ffff\" } ],"
- " \"rapid-commit\": False,"
+ " \"rapid-commit\": false,"
" \"subnet\": \"2001:db8:1::/64\" } ],"
"\"valid-lifetime\": 4000 }",
false);
" \"subnet\": \"2001:db8:2::/64\""
" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json;
- ASSERT_NO_THROW(json = Element::fromJSON(config));
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
ConstElementPtr status;
ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
// pool are rejected.
TEST_F(Dhcp6ParserTest, poolOutOfSubnet) {
- ConstElementPtr status;
-
string config = "{ " + genIfaceConfig() + ","
"\"preferred-lifetime\": 3000,"
"\"rebind-timer\": 2000, "
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value must be 1 (values error)
" \"subnet\": \"2001:db8:1::/64\" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
"] }";
// Convert the JSON string into Elements.
- ElementPtr json;
- ASSERT_NO_THROW(json = Element::fromJSON(config));
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
// Verify that DHCP6 configuration processing succeeds.
// Returned value must be non-empty ConstElementPtr to config result.
"] }";
// Convert the JSON string into Elements.
- ElementPtr json = Element::fromJSON(config);
- ASSERT_NO_THROW(json = Element::fromJSON(config));
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
// Verify that DHCP6 configuration processing succeeds.
// Returned value must be non-empty ConstElementPtr to config result.
"] }";
// Convert the JSON string into Elements.
- ElementPtr json;
- ASSERT_NO_THROW(json = Element::fromJSON(config));
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
// Verify that DHCP6 configuration processing succeeds.
// Returned value must be non-empty ConstElementPtr to config result.
"] }"
};
- ElementPtr json;
+ ConstElementPtr json;
int num_msgs = sizeof(config)/sizeof(char*);
for (unsigned int i = 0; i < num_msgs; i++) {
// Convert JSON string to Elements.
- ASSERT_NO_THROW(json = Element::fromJSON(config[i]));
+ ASSERT_NO_THROW(json = parseJSON(config[i]));
// Configuration processing should fail without a throw.
ASSERT_NO_THROW(x = configureDhcp6Server(srv_, json));
" \"space\": \"isc\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseOPTION_DEF(config));
// Make sure that the particular option definition does not exist.
OptionDefinitionPtr def = CfgMgr::instance().getStagingCfg()->
// configuration and should result in removal of the option 100 from the
// libdhcp++.
config = "{ }";
- json = Element::fromJSON(config);
+ json = parseOPTION_DEF(config);
ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
checkResult(status, 0);
" \"space\": \"isc\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
// Make sure that the particular option definition does not exist.
OptionDefinitionPtr def = CfgMgr::instance().getStagingCfg()->
" \"space\": \"isc\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseOPTION_DEF(config));
// Make sure that the option definitions do not exist yet.
ASSERT_FALSE(CfgMgr::instance().getStagingCfg()->
" \"space\": \"isc\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseOPTION_DEF(config));
// Make sure that the option definition does not exist yet.
ASSERT_FALSE(CfgMgr::instance().getStagingCfg()->
" \"name\": \"foo\","
" \"code\": 100,"
" \"type\": \"uint32\","
- " \"array\": True,"
+ " \"array\": true,"
" \"space\": \"isc\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
// Make sure that the particular option definition does not exist.
OptionDefinitionPtr def = CfgMgr::instance().getStagingCfg()->
" \"encapsulate\": \"sub-opts-space\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
// Make sure that the particular option definition does not exist.
OptionDefinitionPtr def = CfgMgr::instance().getStagingCfg()->
" \"space\": \"isc\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseOPTION_DEF(config));
// Use the configuration string to create new option definition.
ConstElementPtr status;
" \"space\": \"isc\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseOPTION_DEF(config));
// Use the configuration string to create new option definition.
ConstElementPtr status;
" \"space\": \"isc\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
// Use the configuration string to create new option definition.
ConstElementPtr status;
" \"encapsulate\": \"invalid%space%name\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseOPTION_DEF(config));
// Use the configuration string to create new option definition.
ConstElementPtr status;
" \"name\": \"foo\","
" \"code\": 100,"
" \"type\": \"uint32\","
- " \"array\": True,"
+ " \"array\": true,"
" \"space\": \"isc\","
" \"encapsulate\": \"valid-space-name\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
// Use the configuration string to create new option definition.
ConstElementPtr status;
" \"encapsulate\": \"isc\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
// Use the configuration string to create new option definition.
ConstElementPtr status;
" \"space\": \"dhcp6\""
" } ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseOPTION_DEF(config));
OptionDefinitionPtr def = CfgMgr::instance().getStagingCfg()->
getCfgOptionDef()->get(DHCP6_OPTION_SPACE, 100);
" \"space\": \"dhcp6\""
" } ]"
"}";
- json = Element::fromJSON(config);
+ json = parseOPTION_DEF(config);
// Use the configuration string to create new option definition.
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
" \"space\": \"dhcp6\""
" } ]"
"}";
- json = Element::fromJSON(config);
+ json = parseOPTION_DEF(config);
// Use the configuration string to create new option definition.
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
"\"option-data\": [ {"
" \"name\": \"subscriber-id\","
" \"data\": \"ABCDEF0105\","
- " \"csv-format\": False"
+ " \"csv-format\": false"
" },"
" {"
" \"name\": \"preference\","
" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
" \"option-data\": [ {"
" \"name\": \"subscriber-id\","
" \"data\": \"ABCDEF0105\","
- " \"csv-format\": False"
+ " \"csv-format\": false"
" },"
" {"
" \"name\": \"preference\","
" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
"\"option-data\": [ {"
" \"name\": \"subscriber-id\","
" \"data\": \"ABCDEF0105\","
- " \"csv-format\": False"
+ " \"csv-format\": false"
" },"
" {"
" \"name\": \"foo\","
" } ]"
"}";
- ConstElementPtr status;
-
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
ASSERT_TRUE(status);
checkResult(status, 0);
" } ]"
"}";
- ConstElementPtr status;
-
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
ASSERT_TRUE(status);
checkResult(status, 0);
"}";
- json = Element::fromJSON(config);
+ json = parseJSON(config);
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
ASSERT_TRUE(status);
" \"option-data\": [ {"
" \"name\": \"subscriber-id\","
" \"data\": \"0102030405060708090A\","
- " \"csv-format\": False"
+ " \"csv-format\": false"
" } ]"
" },"
" {"
" \"option-data\": [ {"
" \"name\": \"user-class\","
" \"data\": \"FFFEFDFCFB\","
- " \"csv-format\": False"
+ " \"csv-format\": false"
" } ]"
" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
" \"option-data\": [ {"
" \"name\": \"subscriber-id\","
" \"data\": \"0102030405060708090A\","
- " \"csv-format\": False"
+ " \"csv-format\": false"
" } ]"
" },"
" {"
" \"option-data\": [ {"
" \"name\": \"user-class\","
" \"data\": \"FFFEFDFCFB\","
- " \"csv-format\": False"
+ " \"csv-format\": false"
" } ]"
" } ],"
" \"pd-pools\": [ { "
" \"option-data\": [ {"
" \"name\": \"subscriber-id\","
" \"data\": \"112233445566\","
- " \"csv-format\": False"
+ " \"csv-format\": false"
" } ]"
" },"
" {"
" \"option-data\": [ {"
" \"name\": \"user-class\","
" \"data\": \"aabbccddee\","
- " \"csv-format\": False"
+ " \"csv-format\": false"
" } ]"
" } ],"
" \"subnet\": \"2001:db8:1::/64\""
" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
TEST_F(Dhcp6ParserTest, optionDataLowerCase) {
ConstElementPtr x;
std::string config = createConfigWithOption("0a0b0C0D", "data");
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json = parseDHCP6(config);
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
// Option code 3 means OPTION_IA_NA.
params["code"] = "3";
params["data"] = "12345, 6789, 1516";
- params["csv-format"] = "True";
+ params["csv-format"] = "true";
std::string config = createConfigWithOption(params);
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json = parseDHCP6(config);
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
" \"space\": \"vendor-4491\","
" \"code\": 100,"
" \"data\": \"ABCDEF0105\","
- " \"csv-format\": False"
+ " \"csv-format\": false"
" },"
" {"
" \"name\": \"option-two\","
" \"space\": \"vendor-1234\","
" \"code\": 100,"
" \"data\": \"1234\","
- " \"csv-format\": False"
+ " \"csv-format\": false"
" } ],"
"\"subnet6\": [ { "
" \"pools\": [ { \"pool\": \"2001:db8:1::/80\" } ],"
" } ]"
"}";
- ConstElementPtr status;
-
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
ASSERT_TRUE(status);
checkResult(status, 0);
ConstElementPtr status;
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
ASSERT_TRUE(status);
" } ]"
"}";
- ConstElementPtr status;
-
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
ASSERT_TRUE(status);
checkResult(status, 0);
" } ]"
"}";
-
- json = Element::fromJSON(config);
-
+ ASSERT_NO_THROW(json = parseDHCP6(config));
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
ASSERT_TRUE(status);
checkResult(status, 0);
// Create the first part of the configuration string.
string config =
- "{ \"interfaces-config\": { },"
+ "{ \"interfaces-config\": { \"interfaces\": [] },"
"\"hooks-libraries\": [";
// Append the libraries (separated by commas if needed)
// Parse a configuration containing a failing library.
string config = buildHooksLibrariesConfig(NOT_PRESENT_LIBRARY);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+
ConstElementPtr status;
- ElementPtr json = Element::fromJSON(config);
ASSERT_NO_THROW(status = configureDhcp6Server(srv_, json));
// The status object must not be NULL
ASSERT_FALSE(test_config.socketOpen("eth0", AF_INET6));
ASSERT_FALSE(test_config.socketOpen("eth1", AF_INET6));
- ConstElementPtr status;
-
string config = "{ \"interfaces-config\": {"
" \"interfaces\": [ \"eth0\" ]"
"},"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value must be 1 (values error)
ASSERT_FALSE(test_config.socketOpen("eth0", AF_INET6));
ASSERT_FALSE(test_config.socketOpen("eth1", AF_INET6));
- ConstElementPtr status;
-
// This configuration specifies two interfaces on which server should listen
// but also includes '*'. This keyword switches server into the
// mode when it listens on all interfaces regardless of what interface names
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
checkResult(status, 0);
// This test checks if it is possible to specify relay information
TEST_F(Dhcp6ParserTest, subnetRelayInfo) {
- ConstElementPtr status;
-
// A config with relay information.
string config = "{ " + genIfaceConfig() + ","
"\"rebind-timer\": 2000, "
"\"preferred-lifetime\": 3000, "
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 0 (configuration success)
" } ],"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
// This test checks the ability of the server to parse a configuration
// containing a full, valid dhcp-ddns (D2ClientConfig) entry.
TEST_F(Dhcp6ParserTest, d2ClientConfig) {
- ConstElementPtr status;
-
// Verify that the D2 configuraiton can be fetched and is set to disabled.
D2ClientConfigPtr d2_client_config = CfgMgr::instance().getD2ClientConfig();
EXPECT_FALSE(d2_client_config->getEnableUpdates());
"\"valid-lifetime\": 4000 }";
// Convert the JSON string to configuration elements.
- ElementPtr config;
- ASSERT_NO_THROW(config = Element::fromJSON(config_str));
+ ConstElementPtr config;
+ ASSERT_NO_THROW(config = parseJSON(config_str));
// Pass the configuration in for parsing.
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
// check if returned status is OK
// This test checks the ability of the server to handle a configuration
// containing an invalid dhcp-ddns (D2ClientConfig) entry.
TEST_F(Dhcp6ParserTest, invalidD2ClientConfig) {
- ConstElementPtr status;
-
// Configuration string with an invalid D2 client config,
// "server-ip" is invalid.
string config_str = "{ " + genIfaceConfig() + ","
"\"valid-lifetime\": 4000 }";
// Convert the JSON string to configuration elements.
- ElementPtr config;
- ASSERT_NO_THROW(config = Element::fromJSON(config_str));
+ ConstElementPtr config;
+ ASSERT_NO_THROW(config = parseJSON(config_str));
// Configuration should not throw, but should fail.
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
// check if returned status is failed.
"\"preferred-lifetime\": 3000,"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
"\"preferred-lifetime\": 3000,"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 0);
"\"preferred-lifetime\": 3000,"
"\"valid-lifetime\": 4000 }";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
EXPECT_NO_THROW(x = configureDhcp6Server(srv_, json));
checkResult(x, 1);
"\"preferred-lifetime\": 3000,"
"\"valid-lifetime\": 4000 }";
- json = Element::fromJSON(config);
+ json = parseDHCP6(config);
// Remove existing configuration, if any.
CfgMgr::instance().clear();
"\"preferred-lifetime\": 3000,"
"\"valid-lifetime\": 4000 }";
- json = Element::fromJSON(config);
+ json = parseDHCP6(config);
// Remove existing configuration, if any.
CfgMgr::instance().clear();
"\"preferred-lifetime\": 3000,"
"\"valid-lifetime\": 4000 }";
- json = Element::fromJSON(config);
+ json = parseDHCP6(config);
// Remove existing configuration, if any.
CfgMgr::instance().clear();
/// rfc4580 = subscriber-id).
TEST_F(Dhcp6ParserTest, macSources) {
- ConstElementPtr status;
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json =
+ parseDHCP6("{ " + genIfaceConfig() + ","
+ "\"mac-sources\": [ \"rfc6939\", \"rfc4649\", \"rfc4580\","
+ "\"client-link-addr-option\", \"remote-id\", \"subscriber-id\"],"
+ "\"preferred-lifetime\": 3000,"
+ "\"rebind-timer\": 2000, "
+ "\"renew-timer\": 1000, "
+ "\"subnet6\": [ ], "
+ "\"valid-lifetime\": 4000 }"));
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_,
- Element::fromJSON("{ " + genIfaceConfig() + ","
- "\"mac-sources\": [ \"rfc6939\", \"rfc4649\", \"rfc4580\","
- "\"client-link-addr-option\", \"remote-id\", \"subscriber-id\"],"
- "\"preferred-lifetime\": 3000,"
- "\"rebind-timer\": 2000, "
- "\"renew-timer\": 1000, "
- "\"subnet6\": [ ], "
- "\"valid-lifetime\": 4000 }")));
+ ConstElementPtr status;
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 0 (success)
checkResult(status, 0);
ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_,
- Element::fromJSON("{ " + genIfaceConfig() + ","
- "\"mac-sources\": [ ],"
- "\"preferred-lifetime\": 3000,"
- "\"rebind-timer\": 2000, "
- "\"renew-timer\": 1000, "
- "\"subnet6\": [ ], "
- "\"valid-lifetime\": 4000 }")));
+ parseJSON("{ " + genIfaceConfig() + ","
+ "\"mac-sources\": [ ],"
+ "\"preferred-lifetime\": 3000,"
+ "\"rebind-timer\": 2000, "
+ "\"renew-timer\": 1000, "
+ "\"subnet6\": [ ], "
+ "\"valid-lifetime\": 4000 }")));
// returned value should be 0 (success)
checkResult(status, 0);
/// only use valid parameters.
TEST_F(Dhcp6ParserTest, macSourcesBogus) {
- ConstElementPtr status;
-
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_,
- Element::fromJSON("{ " + genIfaceConfig() + ","
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6("{ " + genIfaceConfig() + ","
"\"mac-sources\": [ \"from-wire\" ],"
"\"preferred-lifetime\": 3000,"
"\"rebind-timer\": 2000, "
"\"renew-timer\": 1000, "
"\"subnet6\": [ ], "
- "\"valid-lifetime\": 4000 }")));
+ "\"valid-lifetime\": 4000 }"));
+ ConstElementPtr status;
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 1 (failure)
checkResult(status, 1);
}
ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_,
- Element::fromJSON(HR_CONFIG)));
+ parseJSON(HR_CONFIG)));
// returned value should be 0 (success)
checkResult(status, 0);
/// Relay Supplied options (specified as numbers).
TEST_F(Dhcp6ParserTest, rsooNumbers) {
- ConstElementPtr status;
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json =
+ parseDHCP6("{ " + genIfaceConfig() + ","
+ "\"relay-supplied-options\": [ \"10\", \"20\", \"30\" ],"
+ "\"preferred-lifetime\": 3000,"
+ "\"rebind-timer\": 2000, "
+ "\"renew-timer\": 1000, "
+ "\"subnet6\": [ ], "
+ "\"valid-lifetime\": 4000 }"));
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_,
- Element::fromJSON("{ " + genIfaceConfig() + ","
- "\"relay-supplied-options\": [ \"10\", \"20\", \"30\" ],"
- "\"preferred-lifetime\": 3000,"
- "\"rebind-timer\": 2000, "
- "\"renew-timer\": 1000, "
- "\"subnet6\": [ ], "
- "\"valid-lifetime\": 4000 }")));
+ ConstElementPtr status;
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 0 (success)
checkResult(status, 0);
/// Relay Supplied options (specified as names).
TEST_F(Dhcp6ParserTest, rsooNames) {
- ConstElementPtr status;
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json =
+ parseDHCP6("{ " + genIfaceConfig() + ","
+ "\"relay-supplied-options\": [ \"dns-servers\", \"remote-id\" ],"
+ "\"preferred-lifetime\": 3000,"
+ "\"rebind-timer\": 2000, "
+ "\"renew-timer\": 1000, "
+ "\"subnet6\": [ ], "
+ "\"valid-lifetime\": 4000 }"));
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_,
- Element::fromJSON("{ " + genIfaceConfig() + ","
- "\"relay-supplied-options\": [ \"dns-servers\", \"remote-id\" ],"
- "\"preferred-lifetime\": 3000,"
- "\"rebind-timer\": 2000, "
- "\"renew-timer\": 1000, "
- "\"subnet6\": [ ], "
- "\"valid-lifetime\": 4000 }")));
+ ConstElementPtr status;
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 0 (success)
checkResult(status, 0);
}
TEST_F(Dhcp6ParserTest, rsooNegativeNumber) {
- ConstElementPtr status;
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_,
- Element::fromJSON("{ " + genIfaceConfig() + ","
- "\"relay-supplied-options\": [ \"80\", \"-2\" ],"
- "\"preferred-lifetime\": 3000,"
- "\"rebind-timer\": 2000, "
- "\"renew-timer\": 1000, "
- "\"subnet6\": [ ], "
- "\"valid-lifetime\": 4000 }")));
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json =
+ parseDHCP6("{ " + genIfaceConfig() + ","
+ "\"relay-supplied-options\": [ \"80\", \"-2\" ],"
+ "\"preferred-lifetime\": 3000,"
+ "\"rebind-timer\": 2000, "
+ "\"renew-timer\": 1000, "
+ "\"subnet6\": [ ], "
+ "\"valid-lifetime\": 4000 }"));
+ ConstElementPtr status;
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 0 (success)
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
}
TEST_F(Dhcp6ParserTest, rsooBogusName) {
- ConstElementPtr status;
- EXPECT_NO_THROW(status = configureDhcp6Server(srv_,
- Element::fromJSON("{ " + genIfaceConfig() + ","
- "\"relay-supplied-options\": [ \"bogus\", \"dns-servers\" ],"
- "\"preferred-lifetime\": 3000,"
- "\"rebind-timer\": 2000, "
- "\"renew-timer\": 1000, "
- "\"subnet6\": [ ], "
- "\"valid-lifetime\": 4000 }")));
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json =
+ parseDHCP6("{ " + genIfaceConfig() + ","
+ "\"relay-supplied-options\": [ \"bogus\", \"dns-servers\" ],"
+ "\"preferred-lifetime\": 3000,"
+ "\"rebind-timer\": 2000, "
+ "\"renew-timer\": 1000, "
+ "\"subnet6\": [ ], "
+ "\"valid-lifetime\": 4000 }"));
+ ConstElementPtr status;
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 0 (success)
checkResult(status, 1);
EXPECT_TRUE(errorContainsPosition(status, "<string>"));
/// Check that the decline-probation-period value can be set properly.
TEST_F(Dhcp6ParserTest, declineTimerDefault) {
- ConstElementPtr status;
-
string config_txt = "{ " + genIfaceConfig() + ","
"\"subnet6\": [ ] "
"}";
- ElementPtr config = Element::fromJSON(config_txt);
+ ConstElementPtr config;
+ ASSERT_NO_THROW(config = parseJSON(config_txt));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, config));
// returned value should be 0 (success)
/// Check that the decline-probation-period value can be set properly.
TEST_F(Dhcp6ParserTest, declineTimer) {
- ConstElementPtr status;
-
string config = "{ " + genIfaceConfig() + "," +
"\"decline-probation-period\": 12345,"
"\"subnet6\": [ ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 0 (success)
/// Check that an incorrect decline-probation-period value will be caught.
TEST_F(Dhcp6ParserTest, declineTimerError) {
- ConstElementPtr status;
-
string config = "{ " + genIfaceConfig() + "," +
"\"decline-probation-period\": \"soon\","
"\"subnet6\": [ ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
// returned value should be 1 (error)
"\"subnet6\": [ ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
"\"subnet6\": [ ]"
"}";
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
" \"subnet\": \"2001:db8:1::/64\" } ], \n"
"\"valid-lifetime\": 4000 } \n";
- ConstElementPtr status;
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseDHCP6(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
ASSERT_TRUE(status);
checkResult(status, 0);
" } ] \n"
"} \n";
- ConstElementPtr status;
- ElementPtr json = Element::fromJSON(config);
+ ConstElementPtr json;
+ ASSERT_NO_THROW(json = parseJSON(config));
+ ConstElementPtr status;
EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json));
ASSERT_TRUE(status);
checkResult(status, 1);