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 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 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 37 TEST(IpToString, ReturnsCorrectIpStringForIpv4MappedIpv6Addresses) 38 { 39 EXPECT_EQ(toString(make_address("::ffff:127.0.0.1")), "127.0.0.1"); 40 } 41 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 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