From: Francis Dupont Date: Tue, 28 Nov 2017 16:57:43 +0000 (+0100) Subject: [5351] Checkpoint: almost finished shared_network X-Git-Tag: trac5444_base~26 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=589cbb4ee6bf284baae473c54f7ce12e3ec0f458;p=thirdparty%2Fkea.git [5351] Checkpoint: almost finished shared_network --- diff --git a/src/bin/dhcp4/dhcp4_lexer.cc b/src/bin/dhcp4/dhcp4_lexer.cc index 6cfa72f29f..7b61a60bcf 100644 --- a/src/bin/dhcp4/dhcp4_lexer.cc +++ b/src/bin/dhcp4/dhcp4_lexer.cc @@ -2689,6 +2689,7 @@ YY_RULE_SETUP switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: case isc::dhcp::Parser4Context::POOLS: + case isc::dhcp::Parser4Context::SHARED_NETWORK: return isc::dhcp::Dhcp4Parser::make_USER_CONTEXT(driver.loc_); default: return isc::dhcp::Dhcp4Parser::make_STRING("user-context", driver.loc_); @@ -2702,6 +2703,7 @@ YY_RULE_SETUP switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: case isc::dhcp::Parser4Context::POOLS: + case isc::dhcp::Parser4Context::SHARED_NETWORK: return isc::dhcp::Dhcp4Parser::make_COMMENT(driver.loc_); default: return isc::dhcp::Dhcp4Parser::make_STRING("comment", driver.loc_); diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll index 459420d93d..34e68a1eef 100644 --- a/src/bin/dhcp4/dhcp4_lexer.ll +++ b/src/bin/dhcp4/dhcp4_lexer.ll @@ -580,6 +580,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: case isc::dhcp::Parser4Context::POOLS: + case isc::dhcp::Parser4Context::SHARED_NETWORK: return isc::dhcp::Dhcp4Parser::make_USER_CONTEXT(driver.loc_); default: return isc::dhcp::Dhcp4Parser::make_STRING("user-context", driver.loc_); @@ -590,6 +591,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: case isc::dhcp::Parser4Context::POOLS: + case isc::dhcp::Parser4Context::SHARED_NETWORK: return isc::dhcp::Dhcp4Parser::make_COMMENT(driver.loc_); default: return isc::dhcp::Dhcp4Parser::make_STRING("comment", driver.loc_); diff --git a/src/bin/dhcp4/tests/shared_network_unittest.cc b/src/bin/dhcp4/tests/shared_network_unittest.cc index 15cdf20973..58dae25098 100644 --- a/src/bin/dhcp4/tests/shared_network_unittest.cc +++ b/src/bin/dhcp4/tests/shared_network_unittest.cc @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -45,6 +46,7 @@ const char* NETWORKS_CONFIG[] = { " {" " \"name\": \"frog\"," " \"interface\": \"eth1\"," + " \"comment\": \"example\"," " \"subnet4\": [" " {" " \"subnet\": \"192.0.2.0/26\"," @@ -1062,6 +1064,38 @@ public: IfaceMgrTestConfig iface_mgr_test_config_; }; +// Check user-context parsing +TEST_F(Dhcpv4SharedNetworkTest, parse) { + // Create client + Dhcp4Client client1(Dhcp4Client::SELECTING); + + // Don't use configure from utils + Parser4Context ctx; + ConstElementPtr json; + ASSERT_NO_THROW(json = parseDHCP4(NETWORKS_CONFIG[0], true)); + ConstElementPtr status; + disableIfacesReDetect(json); + EXPECT_NO_THROW(status = configureDhcp4Server(*client1.getServer(), json)); + ASSERT_TRUE(status); + int rcode; + ConstElementPtr comment = config::parseAnswer(rcode, status); + ASSERT_EQ(0, rcode); + ASSERT_NO_THROW( { + CfgDbAccessPtr cfg_db = CfgMgr::instance().getStagingCfg()->getCfgDbAccess(); + cfg_db->setAppendedParameters("universe=4"); + cfg_db->createManagers(); + } ); + CfgMgr::instance().commit(); + + CfgSharedNetworks4Ptr cfg = CfgMgr::instance().getCurrentCfg()->getCfgSharedNetworks4(); + SharedNetwork4Ptr network = cfg->getByName("frog"); + ConstElementPtr context = network->getContext(); + ASSERT_TRUE(context); + ASSERT_EQ(1, context->size()); + ASSERT_TRUE(context->get("comment")); + EXPECT_EQ("\"example\"", context->get("comment")->str()); +} + // Running out of addresses within a subnet in a shared network. TEST_F(Dhcpv4SharedNetworkTest, poolInSharedNetworkShortage) { // Create client #1 diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll index ace108b445..bd6421250b 100644 --- a/src/bin/dhcp6/dhcp6_lexer.ll +++ b/src/bin/dhcp6/dhcp6_lexer.ll @@ -811,6 +811,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} case isc::dhcp::Parser6Context::POOLS: case isc::dhcp::Parser6Context::PD_POOLS: case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: return isc::dhcp::Dhcp6Parser::make_USER_CONTEXT(driver.loc_); default: return isc::dhcp::Dhcp6Parser::make_STRING("user-context", driver.loc_); @@ -822,6 +823,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} case isc::dhcp::Parser6Context::POOLS: case isc::dhcp::Parser6Context::PD_POOLS: case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: return isc::dhcp::Dhcp6Parser::make_COMMENT(driver.loc_); default: return isc::dhcp::Dhcp6Parser::make_STRING("comment", driver.loc_); diff --git a/src/bin/dhcp6/tests/shared_network_unittest.cc b/src/bin/dhcp6/tests/shared_network_unittest.cc index 38d7d3cc3c..dc8cd2ff31 100644 --- a/src/bin/dhcp6/tests/shared_network_unittest.cc +++ b/src/bin/dhcp6/tests/shared_network_unittest.cc @@ -13,8 +13,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -38,6 +40,7 @@ const char* NETWORKS_CONFIG[] = { " {" " \"name\": \"frog\"," " \"interface\": \"eth1\"," + " \"comment\": \"example\"," " \"subnet6\": [" " {" " \"subnet\": \"2001:db8:1::/64\"," @@ -1316,6 +1319,33 @@ public: IfaceMgrTestConfig iface_mgr_test_config_; }; +// Check user-context parsing +TEST_F(Dhcpv6SharedNetworkTest, parse) { + // Create client + Dhcp6Client client1; + + // Don't use configure from utils + Parser6Context ctx; + ConstElementPtr json; + ASSERT_NO_THROW(json = parseDHCP6(NETWORKS_CONFIG[0], true)); + ConstElementPtr status; + disableIfacesReDetect(json); + EXPECT_NO_THROW(status = configureDhcp6Server(*client1.getServer(), json)); + ASSERT_TRUE(status); + int rcode; + ConstElementPtr comment = config::parseAnswer(rcode, status); + ASSERT_EQ(0, rcode); + CfgMgr::instance().commit(); + + CfgSharedNetworks6Ptr cfg = CfgMgr::instance().getCurrentCfg()->getCfgSharedNetworks6(); + SharedNetwork6Ptr network = cfg->getByName("frog"); + ConstElementPtr context = network->getContext(); + ASSERT_TRUE(context); + ASSERT_EQ(1, context->size()); + ASSERT_TRUE(context->get("comment")); + EXPECT_EQ("\"example\"", context->get("comment")->str()); +} + // Running out of addresses within a subnet in a shared network. TEST_F(Dhcpv6SharedNetworkTest, addressPoolInSharedNetworkShortage) { // Create client #1.