TestIsValidIp.cpp (4613B)
1 #include "gtest/MozGTestBench.h" // For MOZ_GTEST_BENCH 2 #include "gtest/gtest.h" 3 4 #include "nsURLHelper.h" 5 6 TEST(TestIsValidIp, IPV4Localhost) 7 { 8 constexpr auto ip = "127.0.0.1"_ns; 9 ASSERT_EQ(true, net_IsValidIPv4Addr(ip)); 10 } 11 12 TEST(TestIsValidIp, IPV4Only0) 13 { 14 constexpr auto ip = "0.0.0.0"_ns; 15 ASSERT_EQ(true, net_IsValidIPv4Addr(ip)); 16 } 17 18 TEST(TestIsValidIp, IPV4Max) 19 { 20 constexpr auto ip = "255.255.255.255"_ns; 21 ASSERT_EQ(true, net_IsValidIPv4Addr(ip)); 22 } 23 24 TEST(TestIsValidIp, IPV4LeadingZero) 25 { 26 constexpr auto ip = "055.225.255.255"_ns; 27 ASSERT_EQ(false, net_IsValidIPv4Addr(ip)); 28 29 constexpr auto ip2 = "255.055.255.255"_ns; 30 ASSERT_EQ(false, net_IsValidIPv4Addr(ip2)); 31 32 constexpr auto ip3 = "255.255.055.255"_ns; 33 ASSERT_EQ(false, net_IsValidIPv4Addr(ip3)); 34 35 constexpr auto ip4 = "255.255.255.055"_ns; 36 ASSERT_EQ(false, net_IsValidIPv4Addr(ip4)); 37 } 38 39 TEST(TestIsValidIp, IPV4StartWithADot) 40 { 41 constexpr auto ip = ".192.168.120.197"_ns; 42 ASSERT_EQ(false, net_IsValidIPv4Addr(ip)); 43 } 44 45 TEST(TestIsValidIp, IPV4StartWith4Digits) 46 { 47 constexpr auto ip = "1927.168.120.197"_ns; 48 ASSERT_EQ(false, net_IsValidIPv4Addr(ip)); 49 } 50 51 TEST(TestIsValidIp, IPV4OutOfRange) 52 { 53 constexpr auto invalid1 = "421.168.120.124"_ns; 54 constexpr auto invalid2 = "192.997.120.124"_ns; 55 constexpr auto invalid3 = "192.168.300.124"_ns; 56 constexpr auto invalid4 = "192.168.120.256"_ns; 57 58 ASSERT_EQ(false, net_IsValidIPv4Addr(invalid1)); 59 ASSERT_EQ(false, net_IsValidIPv4Addr(invalid2)); 60 ASSERT_EQ(false, net_IsValidIPv4Addr(invalid3)); 61 ASSERT_EQ(false, net_IsValidIPv4Addr(invalid4)); 62 } 63 64 TEST(TestIsValidIp, IPV4EmptyDigits) 65 { 66 constexpr auto invalid1 = "..0.0.0"_ns; 67 constexpr auto invalid2 = "127..0.0"_ns; 68 constexpr auto invalid3 = "127.0..0"_ns; 69 constexpr auto invalid4 = "127.0.0."_ns; 70 71 ASSERT_EQ(false, net_IsValidIPv4Addr(invalid1)); 72 ASSERT_EQ(false, net_IsValidIPv4Addr(invalid2)); 73 ASSERT_EQ(false, net_IsValidIPv4Addr(invalid3)); 74 ASSERT_EQ(false, net_IsValidIPv4Addr(invalid4)); 75 } 76 77 TEST(TestIsValidIp, IPV4NonNumeric) 78 { 79 constexpr auto invalid1 = "127.0.0.f"_ns; 80 constexpr auto invalid2 = "127.0.0.!"_ns; 81 constexpr auto invalid3 = "127#0.0.1"_ns; 82 83 ASSERT_EQ(false, net_IsValidIPv4Addr(invalid1)); 84 ASSERT_EQ(false, net_IsValidIPv4Addr(invalid2)); 85 ASSERT_EQ(false, net_IsValidIPv4Addr(invalid3)); 86 } 87 88 TEST(TestIsValidIp, IPV4TooManyDigits) 89 { 90 constexpr auto ip = "127.0.0.1.2"_ns; 91 ASSERT_EQ(false, net_IsValidIPv4Addr(ip)); 92 } 93 94 TEST(TestIsValidIp, IPV4TooFewDigits) 95 { 96 constexpr auto ip = "127.0.1"_ns; 97 ASSERT_EQ(false, net_IsValidIPv4Addr(ip)); 98 } 99 100 TEST(TestIsValidIp, IPV6WithIPV4Inside) 101 { 102 constexpr auto ipv6 = "0123:4567:89ab:cdef:0123:4567:127.0.0.1"_ns; 103 ASSERT_EQ(true, net_IsValidIPv6Addr(ipv6)); 104 } 105 106 TEST(TestIsValidIp, IPv6FullForm) 107 { 108 constexpr auto ipv6 = "0123:4567:89ab:cdef:0123:4567:890a:bcde"_ns; 109 ASSERT_EQ(true, net_IsValidIPv6Addr(ipv6)); 110 } 111 112 TEST(TestIsValidIp, IPv6TrimLeading0) 113 { 114 constexpr auto ipv6 = "123:4567:0:0:123:4567:890a:bcde"_ns; 115 ASSERT_EQ(true, net_IsValidIPv6Addr(ipv6)); 116 } 117 118 TEST(TestIsValidIp, IPv6Collapsed) 119 { 120 constexpr auto ipv6 = "FF01::101"_ns; 121 ASSERT_EQ(true, net_IsValidIPv6Addr(ipv6)); 122 } 123 124 TEST(TestIsValidIp, IPV6WithIPV4InsideCollapsed) 125 { 126 constexpr auto ipv6 = "::FFFF:129.144.52.38"_ns; 127 ASSERT_EQ(true, net_IsValidIPv6Addr(ipv6)); 128 } 129 130 TEST(TestIsValidIp, IPV6Localhost) 131 { 132 constexpr auto ipv6 = "::1"_ns; 133 ASSERT_EQ(true, net_IsValidIPv6Addr(ipv6)); 134 } 135 136 TEST(TestIsValidIp, IPV6LinkLocalPrefix) 137 { 138 constexpr auto ipv6 = "fe80::"_ns; 139 ASSERT_EQ(true, net_IsValidIPv6Addr(ipv6)); 140 } 141 142 TEST(TestIsValidIp, IPV6GlobalUnicastPrefix) 143 { 144 constexpr auto ipv6 = "2001::"_ns; 145 ASSERT_EQ(true, net_IsValidIPv6Addr(ipv6)); 146 } 147 148 TEST(TestIsValidIp, IPV6Unspecified) 149 { 150 constexpr auto ipv6 = "::"_ns; 151 ASSERT_EQ(true, net_IsValidIPv6Addr(ipv6)); 152 } 153 154 TEST(TestIsValidIp, IPV6InvalidIPV4Inside) 155 { 156 constexpr auto ipv6 = "0123:4567:89ab:cdef:0123:4567:127.0."_ns; 157 ASSERT_EQ(false, net_IsValidIPv6Addr(ipv6)); 158 } 159 160 TEST(TestIsValidIp, IPV6InvalidCharacters) 161 { 162 constexpr auto ipv6 = "012g:4567:89ab:cdef:0123:4567:127.0.0.1"_ns; 163 ASSERT_EQ(false, net_IsValidIPv6Addr(ipv6)); 164 165 constexpr auto ipv6pound = "0123:456#:89ab:cdef:0123:4567:127.0.0.1"_ns; 166 ASSERT_EQ(false, net_IsValidIPv6Addr(ipv6pound)); 167 } 168 169 TEST(TestIsValidIp, IPV6TooManyCharacters) 170 { 171 constexpr auto ipv6 = "0123:45671:89ab:cdef:0123:4567:127.0.0.1"_ns; 172 ASSERT_EQ(false, net_IsValidIPv6Addr(ipv6)); 173 } 174 TEST(TestIsValidIp, IPV6DoubleDoubleDots) 175 { 176 constexpr auto ipv6 = "0123::4567:890a::bcde:0123:4567"_ns; 177 ASSERT_EQ(false, net_IsValidIPv6Addr(ipv6)); 178 }