| #include "util.hpp" | 
 |  | 
 | #include <stdexcept> | 
 | #include <stdplus/raw.hpp> | 
 | #include <string> | 
 | #include <string_view> | 
 |  | 
 | #include <gmock/gmock.h> | 
 | #include <gtest/gtest.h> | 
 |  | 
 | 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<char>(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<char>(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<std::string_view> 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 |