1594123ddSRatan Gupta #include "util.hpp"
2594123ddSRatan Gupta
31b594206SWilliam A. Kennington III #include <stdplus/raw.hpp>
489d734b9SPatrick Williams
589d734b9SPatrick Williams #include <stdexcept>
6c920bdb8SWilliam A. Kennington III #include <string>
7c920bdb8SWilliam A. Kennington III #include <string_view>
835297177SRatan Gupta
9307554e7SLei YU #include <gmock/gmock.h>
1057d9c506SGunnar Mills #include <gtest/gtest.h>
1157d9c506SGunnar Mills
12594123ddSRatan Gupta namespace phosphor
13594123ddSRatan Gupta {
14594123ddSRatan Gupta namespace network
15594123ddSRatan Gupta {
16594123ddSRatan Gupta
TEST(TestUtil,AddrFromBuf)171b594206SWilliam A. Kennington III TEST(TestUtil, AddrFromBuf)
18a00b1c3fSWilliam A. Kennington III {
19a00b1c3fSWilliam A. Kennington III std::string tooSmall(1, 'a');
20a00b1c3fSWilliam A. Kennington III std::string tooLarge(24, 'a');
21a00b1c3fSWilliam A. Kennington III
22*9b2a20d3SWilliam A. Kennington III stdplus::In4Addr ip1{1, 2, 3, 4};
231b594206SWilliam A. Kennington III auto buf1 = stdplus::raw::asView<char>(ip1);
24*9b2a20d3SWilliam A. Kennington III auto res1 = addrFromBuf(AF_INET, buf1);
251b594206SWilliam A. Kennington III EXPECT_EQ(ip1, res1);
26a00b1c3fSWilliam A. Kennington III EXPECT_THROW(addrFromBuf(AF_INET, tooSmall), std::runtime_error);
27a00b1c3fSWilliam A. Kennington III EXPECT_THROW(addrFromBuf(AF_INET, tooLarge), std::runtime_error);
2897b5dc68SWilliam A. Kennington III EXPECT_THROW(addrFromBuf(AF_UNSPEC, buf1), std::invalid_argument);
29a00b1c3fSWilliam A. Kennington III
30*9b2a20d3SWilliam A. Kennington III stdplus::In6Addr ip2{0xfd, 0, 0, 0, 1};
311b594206SWilliam A. Kennington III auto buf2 = stdplus::raw::asView<char>(ip2);
32*9b2a20d3SWilliam A. Kennington III auto res2 = addrFromBuf(AF_INET6, buf2);
331b594206SWilliam A. Kennington III EXPECT_EQ(ip2, res2);
34a00b1c3fSWilliam A. Kennington III EXPECT_THROW(addrFromBuf(AF_INET6, tooSmall), std::runtime_error);
35a00b1c3fSWilliam A. Kennington III EXPECT_THROW(addrFromBuf(AF_INET6, tooLarge), std::runtime_error);
3697b5dc68SWilliam A. Kennington III EXPECT_THROW(addrFromBuf(AF_UNSPEC, buf2), std::invalid_argument);
37a00b1c3fSWilliam A. Kennington III }
38a00b1c3fSWilliam A. Kennington III
TEST(TestUtil,InterfaceToUbootEthAddr)391b594206SWilliam A. Kennington III TEST(TestUtil, InterfaceToUbootEthAddr)
407b9e8bd5SWilliam A. Kennington III {
417b9e8bd5SWilliam A. Kennington III EXPECT_EQ(std::nullopt, interfaceToUbootEthAddr("et"));
427b9e8bd5SWilliam A. Kennington III EXPECT_EQ(std::nullopt, interfaceToUbootEthAddr("eth"));
437b9e8bd5SWilliam A. Kennington III EXPECT_EQ(std::nullopt, interfaceToUbootEthAddr("sit0"));
447b9e8bd5SWilliam A. Kennington III EXPECT_EQ(std::nullopt, interfaceToUbootEthAddr("ethh0"));
457b9e8bd5SWilliam A. Kennington III EXPECT_EQ(std::nullopt, interfaceToUbootEthAddr("eth0h"));
467b9e8bd5SWilliam A. Kennington III EXPECT_EQ("ethaddr", interfaceToUbootEthAddr("eth0"));
477b9e8bd5SWilliam A. Kennington III EXPECT_EQ("eth1addr", interfaceToUbootEthAddr("eth1"));
487b9e8bd5SWilliam A. Kennington III EXPECT_EQ("eth5addr", interfaceToUbootEthAddr("eth5"));
497b9e8bd5SWilliam A. Kennington III EXPECT_EQ("eth28addr", interfaceToUbootEthAddr("eth28"));
507b9e8bd5SWilliam A. Kennington III }
517b9e8bd5SWilliam A. Kennington III
521137a972SWilliam A. Kennington III namespace mac_address
531137a972SWilliam A. Kennington III {
541137a972SWilliam A. Kennington III
TEST(IgnoredInterfaces,Empty)55307554e7SLei YU TEST(IgnoredInterfaces, Empty)
56307554e7SLei YU {
57307554e7SLei YU auto ret = internal::parseInterfaces({});
58307554e7SLei YU EXPECT_TRUE(ret.empty());
59307554e7SLei YU
60307554e7SLei YU ret = internal::parseInterfaces(" , ,, ");
61307554e7SLei YU EXPECT_TRUE(ret.empty());
62307554e7SLei YU }
63307554e7SLei YU
TEST(IgnoredInterfaces,NotEmpty)64307554e7SLei YU TEST(IgnoredInterfaces, NotEmpty)
65307554e7SLei YU {
66307554e7SLei YU using ::testing::ContainerEq;
6795530ec9SWilliam A. Kennington III std::unordered_set<std::string_view> expected = {"eth0"};
68307554e7SLei YU auto ret = internal::parseInterfaces("eth0");
69307554e7SLei YU EXPECT_THAT(ret, ContainerEq(expected));
70307554e7SLei YU
71307554e7SLei YU expected = {"eth0", "eth1", "bond1", "usb0"};
72307554e7SLei YU ret = internal::parseInterfaces(" ,eth0, eth1 ,bond1, usb0,,");
73307554e7SLei YU EXPECT_THAT(ret, ContainerEq(expected));
74307554e7SLei YU }
75307554e7SLei YU
761137a972SWilliam A. Kennington III } // namespace mac_address
7757d9c506SGunnar Mills } // namespace network
78594123ddSRatan Gupta } // namespace phosphor
79