Merge "Add ip address validation"

This commit is contained in:
Jenkins 2014-09-29 11:25:52 +00:00 committed by Gerrit Code Review
commit 46d61c428b
3 changed files with 49 additions and 0 deletions

View File

@ -20,6 +20,7 @@ Network-related utilities and helper functions.
import logging
import socket
import netaddr
from six.moves.urllib import parse
from oslo.utils._i18n import _LW
@ -75,6 +76,27 @@ def parse_host_port(address, default_port=None):
return (host, None if port is None else int(port))
def is_valid_ipv4(address):
"""Verify that address represents a valid IPv4 address."""
try:
return netaddr.valid_ipv4(address)
except Exception:
return False
def is_valid_ipv6(address):
"""Verify that address represents a valid IPv6 address."""
try:
return netaddr.valid_ipv6(address)
except Exception:
return False
def is_valid_ip(address):
"""Verify that address represents a valid IP address."""
return is_valid_ipv4(address) or is_valid_ipv6(address)
class _ModifiedSplitResult(parse.SplitResult):
"""Split results class for urlsplit."""

View File

@ -6,3 +6,4 @@ Babel>=1.3
six>=1.7.0
iso8601>=0.1.9
oslo.i18n>=1.0.0 # Apache-2.0
netaddr>=0.7.12

View File

@ -149,3 +149,29 @@ class NetworkUtilsTest(test_base.BaseTestCase):
mock_sock.reset_mock()
netutils.set_tcp_keepalive(mock_sock, False)
self.assertEqual(1, len(mock_sock.mock_calls))
def test_is_valid_ipv4(self):
self.assertTrue(netutils.is_valid_ipv4('42.42.42.42'))
self.assertFalse(netutils.is_valid_ipv4('-1.11.11.11'))
self.assertFalse(netutils.is_valid_ipv4(''))
def test_is_valid_ipv6(self):
self.assertTrue(netutils.is_valid_ipv6('::1'))
self.assertFalse(netutils.is_valid_ipv6(
'1fff::a88:85a3::172.31.128.1'))
self.assertFalse(netutils.is_valid_ipv6(''))
def test_is_valid_ip(self):
self.assertTrue(netutils.is_valid_ip('127.0.0.1'))
self.assertTrue(netutils.is_valid_ip('2001:db8::ff00:42:8329'))
self.assertFalse(netutils.is_valid_ip('256.0.0.0'))
self.assertFalse(netutils.is_valid_ip('::1.2.3.'))
self.assertFalse(netutils.is_valid_ip(''))