blob: 6c647ed4f17af94e0451bae96f758df3d9ae2204 [file] [log] [blame]
Ratan Gupta594123d2017-05-16 22:48:35 +05301#include "util.hpp"
2
Gunnar Mills57d9c502018-09-14 14:42:34 -05003#include <netinet/in.h>
4
Ratan Gupta35297172018-11-28 18:40:16 +05305#include <xyz/openbmc_project/Common/error.hpp>
6
Gunnar Mills57d9c502018-09-14 14:42:34 -05007#include <gtest/gtest.h>
8
Ratan Gupta594123d2017-05-16 22:48:35 +05309namespace phosphor
10{
11namespace network
12{
13
Ratan Gupta35297172018-11-28 18:40:16 +053014using InternalFailure =
15 sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
Ratan Gupta594123d2017-05-16 22:48:35 +053016class TestUtil : public testing::Test
17{
Gunnar Mills57d9c502018-09-14 14:42:34 -050018 public:
19 TestUtil()
20 {
21 // Empty
22 }
Ratan Gupta594123d2017-05-16 22:48:35 +053023};
24
Nagaraju Goruganti067ca2d2018-01-17 01:12:00 -060025TEST_F(TestUtil, IpValidation)
26{
27 std::string ipaddress = "0.0.0.0";
28 EXPECT_EQ(true, isValidIP(AF_INET, ipaddress));
29
30 ipaddress = "9.3.185.83";
31 EXPECT_EQ(true, isValidIP(AF_INET, ipaddress));
32
33 ipaddress = "9.3.185.a";
34 EXPECT_EQ(false, isValidIP(AF_INET, ipaddress));
35
36 ipaddress = "9.3.a.83";
37 EXPECT_EQ(false, isValidIP(AF_INET, ipaddress));
38
39 ipaddress = "x.x.x.x";
40 EXPECT_EQ(false, isValidIP(AF_INET, ipaddress));
41
42 ipaddress = "0:0:0:0:0:0:0:0";
43 EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
44
45 ipaddress = "1:0:0:0:0:0:0:8";
46 EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
47
48 ipaddress = "1::8";
49 EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
50
51 ipaddress = "0:0:0:0:0:FFFF:204.152.189.116";
52 EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
53
54 ipaddress = "::ffff:204.152.189.116";
55 EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
56
57 ipaddress = "a:0:0:0:0:FFFF:204.152.189.116";
58 EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
59
60 ipaddress = "1::8";
61 EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
Nagaraju Goruganti067ca2d2018-01-17 01:12:00 -060062}
63
64TEST_F(TestUtil, PrefixValidation)
65{
66 uint8_t prefixLength = 1;
67 EXPECT_EQ(true, isValidPrefix(AF_INET, prefixLength));
68
69 prefixLength = 32;
70 EXPECT_EQ(true, isValidPrefix(AF_INET, prefixLength));
71
72 prefixLength = 0;
73 EXPECT_EQ(false, isValidPrefix(AF_INET, prefixLength));
74
75 prefixLength = 33;
76 EXPECT_EQ(false, isValidPrefix(AF_INET, prefixLength));
77
78 prefixLength = 33;
79 EXPECT_EQ(true, isValidPrefix(AF_INET6, prefixLength));
80
81 prefixLength = 65;
82 EXPECT_EQ(false, isValidPrefix(AF_INET, prefixLength));
Nagaraju Goruganti067ca2d2018-01-17 01:12:00 -060083}
84
Nagaraju Goruganti067ca2d2018-01-17 01:12:00 -060085TEST_F(TestUtil, MacValidation)
86{
87 std::string macaddress = "00:00:00:00:00:00";
88 EXPECT_EQ(false, phosphor::network::mac_address::validate(macaddress));
89
90 macaddress = "F6:C6:E6:6:B0:D3";
91 EXPECT_EQ(false, phosphor::network::mac_address::validate(macaddress));
92
93 macaddress = "F6:C6:E6:06:B0:D3";
94 EXPECT_EQ(true, phosphor::network::mac_address::validate(macaddress));
95
96 macaddress = "hh:HH:HH:hh:HH:yy";
97 EXPECT_EQ(false, phosphor::network::mac_address::validate(macaddress));
98
99 macaddress = "hhh:GGG:iii:jjj:kkk:lll";
100 EXPECT_EQ(false, phosphor::network::mac_address::validate(macaddress));
Nagaraju Goruganti067ca2d2018-01-17 01:12:00 -0600101}
102
Ratan Gupta594123d2017-05-16 22:48:35 +0530103TEST_F(TestUtil, ConvertV4MasktoPrefix)
104{
105 std::string mask = "255.255.255.0";
106 uint8_t prefix = toCidr(AF_INET, mask);
107 EXPECT_EQ(prefix, 24);
108
109 mask = "255.255.0.0";
110 prefix = toCidr(AF_INET, mask);
111 EXPECT_EQ(prefix, 16);
112
113 mask = "255.0.0.0";
114 prefix = toCidr(AF_INET, mask);
115 EXPECT_EQ(prefix, 8);
116
117 mask = "255.224.0.0";
118 prefix = toCidr(AF_INET, mask);
119 EXPECT_EQ(prefix, 11);
120
Gunnar Mills57d9c502018-09-14 14:42:34 -0500121 // Invalid Mask
Ratan Gupta594123d2017-05-16 22:48:35 +0530122 mask = "255.0.255.0";
123 prefix = toCidr(AF_INET, mask);
124 EXPECT_EQ(prefix, 0);
125}
126
127TEST_F(TestUtil, convertV6MasktoPrefix)
128{
129 std::string mask = "ffff:ffff::";
130 uint8_t prefix = toCidr(AF_INET6, mask);
131 EXPECT_EQ(prefix, 32);
132
133 mask = "ffff:ffff:ffff::";
134 prefix = toCidr(AF_INET6, mask);
135 EXPECT_EQ(prefix, 48);
136
137 mask = "ffff:ffff:fc00::";
138 prefix = toCidr(AF_INET6, mask);
139 EXPECT_EQ(prefix, 38);
140
Gunnar Mills57d9c502018-09-14 14:42:34 -0500141 // Invalid Mask
Ratan Gupta594123d2017-05-16 22:48:35 +0530142 mask = "ffff:0fff::";
143 prefix = toCidr(AF_INET6, mask);
144 EXPECT_EQ(prefix, 0);
145}
146
Ratan Gupta11cef802017-05-29 08:41:48 +0530147TEST_F(TestUtil, isLinkLocaladdress)
Ratan Gupta594123d2017-05-16 22:48:35 +0530148{
149 std::string ipaddress = "fe80:fec0::";
Nagaraju Goruganti66b974d2017-10-03 08:43:08 -0500150 EXPECT_TRUE(isLinkLocalIP(ipaddress));
Ratan Gupta594123d2017-05-16 22:48:35 +0530151
Nagaraju Goruganti66b974d2017-10-03 08:43:08 -0500152 ipaddress = "2000:fe80:789::";
153 EXPECT_FALSE(isLinkLocalIP(ipaddress));
Ratan Gupta594123d2017-05-16 22:48:35 +0530154
155 ipaddress = "2000:fe80::";
Nagaraju Goruganti66b974d2017-10-03 08:43:08 -0500156 EXPECT_FALSE(isLinkLocalIP(ipaddress));
157
158 ipaddress = "169.254.3.3";
159 EXPECT_TRUE(isLinkLocalIP(ipaddress));
160
161 ipaddress = "3.169.254.3";
162 EXPECT_FALSE(isLinkLocalIP(ipaddress));
163
164 ipaddress = "3.3.169.254";
165 EXPECT_FALSE(isLinkLocalIP(ipaddress));
Ratan Gupta594123d2017-05-16 22:48:35 +0530166}
167
168TEST_F(TestUtil, convertPrefixToMask)
169{
170 std::string mask = toMask(AF_INET, 24);
171 EXPECT_EQ(mask, "255.255.255.0");
172
173 mask = toMask(AF_INET, 8);
174 EXPECT_EQ(mask, "255.0.0.0");
175
176 mask = toMask(AF_INET, 27);
177 EXPECT_EQ(mask, "255.255.255.224");
178}
179
Ratan Gupta11cef802017-05-29 08:41:48 +0530180TEST_F(TestUtil, getNetworkAddress)
181{
Gunnar Mills57d9c502018-09-14 14:42:34 -0500182 std::string address = getNetworkID(AF_INET, "9.3.23.251", 24);
183 EXPECT_EQ("9.3.23.0", address);
Ratan Gupta11cef802017-05-29 08:41:48 +0530184
Gunnar Mills57d9c502018-09-14 14:42:34 -0500185 address = getNetworkID(AF_INET, "9.3.23.251", 25);
186 EXPECT_EQ("9.3.23.128", address);
Ratan Gupta11cef802017-05-29 08:41:48 +0530187
Gunnar Mills57d9c502018-09-14 14:42:34 -0500188 address = getNetworkID(AF_INET6, "2001:db8:abcd:dd12::0", 64);
189 EXPECT_EQ("2001:db8:abcd:dd12::", address);
Ratan Gupta11cef802017-05-29 08:41:48 +0530190
Ratan Gupta35297172018-11-28 18:40:16 +0530191 EXPECT_THROW(getNetworkID(AF_INET, "a.b.c.d", 25), InternalFailure);
Ratan Gupta11cef802017-05-29 08:41:48 +0530192
Ratan Gupta35297172018-11-28 18:40:16 +0530193 EXPECT_THROW(getNetworkID(AF_INET6, "2001:db8:gghh:dd12::0", 64),
194 InternalFailure);
Ratan Gupta11cef802017-05-29 08:41:48 +0530195
Gunnar Mills57d9c502018-09-14 14:42:34 -0500196 address = getNetworkID(AF_INET6, "fe80::201:6cff:fe80:228", 64);
197 EXPECT_EQ("fe80::", address);
Ratan Gupta11cef802017-05-29 08:41:48 +0530198}
199
Gunnar Mills57d9c502018-09-14 14:42:34 -0500200} // namespace network
201} // namespace phosphor