summaryrefslogtreecommitdiffstats
path: root/src/lib/dhcpsrv/tests/cfg_mac_source_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/dhcpsrv/tests/cfg_mac_source_unittest.cc')
-rw-r--r--src/lib/dhcpsrv/tests/cfg_mac_source_unittest.cc84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/lib/dhcpsrv/tests/cfg_mac_source_unittest.cc b/src/lib/dhcpsrv/tests/cfg_mac_source_unittest.cc
new file mode 100644
index 0000000..b02c791
--- /dev/null
+++ b/src/lib/dhcpsrv/tests/cfg_mac_source_unittest.cc
@@ -0,0 +1,84 @@
+// Copyright (C) 2014-2015,2017 Internet Systems Consortium, Inc. ("ISC")
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#include <config.h>
+
+#include <dhcpsrv/cfg_mac_source.h>
+#include <dhcp/hwaddr.h>
+#include <exceptions/exceptions.h>
+#include <testutils/test_to_element.h>
+#include <gtest/gtest.h>
+#include <string>
+
+namespace {
+
+using namespace isc;
+using namespace isc::dhcp;
+using namespace isc::test;
+
+// Checks whether CfgMACSource::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(CfgMACSourceTest, MACSourceFromText) {
+ EXPECT_THROW(CfgMACSource::MACSourceFromText("unknown"), BadValue);
+
+ EXPECT_EQ(HWAddr::HWADDR_SOURCE_ANY, CfgMACSource::MACSourceFromText("any"));
+ EXPECT_EQ(HWAddr::HWADDR_SOURCE_RAW, CfgMACSource::MACSourceFromText("raw"));
+ EXPECT_EQ(HWAddr::HWADDR_SOURCE_DUID, CfgMACSource::MACSourceFromText("duid"));
+ EXPECT_EQ(HWAddr::HWADDR_SOURCE_IPV6_LINK_LOCAL,
+ CfgMACSource::MACSourceFromText("ipv6-link-local"));
+ EXPECT_EQ(HWAddr::HWADDR_SOURCE_CLIENT_ADDR_RELAY_OPTION,
+ CfgMACSource::MACSourceFromText("client-link-addr-option"));
+ EXPECT_EQ(HWAddr::HWADDR_SOURCE_CLIENT_ADDR_RELAY_OPTION,
+ CfgMACSource::MACSourceFromText("rfc6939"));
+ EXPECT_EQ(HWAddr::HWADDR_SOURCE_REMOTE_ID,
+ CfgMACSource::MACSourceFromText("remote-id"));
+ EXPECT_EQ(HWAddr::HWADDR_SOURCE_REMOTE_ID,
+ CfgMACSource::MACSourceFromText("rfc4649"));
+ EXPECT_EQ(HWAddr::HWADDR_SOURCE_SUBSCRIBER_ID,
+ CfgMACSource::MACSourceFromText("subscriber-id"));
+ EXPECT_EQ(HWAddr::HWADDR_SOURCE_SUBSCRIBER_ID,
+ CfgMACSource::MACSourceFromText("rfc4580"));
+ EXPECT_EQ(HWAddr::HWADDR_SOURCE_DOCSIS_CMTS,
+ CfgMACSource::MACSourceFromText("docsis-cmts"));
+ EXPECT_EQ(HWAddr::HWADDR_SOURCE_DOCSIS_MODEM,
+ CfgMACSource::MACSourceFromText("docsis-modem"));
+}
+
+// Checks whether the opposite operation is working correctly.
+TEST(CfgMACSourceTest, unparse) {
+ CfgMACSource cfg;
+ // any was added by the constructor
+ cfg.add(HWAddr::HWADDR_SOURCE_RAW);
+ cfg.add(HWAddr::HWADDR_SOURCE_DUID);
+ cfg.add(HWAddr::HWADDR_SOURCE_IPV6_LINK_LOCAL);
+ cfg.add(HWAddr::HWADDR_SOURCE_CLIENT_ADDR_RELAY_OPTION);
+ cfg.add(HWAddr::HWADDR_SOURCE_REMOTE_ID);
+ cfg.add(HWAddr::HWADDR_SOURCE_SUBSCRIBER_ID);
+ cfg.add(HWAddr::HWADDR_SOURCE_DOCSIS_CMTS);
+ cfg.add(HWAddr::HWADDR_SOURCE_DOCSIS_MODEM);
+
+ // Unparse
+ std::string expected = "["
+ "\"any\","
+ "\"raw\","
+ "\"duid\","
+ "\"ipv6-link-local\","
+ "\"client-link-addr-option\","
+ "\"remote-id\","
+ "\"subscriber-id\","
+ "\"docsis-cmts\","
+ "\"docsis-modem\""
+ "]";
+ runToElementTest<CfgMACSource>(expected, cfg);
+
+ // Add an unknown type
+ cfg.add(0x12345678);
+ ASSERT_THROW(cfg.toElement(), ToElementError);
+}
+
+};