blob: 9e1b4d0929956ee13e859308b4cc6ee39733532f [file] [log] [blame]
#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