1 #include "utils/ip_utils.hpp"
2 
3 #include <gtest/gtest.h> // IWYU pragma: keep
4 
5 // IWYU pragma: no_include <gtest/gtest-message.h>
6 // IWYU pragma: no_include <gtest/gtest-test-part.h>
7 // IWYU pragma: no_include "gtest/gtest_pred_impl.h"
8 
9 namespace redfish::ip_util
10 {
11 namespace
12 {
13 
14 using ::boost::asio::ip::make_address;
15 
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 
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 
33 TEST(IpToString, ReturnsCorrectIpStringForIpv4MappedIpv6Addresses)
34 {
35     EXPECT_EQ(toString(make_address("::ffff:127.0.0.1")), "127.0.0.1");
36 }
37 
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 
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