diff --git a/src/validators/ip_address.py b/src/validators/ip_address.py index 66ca2e99..1bb5d134 100644 --- a/src/validators/ip_address.py +++ b/src/validators/ip_address.py @@ -19,7 +19,7 @@ def _check_private_ip(value: str, is_private: Optional[bool]): if is_private is None: return True - if is_private and ( + if ( any( value.startswith(l_bit) for l_bit in { @@ -33,8 +33,9 @@ def _check_private_ip(value: str, is_private: Optional[bool]): or re.match(r"^172\.(?:1[6-9]|2\d|3[0-1])\.", value) # private or re.match(r"^(?:22[4-9]|23[0-9]|24[0-9]|25[0-5])\.", value) # broadcast ): - return True - return False + return is_private + + return not is_private @validator diff --git a/tests/test_ip_address.py b/tests/test_ip_address.py index f28cdec0..ed6fd7d4 100644 --- a/tests/test_ip_address.py +++ b/tests/test_ip_address.py @@ -148,3 +148,59 @@ def test_returns_failed_validation_on_invalid_ipv6_cidr_address( ): """Test returns failed validation on invalid ipv6 CIDR address.""" assert isinstance(ipv6(address, cidr=cidr, strict=strict, host_bit=host_bit), ValidationError) + + +@pytest.mark.parametrize( + ("address", "private"), + [ + ("10.1.1.1", True), + ("192.168.1.1", True), + ("169.254.1.1", True), + ("127.0.0.1", True), + ("0.0.0.0", True), + ], +) +def test_returns_true_on_valid_private_ipv4_address(address: str, private: bool): + """Test returns true on private ipv4 address.""" + assert ipv4(address, private=private) + + +@pytest.mark.parametrize( + ("address", "private"), + [ + ("1.1.1.1", True), + ("192.169.1.1", True), + ("7.53.12.1", True), + ], +) +def test_returns_failed_validation_on_invalid_private_ipv4_address(address: str, private: bool): + """Test returns failed validation on invalid private ipv4 address.""" + assert isinstance(ipv4(address, private=private), ValidationError) + + +@pytest.mark.parametrize( + ("address", "private"), + [ + ("1.1.1.1", False), + ("192.169.1.1", False), + ("7.53.12.1", False), + ], +) +def test_returns_true_on_valid_public_ipv4_address(address: str, private: bool): + """Test returns true on valid public ipv4 address.""" + assert ipv4(address, private=private) + + +@pytest.mark.parametrize( + ("address", "private"), + [ + ("10.1.1.1", False), + ("192.168.1.1", False), + ("169.254.1.1", False), + ("127.0.0.1", False), + ("0.0.0.0", False), + ], +) +def test_returns_failed_validation_on_invalid_public_ipv4_address(address: str, private: bool): + """Test returns failed validation on private ipv4 address.""" + assert isinstance(ipv4(address, private=private), ValidationError)