#include "util.hpp" #include #include #include #include #include #include namespace phosphor { namespace network { TEST(TestUtil, AddrFromBuf) { std::string tooSmall(1, 'a'); std::string tooLarge(24, 'a'); struct in_addr ip1 = {0x01020304}; auto buf1 = stdplus::raw::asView(ip1); InAddrAny res1 = addrFromBuf(AF_INET, buf1); EXPECT_EQ(ip1, res1); EXPECT_THROW(addrFromBuf(AF_INET, tooSmall), std::runtime_error); EXPECT_THROW(addrFromBuf(AF_INET, tooLarge), std::runtime_error); EXPECT_THROW(addrFromBuf(AF_UNSPEC, buf1), std::invalid_argument); struct in6_addr ip2 = {0xfd, 0, 0, 0, 1}; auto buf2 = stdplus::raw::asView(ip2); InAddrAny res2 = addrFromBuf(AF_INET6, buf2); EXPECT_EQ(ip2, res2); EXPECT_THROW(addrFromBuf(AF_INET6, tooSmall), std::runtime_error); EXPECT_THROW(addrFromBuf(AF_INET6, tooLarge), std::runtime_error); EXPECT_THROW(addrFromBuf(AF_UNSPEC, buf2), std::invalid_argument); } TEST(TestUtil, InterfaceToUbootEthAddr) { EXPECT_EQ(std::nullopt, interfaceToUbootEthAddr("et")); EXPECT_EQ(std::nullopt, interfaceToUbootEthAddr("eth")); EXPECT_EQ(std::nullopt, interfaceToUbootEthAddr("sit0")); EXPECT_EQ(std::nullopt, interfaceToUbootEthAddr("ethh0")); EXPECT_EQ(std::nullopt, interfaceToUbootEthAddr("eth0h")); EXPECT_EQ("ethaddr", interfaceToUbootEthAddr("eth0")); EXPECT_EQ("eth1addr", interfaceToUbootEthAddr("eth1")); EXPECT_EQ("eth5addr", interfaceToUbootEthAddr("eth5")); EXPECT_EQ("eth28addr", interfaceToUbootEthAddr("eth28")); } namespace mac_address { TEST(MacIsEmpty, True) { EXPECT_TRUE(isEmpty({})); } TEST(MacIsEmpty, False) { EXPECT_FALSE(isEmpty({1})); EXPECT_FALSE(isEmpty({0, 0, 0, 1})); EXPECT_FALSE(isEmpty({0, 0, 0, 0, 0, 1})); } TEST(MacIsMulticast, True) { EXPECT_TRUE(isMulticast({255, 255, 255, 255, 255, 255})); EXPECT_TRUE(isMulticast({1})); } TEST(MacIsMulticast, False) { EXPECT_FALSE(isMulticast({0, 1, 2, 3, 4, 5})); EXPECT_FALSE(isMulticast({0xfe, 255, 255, 255, 255, 255})); } TEST(MacIsUnicast, True) { EXPECT_TRUE(isUnicast({0, 1, 2, 3, 4, 5})); EXPECT_TRUE(isUnicast({0xfe, 255, 255, 255, 255, 255})); } TEST(MacIsUnicast, False) { EXPECT_FALSE(isUnicast({})); EXPECT_FALSE(isUnicast({1})); EXPECT_FALSE(isUnicast({255, 255, 255, 255, 255, 255})); } TEST(IgnoredInterfaces, Empty) { auto ret = internal::parseInterfaces({}); EXPECT_TRUE(ret.empty()); ret = internal::parseInterfaces(" , ,, "); EXPECT_TRUE(ret.empty()); } TEST(IgnoredInterfaces, NotEmpty) { using ::testing::ContainerEq; std::unordered_set expected = {"eth0"}; auto ret = internal::parseInterfaces("eth0"); EXPECT_THAT(ret, ContainerEq(expected)); expected = {"eth0", "eth1", "bond1", "usb0"}; ret = internal::parseInterfaces(" ,eth0, eth1 ,bond1, usb0,,"); EXPECT_THAT(ret, ContainerEq(expected)); } } // namespace mac_address } // namespace network } // namespace phosphor