[stem/master] Implementing and testing is_valid_ip_address()

commit 31cd9b9aa5ea0b5139d3d32ee3a424d9af1e26ca Author: Damian Johnson <atagar@torproject.org> Date: Sat Mar 17 17:07:52 2012 -0700 Implementing and testing is_valid_ip_address() Moving over an arm function for testing if a string is a valid IPv4 address. Also throwing in some unit tests and a fix for entries with leading zeros (for instance "1.2.3.01"). --- run_tests.py | 2 ++ stem/util/__init__.py | 2 +- stem/util/connection.py | 31 +++++++++++++++++++++++++++++++ test/unit/util/__init__.py | 2 +- test/unit/util/connection.py | 25 +++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 2 deletions(-) diff --git a/run_tests.py b/run_tests.py index 60118af..4918881 100755 --- a/run_tests.py +++ b/run_tests.py @@ -19,6 +19,7 @@ import test.unit.socket.control_line import test.unit.socket.control_message import test.unit.descriptor.reader import test.unit.util.conf +import test.unit.util.connection import test.unit.util.enum import test.unit.util.system import test.unit.version @@ -80,6 +81,7 @@ ERROR_ATTR = (term.Color.RED, term.Attr.BOLD) UNIT_TESTS = ( test.unit.util.enum.TestEnum, + test.unit.util.connection.TestConnection, test.unit.util.conf.TestConf, test.unit.util.system.TestSystem, test.unit.descriptor.reader.TestDescriptorReader, diff --git a/stem/util/__init__.py b/stem/util/__init__.py index 2e6b479..bbf4df7 100644 --- a/stem/util/__init__.py +++ b/stem/util/__init__.py @@ -2,5 +2,5 @@ Utility functions used by the stem library. """ -__all__ = ["conf", "enum", "log", "proc", "system", "term"] +__all__ = ["conf", "connection", "enum", "log", "proc", "system", "term"] diff --git a/stem/util/connection.py b/stem/util/connection.py new file mode 100644 index 0000000..6505637 --- /dev/null +++ b/stem/util/connection.py @@ -0,0 +1,31 @@ +""" +Connection and networking based utility functions. This will likely be expanded +later to have all of arm's functions... +https://gitweb.torproject.org/arm.git/blob/HEAD:/src/util/connections.py + +but for now just moving the parts we need. +""" + +def is_valid_ip_address(address): + """ + Checks if a string is a valid IPv4 address. + + Arguments: + address (str) - string to be checked + + Returns: + True if input is a valid IPv4 address, false otherwise. + """ + + # checks if theres four period separated values + if not address.count(".") == 3: return False + + # checks that each value in the octet are decimal values between 0-255 + for entry in address.split("."): + if not entry.isdigit() or int(entry) < 0 or int(entry) > 255: + return False + elif entry[0] == "0" and len(entry) > 1: + return False # leading zeros, for instance in "1.2.3.001" + + return True + diff --git a/test/unit/util/__init__.py b/test/unit/util/__init__.py index 7c8d12b..74b758a 100644 --- a/test/unit/util/__init__.py +++ b/test/unit/util/__init__.py @@ -2,5 +2,5 @@ Unit tests for stem.util.* contents. """ -__all__ = ["conf", "enum", "system"] +__all__ = ["conf", "connection", "enum", "system"] diff --git a/test/unit/util/connection.py b/test/unit/util/connection.py new file mode 100644 index 0000000..58cedf4 --- /dev/null +++ b/test/unit/util/connection.py @@ -0,0 +1,25 @@ +""" +Unit tests for the stem.util.connection functions. +""" + +import unittest +import stem.util.connection + +class TestConnection(unittest.TestCase): + def test_is_valid_ip_address(self): + """ + Checks the is_valid_ip_address function. + """ + + self.assertTrue(stem.util.connection.is_valid_ip_address("0.0.0.0")) + self.assertTrue(stem.util.connection.is_valid_ip_address("1.2.3.4")) + self.assertTrue(stem.util.connection.is_valid_ip_address("192.168.0.1")) + self.assertTrue(stem.util.connection.is_valid_ip_address("255.255.255.255")) + + self.assertFalse(stem.util.connection.is_valid_ip_address("0.0.00.0")) + self.assertFalse(stem.util.connection.is_valid_ip_address("0.0.0")) + self.assertFalse(stem.util.connection.is_valid_ip_address("1.2.3.256")) + self.assertFalse(stem.util.connection.is_valid_ip_address("1.2.3.-1")) + self.assertFalse(stem.util.connection.is_valid_ip_address("0.0.0.a")) + self.assertFalse(stem.util.connection.is_valid_ip_address("a.b.c.d")) +
participants (1)
-
atagar@torproject.org