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