1 #include "snmp_util.hpp"
2 
3 #include <netinet/in.h>
4 
5 #include <xyz/openbmc_project/Common/error.hpp>
6 
7 #include <gtest/gtest.h>
8 
9 namespace phosphor
10 {
11 namespace network
12 {
13 namespace snmp
14 {
15 
16 using InternalFailure =
17     sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
18 
TEST(TestUtil,IpValidation)19 TEST(TestUtil, IpValidation)
20 {
21     // valid IPv4 address
22     std::string ipaddress = "0.0.0.0";
23     EXPECT_EQ(ipaddress, resolveAddress(ipaddress));
24 
25     ipaddress = "9.3.185.83";
26     EXPECT_EQ(ipaddress, resolveAddress(ipaddress));
27 
28     // Invalid IPv4 address
29     ipaddress = "9.3.185.a";
30     EXPECT_THROW(resolveAddress(ipaddress), InternalFailure);
31 
32     ipaddress = "9.3.a.83";
33     EXPECT_THROW(resolveAddress(ipaddress), InternalFailure);
34 
35     ipaddress = "x.x.x.x";
36     EXPECT_THROW(resolveAddress(ipaddress), InternalFailure);
37 
38     // valid IPv6 address
39     ipaddress = "0:0:0:0:0:0:0:0";
40     EXPECT_EQ("::", resolveAddress(ipaddress));
41 
42     ipaddress = "1:0:0:0:0:0:0:8";
43     EXPECT_EQ("1::8", resolveAddress(ipaddress));
44 
45     ipaddress = "1::8";
46     EXPECT_EQ(ipaddress, resolveAddress(ipaddress));
47 
48     ipaddress = "0:0:0:0:0:FFFF:204.152.189.116";
49     EXPECT_EQ("::ffff:204.152.189.116", resolveAddress(ipaddress));
50 
51     ipaddress = "::ffff:204.152.189.116";
52     EXPECT_EQ(ipaddress, resolveAddress(ipaddress));
53 
54     ipaddress = "a:0:0:0:0:FFFF:204.152.189.116";
55     EXPECT_EQ("a::ffff:cc98:bd74", resolveAddress(ipaddress));
56 
57     // Invalid IPv6 address
58     ipaddress = "abcd::xyz::";
59     EXPECT_THROW(resolveAddress(ipaddress), InternalFailure);
60 
61     // resolve the local host
62     ipaddress = "localhost";
63     auto isLocal = false;
64     auto addr = resolveAddress(ipaddress);
65     if (addr == "127.0.0.1" || addr == "::1")
66     {
67         isLocal = true;
68     }
69     EXPECT_TRUE(isLocal);
70 }
71 
72 } // namespace snmp
73 } // namespace network
74 } // namespace phosphor
75