From: Thomas Markwalder Date: Tue, 16 Feb 2021 18:56:48 +0000 (-0500) Subject: [#1635] Improved parsing unit tests X-Git-Tag: Kea-1.9.5~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e800723bedf33014537d520db6be9f2cfa512e90;p=thirdparty%2Fkea.git [#1635] Improved parsing unit tests src/bin/dhcp4/tests/config_parser_unittest.cc TEST_F(Dhcp4ParserTest, clientClassValidLifetime) - new test src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc TEST_F(ClientClassDefParserTest, validLifetimeTests) - improved test --- diff --git a/src/bin/dhcp4/tests/config_parser_unittest.cc b/src/bin/dhcp4/tests/config_parser_unittest.cc index 9df7e54a06..22180d9683 100644 --- a/src/bin/dhcp4/tests/config_parser_unittest.cc +++ b/src/bin/dhcp4/tests/config_parser_unittest.cc @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -6034,6 +6035,63 @@ TEST_F(Dhcp4ParserTest, invalidClientClassDictionary) { EXPECT_THROW(parseDHCP4(config), Dhcp4ParseError); } +// Verifies that simple list of valid classes parses and +// is staged for commit. +TEST_F(Dhcp4ParserTest, clientClassValidLifetime) { + string config = "{ " + genIfaceConfig() + "," + + "\"client-classes\" : [ \n" + " { \n" + " \"name\": \"one\", \n" + " \"min-valid-lifetime\": 1000, \n" + " \"valid-lifetime\": 2000, \n" + " \"max-valid-lifetime\": 3000 \n" + " }, \n" + " { \n" + " \"name\": \"two\" \n" + " } \n" + "], \n" + "\"subnet4\": [ { \n" + " \"pools\": [ { \"pool\": \"192.0.2.1 - 192.0.2.100\" } ], \n" + " \"subnet\": \"192.0.2.0/24\" \n" + " } ] \n" + "} \n"; + + ConstElementPtr json; + ASSERT_NO_THROW_LOG(json = parseDHCP4(config)); + extractConfig(config); + + ConstElementPtr status; + ASSERT_NO_THROW_LOG(status = configureDhcp4Server(*srv_, json)); + ASSERT_TRUE(status); + checkResult(status, 0); + + // We check staging config because CfgMgr::commit hasn't been executed. + ClientClassDictionaryPtr dictionary; + dictionary = CfgMgr::instance().getStagingCfg()->getClientClassDictionary(); + ASSERT_TRUE(dictionary); + EXPECT_EQ(2, dictionary->getClasses()->size()); + + // Execute the commit + ASSERT_NO_THROW(CfgMgr::instance().commit()); + + // Verify that after commit, the current config has the correct dictionary + dictionary = CfgMgr::instance().getCurrentCfg()->getClientClassDictionary(); + ASSERT_TRUE(dictionary); + EXPECT_EQ(2, dictionary->getClasses()->size()); + + ClientClassDefPtr class_def = dictionary->findClass("one"); + ASSERT_TRUE(class_def); + EXPECT_EQ(class_def->getValid().getMin(), 1000); + EXPECT_EQ(class_def->getValid().get(), 2000); + EXPECT_EQ(class_def->getValid().getMax(), 3000); + + class_def = dictionary->findClass("two"); + ASSERT_TRUE(class_def); + EXPECT_TRUE(class_def->getValid().unspecified()); + +} + + // Test verifies that regular configuration does not provide any user context // in the address pool. TEST_F(Dhcp4ParserTest, poolUserContextMissing) { diff --git a/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc b/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc index 75cee83c3c..0e786c5001 100644 --- a/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc +++ b/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc @@ -1341,7 +1341,14 @@ TEST_F(ClientClassDefParserTest, validLifetimeTests) { ClientClassDefPtr class_def; ASSERT_NO_THROW_LOG(class_def = parseClientClassDef(oss.str(), AF_INET)); ASSERT_TRUE(class_def); - EXPECT_EQ(class_def->getValid(), scenario.exp_triplet_); + if (scenario.exp_triplet_.unspecified()) { + EXPECT_TRUE(class_def->getValid().unspecified()); + } else { + EXPECT_EQ(class_def->getValid(), scenario.exp_triplet_); + EXPECT_EQ(class_def->getValid().getMin(), scenario.exp_triplet_.getMin()); + EXPECT_EQ(class_def->getValid().get(), scenario.exp_triplet_.get()); + EXPECT_EQ(class_def->getValid().getMax(), scenario.exp_triplet_.getMax()); + } } } }