From: Tomek Mrugalski Date: Tue, 16 Dec 2014 15:18:21 +0000 (+0100) Subject: [3554] Unit-tests implemented. X-Git-Tag: trac3504_base~21^2~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4119b60cf923ef1f6bc4894b7a64edf775950fec;p=thirdparty%2Fkea.git [3554] Unit-tests implemented. --- diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc index c3bf74ece6..8d6863777b 100644 --- a/src/bin/dhcp6/tests/config_parser_unittest.cc +++ b/src/bin/dhcp6/tests/config_parser_unittest.cc @@ -3627,4 +3627,29 @@ TEST_F(Dhcp6ParserTest, reservationBogus) { } +/// The goal of this test is to verify that configuration can include +/// MAC/Hardware sources. +TEST_F(Dhcp6ParserTest, macSources) { + + ConstElementPtr status; + + EXPECT_NO_THROW(status = configureDhcp6Server(srv_, + Element::fromJSON("{ \"interfaces\": [ \"*\" ]," + "\"mac-sources\": [ \"rfc6939\", \"rfc4649\", \"rfc4580\" ]," + "\"preferred-lifetime\": 3000," + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet6\": [ ], " + "\"valid-lifetime\": 4000 }"))); + + // returned value should be 0 (success) + checkResult(status, 0); + + vector mac_sources = CfgMgr::instance().getStagingCfg()->getMACSources(); + ASSERT_EQ(3, mac_sources.size()); + EXPECT_EQ(Pkt::HWADDR_SOURCE_CLIENT_ADDR_RELAY_OPTION, mac_sources[0]); + EXPECT_EQ(Pkt::HWADDR_SOURCE_REMOTE_ID, mac_sources[1]); + EXPECT_EQ(Pkt::HWADDR_SOURCE_SUBSCRIBER_ID, mac_sources[2]); +} + }; diff --git a/src/lib/dhcp/tests/pkt6_unittest.cc b/src/lib/dhcp/tests/pkt6_unittest.cc index a2c3615184..1827f9d219 100644 --- a/src/lib/dhcp/tests/pkt6_unittest.cc +++ b/src/lib/dhcp/tests/pkt6_unittest.cc @@ -1130,4 +1130,34 @@ TEST_F(Pkt6Test, getMACFromIPv6RelayOpt_multipleRelay) { tmp << "hwtype=1 fa:30:0b:fa:c0:fe"; EXPECT_EQ(tmp.str(), found->toText(true)); } + +// Checks whether Pkt::MACSourceFromText is working correctly. +// Technically, this is a Pkt, not Pkt6 test, but since there is no separate +// unit-tests for Pkt and it is abstract, so it would be tricky to test it +// directly. Hence test is being run in Pkt6. +TEST_F(Pkt6Test, MACSourceFromText) { + EXPECT_THROW(Pkt::MACSourceFromText("unknown"), BadValue); + + EXPECT_EQ(Pkt::HWADDR_SOURCE_ANY, Pkt::MACSourceFromText("any")); + EXPECT_EQ(Pkt::HWADDR_SOURCE_RAW, Pkt::MACSourceFromText("raw")); + EXPECT_EQ(Pkt::HWADDR_SOURCE_DUID, Pkt::MACSourceFromText("duid")); + EXPECT_EQ(Pkt::HWADDR_SOURCE_IPV6_LINK_LOCAL, + Pkt::MACSourceFromText("ipv6-link-local")); + EXPECT_EQ(Pkt::HWADDR_SOURCE_CLIENT_ADDR_RELAY_OPTION, + Pkt::MACSourceFromText("client-link-addr-option")); + EXPECT_EQ(Pkt::HWADDR_SOURCE_CLIENT_ADDR_RELAY_OPTION, + Pkt::MACSourceFromText("rfc6939")); + EXPECT_EQ(Pkt::HWADDR_SOURCE_REMOTE_ID, + Pkt::MACSourceFromText("remote-id")); + EXPECT_EQ(Pkt::HWADDR_SOURCE_REMOTE_ID, + Pkt::MACSourceFromText("rfc4649")); + EXPECT_EQ(Pkt::HWADDR_SOURCE_SUBSCRIBER_ID, + Pkt::MACSourceFromText("subscriber-id")); + EXPECT_EQ(Pkt::HWADDR_SOURCE_SUBSCRIBER_ID, + Pkt::MACSourceFromText("rfc4580")); + EXPECT_EQ(Pkt::HWADDR_SOURCE_DOCSIS, + Pkt::MACSourceFromText("docsis")); + +} + } diff --git a/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc b/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc index a16e8f8c22..4eea46e4da 100644 --- a/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc +++ b/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc @@ -212,7 +212,7 @@ TEST_F(DhcpParserTest, uint32ParserTest) { EXPECT_EQ(test_value, actual_value); } -/// @brief Check InterfaceListParser basic functionality +/// @brief Check InterfaceListConfigParser basic functionality /// /// Verifies that the parser: /// 1. Does not allow empty for storage. @@ -270,6 +270,49 @@ TEST_F(DhcpParserTest, interfaceListParserTest) { EXPECT_TRUE(test_config.socketOpen("eth1", AF_INET)); } + +/// @brief Check MACSourcesListConfigParser basic functionality +/// +/// Verifies that the parser: +/// 1. Does not allow empty for storage. +/// 2. Does not allow name other than "mac-sources" +/// 3. Parses list of mac sources and adds them to CfgMgr +TEST_F(DhcpParserTest, MacSourcesListConfigParserTest) { + + const std::string valid_name = "mac-sources"; + const std::string bogus_name = "bogus-name"; + + ParserContextPtr parser_context(new ParserContext(Option::V6)); + + // Verify that parser constructor fails if parameter name isn't "mac-sources" + EXPECT_THROW(MACSourcesListConfigParser(bogus_name, parser_context), + isc::BadValue); + + // That's an equivalent of the following snippet: + // "mac-sources: [ \"duid\", \"ipv6\" ]"; + ElementPtr config = Element::createList(); + config->add(Element::create("duid")); + config->add(Element::create("ipv6-link-local")); + + boost::scoped_ptr + parser(new MACSourcesListConfigParser(valid_name, parser_context)); + + // This should parse the configuration and add eth0 and eth1 to the list + // of interfaces that server should listen on. + EXPECT_NO_THROW(parser->build(config)); + EXPECT_NO_THROW(parser->commit()); + + // Use CfgMgr instance to check if eth0 and eth1 was added, and that + // eth2 was not added. + SrvConfigPtr cfg = CfgMgr::instance().getStagingCfg(); + ASSERT_TRUE(cfg); + vector configured_sources = cfg->getMACSources(); + + ASSERT_EQ(2, configured_sources.size()); + EXPECT_EQ(Pkt::HWADDR_SOURCE_DUID, configured_sources[0]); + EXPECT_EQ(Pkt::HWADDR_SOURCE_IPV6_LINK_LOCAL, configured_sources[1]); +} + /// @brief Test Fixture class which provides basic structure for testing /// configuration parsing. This is essentially the same structure provided /// by dhcp servers.