From: Razvan Becheriu Date: Sat, 22 Aug 2020 09:59:16 +0000 (+0300) Subject: [#1373] add tests for complex strings containing escape characters X-Git-Tag: Kea-1.9.0~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0fdcaecfbe906122b5ab651e9c84f7a128935aa4;p=thirdparty%2Fkea.git [#1373] add tests for complex strings containing escape characters --- diff --git a/src/hooks/dhcp/flex_option/tests/flex_option_unittests.cc b/src/hooks/dhcp/flex_option/tests/flex_option_unittests.cc index 5f2277435a..b18f802b03 100644 --- a/src/hooks/dhcp/flex_option/tests/flex_option_unittests.cc +++ b/src/hooks/dhcp/flex_option/tests/flex_option_unittests.cc @@ -1087,4 +1087,64 @@ TEST_F(FlexOptionTest, processFullTest) { EXPECT_EQ(0, memcmp(&buffer[0], "foo.boot", 8)); } +TEST_F(FlexOptionTest, processFullAddWithComplexString) { + ElementPtr options = Element::createList(); + ElementPtr option = Element::createMap(); + options->add(option); + ElementPtr code = Element::create(D6O_NEW_POSIX_TIMEZONE); + option->set("code", code); + string expr = "ifelse(option[39].exists,'EST5EDT4\\,M3.2.0/02:00\\,M11.1.0/02:00','')"; + ElementPtr add = Element::create(expr); + option->set("add", add); + EXPECT_NO_THROW(impl_->testConfigure(options)); + EXPECT_TRUE(impl_->getErrMsg().empty()); + + Pkt6Ptr query(new Pkt6(DHCPV6_SOLICIT, 12345)); + Pkt6Ptr response(new Pkt6(DHCPV6_ADVERTISE, 12345)); + OptionDefinitionPtr def = isc::dhcp::LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_CLIENT_FQDN); + OptionCustomPtr str(new OptionCustom(*def, Option::V6)); + query->addOption(str); + EXPECT_FALSE(response->getOption(D6O_NEW_POSIX_TIMEZONE)); + + EXPECT_NO_THROW(impl_->process(Option::V6, query, response)); + + OptionPtr opt = response->getOption(D6O_NEW_POSIX_TIMEZONE); + ASSERT_TRUE(opt); + EXPECT_EQ(D6O_NEW_POSIX_TIMEZONE, opt->getType()); + const OptionBuffer& buffer = opt->getData(); + EXPECT_EQ(37, buffer->size()); + std::string data("EST5EDT4\\,M3.2.0/02:00\\,M11.1.0/02:00"); + EXPECT_EQ(0, memcmp(&buffer[0]), &data[0]); +} + +TEST_F(FlexOptionTest, processFullSupersedeWithComplexString) { + ElementPtr options = Element::createList(); + ElementPtr option = Element::createMap(); + options->add(option); + ElementPtr code = Element::create(D6O_NEW_POSIX_TIMEZONE); + option->set("code", code); + string expr = "ifelse(option[39].exists,'EST5EDT4\\,M3.2.0/02:00\\,M11.1.0/02:00','')"; + ElementPtr supersede = Element::create(expr); + option->set("supersede", supersede); + EXPECT_NO_THROW(impl_->testConfigure(options)); + EXPECT_TRUE(impl_->getErrMsg().empty()); + + Pkt6Ptr query(new Pkt6(DHCPV6_SOLICIT, 12345)); + Pkt6Ptr response(new Pkt6(DHCPV6_ADVERTISE, 12345)); + OptionDefinitionPtr def = isc::dhcp::LibDHCP::getOptionDef(DHCP6_OPTION_SPACE, D6O_CLIENT_FQDN); + OptionCustomPtr str(new OptionCustom(*def, Option::V6)); + query->addOption(str); + EXPECT_FALSE(response->getOption(D6O_NEW_POSIX_TIMEZONE)); + + EXPECT_NO_THROW(impl_->process(Option::V6, query, response)); + + OptionPtr opt = response->getOption(D6O_NEW_POSIX_TIMEZONE); + ASSERT_TRUE(opt); + EXPECT_EQ(D6O_NEW_POSIX_TIMEZONE, opt->getType()); + const OptionBuffer& buffer = opt->getData(); + EXPECT_EQ(37, buffer->size()); + std::string data("EST5EDT4\\,M3.2.0/02:00\\,M11.1.0/02:00"); + EXPECT_EQ(0, memcmp(&buffer[0]), &data[0]); +} + } // end of anonymous namespace