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