1 #include "utils/ip_utils.hpp"
2
3 #include <boost/asio/ip/address.hpp>
4
5 #include <cstdint>
6
7 #include <gtest/gtest.h>
8
9 namespace redfish::ip_util
10 {
11 namespace
12 {
13
14 using ::boost::asio::ip::make_address;
15
TEST(IpToString,ReturnsCorrectIpStringForIpv4Addresses)16 TEST(IpToString, ReturnsCorrectIpStringForIpv4Addresses)
17 {
18 EXPECT_EQ(toString(make_address("127.0.0.1")), "127.0.0.1");
19 EXPECT_EQ(toString(make_address("192.168.1.1")), "192.168.1.1");
20 EXPECT_EQ(toString(make_address("::1")), "::1");
21 }
22
TEST(IpToString,ReturnsCorrectIpStringForIpv6Addresses)23 TEST(IpToString, ReturnsCorrectIpStringForIpv6Addresses)
24 {
25 EXPECT_EQ(toString(make_address("fd03:f9ab:25de:89ec::0001")),
26 "fd03:f9ab:25de:89ec::1");
27 EXPECT_EQ(toString(make_address("fd03:f9ab:25de:89ec::1234:abcd")),
28 "fd03:f9ab:25de:89ec::1234:abcd");
29 EXPECT_EQ(toString(make_address("fd03:f9ab:25de:89ec:1234:5678:90ab:cdef")),
30 "fd03:f9ab:25de:89ec:1234:5678:90ab:cdef");
31 }
32
TEST(IpToString,ReturnsCorrectIpStringForIpv4MappedIpv6Addresses)33 TEST(IpToString, ReturnsCorrectIpStringForIpv4MappedIpv6Addresses)
34 {
35 EXPECT_EQ(toString(make_address("::ffff:127.0.0.1")), "127.0.0.1");
36 }
37
TEST(ipv4VerifyIpAndGetBitcount,PositiveTests)38 TEST(ipv4VerifyIpAndGetBitcount, PositiveTests)
39 {
40 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("192.168.1.1", nullptr));
41
42 uint8_t bits = 0;
43 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("128.0.0.0", &bits));
44 EXPECT_EQ(bits, 1);
45 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("192.0.0.0", &bits));
46 EXPECT_EQ(bits, 2);
47 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("224.0.0.0", &bits));
48 EXPECT_EQ(bits, 3);
49 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("240.0.0.0", &bits));
50 EXPECT_EQ(bits, 4);
51 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("248.0.0.0", &bits));
52 EXPECT_EQ(bits, 5);
53 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("252.0.0.0", &bits));
54 EXPECT_EQ(bits, 6);
55 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("254.0.0.0", &bits));
56 EXPECT_EQ(bits, 7);
57 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.0.0.0", &bits));
58 EXPECT_EQ(bits, 8);
59 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.128.0.0", &bits));
60 EXPECT_EQ(bits, 9);
61 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.192.0.0", &bits));
62 EXPECT_EQ(bits, 10);
63 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.224.0.0", &bits));
64 EXPECT_EQ(bits, 11);
65 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.240.0.0", &bits));
66 EXPECT_EQ(bits, 12);
67 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.248.0.0", &bits));
68 EXPECT_EQ(bits, 13);
69 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.252.0.0", &bits));
70 EXPECT_EQ(bits, 14);
71 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.254.0.0", &bits));
72 EXPECT_EQ(bits, 15);
73 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.0.0", &bits));
74 EXPECT_EQ(bits, 16);
75 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.128.0", &bits));
76 EXPECT_EQ(bits, 17);
77 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.192.0", &bits));
78 EXPECT_EQ(bits, 18);
79 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.224.0", &bits));
80 EXPECT_EQ(bits, 19);
81 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.240.0", &bits));
82 EXPECT_EQ(bits, 20);
83 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.248.0", &bits));
84 EXPECT_EQ(bits, 21);
85 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.252.0", &bits));
86 EXPECT_EQ(bits, 22);
87 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.254.0", &bits));
88 EXPECT_EQ(bits, 23);
89 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.255.0", &bits));
90 EXPECT_EQ(bits, 24);
91 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.255.128", &bits));
92 EXPECT_EQ(bits, 25);
93 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.255.192", &bits));
94 EXPECT_EQ(bits, 26);
95 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.255.224", &bits));
96 EXPECT_EQ(bits, 27);
97 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.255.240", &bits));
98 EXPECT_EQ(bits, 28);
99 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.255.248", &bits));
100 EXPECT_EQ(bits, 29);
101 EXPECT_TRUE(ipv4VerifyIpAndGetBitcount("255.255.255.252", &bits));
102 EXPECT_EQ(bits, 30);
103 }
104
TEST(ipv4VerifyIpAndGetBitcount,NegativeTests)105 TEST(ipv4VerifyIpAndGetBitcount, NegativeTests)
106 {
107 uint8_t bits = 0;
108 // > 256 in any field
109 EXPECT_FALSE(ipv4VerifyIpAndGetBitcount("256.0.0.0", &bits));
110 EXPECT_FALSE(ipv4VerifyIpAndGetBitcount("1.256.0.0", &bits));
111 EXPECT_FALSE(ipv4VerifyIpAndGetBitcount("1.1.256.0", &bits));
112 EXPECT_FALSE(ipv4VerifyIpAndGetBitcount("1.1.1.256", &bits));
113
114 // Non contiguous mask
115 EXPECT_FALSE(ipv4VerifyIpAndGetBitcount("255.0.255.0", &bits));
116
117 // Too many fields
118 EXPECT_FALSE(ipv4VerifyIpAndGetBitcount("1.1.1.1.1", &bits));
119 // Not enough fields
120 EXPECT_FALSE(ipv4VerifyIpAndGetBitcount("1.1.1", &bits));
121
122 // Empty string
123 EXPECT_FALSE(ipv4VerifyIpAndGetBitcount("", &bits));
124 }
125 } // namespace
126 } // namespace redfish::ip_util
127