|
@@ -1512,6 +1512,121 @@ TEST_F(Dhcp6ParserTest, poolPrefixLen) {
|
|
|
EXPECT_EQ(4000, subnet->getValid());
|
|
|
}
|
|
|
|
|
|
+// Goal of this test is to verify if invalid pool definitions
|
|
|
+// return a location in the error message.
|
|
|
+TEST_F(Dhcp6ParserTest, badPools) {
|
|
|
+
|
|
|
+ // not a prefix
|
|
|
+ string config_bogus1 = "{ " + genIfaceConfig() + ","
|
|
|
+ "\"preferred-lifetime\": 3000,"
|
|
|
+ "\"rebind-timer\": 2000, "
|
|
|
+ "\"renew-timer\": 1000, "
|
|
|
+ "\"subnet6\": [ { "
|
|
|
+ " \"pools\": [ { \"pool\": \"foo/80\" } ],"
|
|
|
+ " \"subnet\": \"2001:db8:1::/64\" } ],"
|
|
|
+ "\"valid-lifetime\": 4000 }";
|
|
|
+
|
|
|
+ // not a length
|
|
|
+ string config_bogus2 = "{ " + genIfaceConfig() + ","
|
|
|
+ "\"preferred-lifetime\": 3000,"
|
|
|
+ "\"rebind-timer\": 2000, "
|
|
|
+ "\"renew-timer\": 1000, "
|
|
|
+ "\"subnet6\": [ { "
|
|
|
+ " \"pools\": [ { \"pool\": \"2001:db8:1::/foo\" } ],"
|
|
|
+ " \"subnet\": \"2001:db8:1::/64\" } ],"
|
|
|
+ "\"valid-lifetime\": 4000 }";
|
|
|
+
|
|
|
+ // invalid prefix length
|
|
|
+ string config_bogus3 = "{ " + genIfaceConfig() + ","
|
|
|
+ "\"preferred-lifetime\": 3000,"
|
|
|
+ "\"rebind-timer\": 2000, "
|
|
|
+ "\"renew-timer\": 1000, "
|
|
|
+ "\"subnet6\": [ { "
|
|
|
+ " \"pools\": [ { \"pool\": \"2001:db8:1::/200\" } ],"
|
|
|
+ " \"subnet\": \"2001:db8:1::/64\" } ],"
|
|
|
+ "\"valid-lifetime\": 4000 }";
|
|
|
+
|
|
|
+ // not a prefix nor a min-max
|
|
|
+ string config_bogus4 = "{ " + genIfaceConfig() + ","
|
|
|
+ "\"preferred-lifetime\": 3000,"
|
|
|
+ "\"rebind-timer\": 2000, "
|
|
|
+ "\"renew-timer\": 1000, "
|
|
|
+ "\"subnet6\": [ { "
|
|
|
+ " \"pools\": [ { \"pool\": \"foo\" } ],"
|
|
|
+ " \"subnet\": \"2001:db8:1::/64\" } ],"
|
|
|
+ "\"valid-lifetime\": 4000 }";
|
|
|
+
|
|
|
+ // not an address
|
|
|
+ string config_bogus5 = "{ " + genIfaceConfig() + ","
|
|
|
+ "\"preferred-lifetime\": 3000,"
|
|
|
+ "\"rebind-timer\": 2000, "
|
|
|
+ "\"renew-timer\": 1000, "
|
|
|
+ "\"subnet6\": [ { "
|
|
|
+ " \"pools\": [ { \"pool\": \"foo - bar\" } ],"
|
|
|
+ " \"subnet\": \"2001:db8:1::/64\" } ],"
|
|
|
+ "\"valid-lifetime\": 4000 }";
|
|
|
+
|
|
|
+ // min > max
|
|
|
+ string config_bogus6 = "{ " + genIfaceConfig() + ","
|
|
|
+ "\"preferred-lifetime\": 3000,"
|
|
|
+ "\"rebind-timer\": 2000, "
|
|
|
+ "\"renew-timer\": 1000, "
|
|
|
+ "\"subnet6\": [ { "
|
|
|
+ " \"pools\": [ { \"pool\": \"2001:db8::ff:ffff - 2001:db8::\" } ],"
|
|
|
+ " \"subnet\": \"2001:db8:1::/64\" } ],"
|
|
|
+ "\"valid-lifetime\": 4000 }";
|
|
|
+
|
|
|
+ ConstElementPtr json1;
|
|
|
+ ASSERT_NO_THROW(json1 = parseDHCP6(config_bogus1));
|
|
|
+ ConstElementPtr json2;
|
|
|
+ ASSERT_NO_THROW(json2 = parseDHCP6(config_bogus2));
|
|
|
+ ConstElementPtr json3;
|
|
|
+ ASSERT_NO_THROW(json3 = parseDHCP6(config_bogus3));
|
|
|
+ ConstElementPtr json4;
|
|
|
+ ASSERT_NO_THROW(json4 = parseDHCP6(config_bogus4));
|
|
|
+ ConstElementPtr json5;
|
|
|
+ ASSERT_NO_THROW(json5 = parseDHCP6(config_bogus5));
|
|
|
+ ConstElementPtr json6;
|
|
|
+ ASSERT_NO_THROW(json6 = parseDHCP6(config_bogus6));
|
|
|
+
|
|
|
+ ConstElementPtr status;
|
|
|
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json1));
|
|
|
+
|
|
|
+ // check if returned status is always a failure
|
|
|
+ checkResult(status, 1);
|
|
|
+ EXPECT_TRUE(errorContainsPosition(status, "<string>"));
|
|
|
+
|
|
|
+ CfgMgr::instance().clear();
|
|
|
+
|
|
|
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json2));
|
|
|
+ checkResult(status, 1);
|
|
|
+ EXPECT_TRUE(errorContainsPosition(status, "<string>"));
|
|
|
+
|
|
|
+ CfgMgr::instance().clear();
|
|
|
+
|
|
|
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json3));
|
|
|
+ checkResult(status, 1);
|
|
|
+ EXPECT_TRUE(errorContainsPosition(status, "<string>"));
|
|
|
+
|
|
|
+ CfgMgr::instance().clear();
|
|
|
+
|
|
|
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json4));
|
|
|
+ checkResult(status, 1);
|
|
|
+ EXPECT_TRUE(errorContainsPosition(status, "<string>"));
|
|
|
+
|
|
|
+ CfgMgr::instance().clear();
|
|
|
+
|
|
|
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json5));
|
|
|
+ checkResult(status, 1);
|
|
|
+ EXPECT_TRUE(errorContainsPosition(status, "<string>"));
|
|
|
+
|
|
|
+ CfgMgr::instance().clear();
|
|
|
+
|
|
|
+ EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json6));
|
|
|
+ checkResult(status, 1);
|
|
|
+ EXPECT_TRUE(errorContainsPosition(status, "<string>"));
|
|
|
+}
|
|
|
+
|
|
|
// Goal of this test is to verify the basic parsing of a prefix delegation
|
|
|
// pool. It uses a single, valid pd pool.
|
|
|
TEST_F(Dhcp6ParserTest, pdPoolBasics) {
|