LGTM, thanks.

On Tue, Dec 17, 2013 at 10:28 AM, Santi Raffa <[email protected]> wrote:

> This method accepts a port number and checks that it is in fact valid.
>
> Signed-off-by: Santi Raffa <[email protected]>
> ---
>  lib/netutils.py                     |   25 +++++++++++++++++++++++++
>  test/py/ganeti.netutils_unittest.py |   13 +++++++++++++
>  2 files changed, 38 insertions(+)
>
> diff --git a/lib/netutils.py b/lib/netutils.py
> index f39ef77..0a70726 100644
> --- a/lib/netutils.py
> +++ b/lib/netutils.py
> @@ -267,6 +267,31 @@ class Hostname:
>      return hostname
>
>
> +def ValidatePortNumber(port):
> +  """Returns the validated integer port number if it is valid.
> +
> +  @param port: the port number to be validated
> +
> +  @raise ValueError: if the port is not valid
> +  @rtype: int
> +  @return: the validated value.
> +
> +  """
> +
> +  try:
> +    port = int(port)
> +  except TypeError:
> +    raise errors.ProgrammerError("ValidatePortNumber called with
> non-numeric"
> +                                 " type %s." % port.__class__.__name__)
> +  except ValueError:
> +    raise ValueError("Invalid port value: '%s'" % port)
> +
> +  if not 0 < port < 2 ** 16:
> +    raise ValueError("Invalid port value: '%d'" % port)
> +
> +  return port
> +
> +
>  def TcpPing(target, port, timeout=10, live_port_needed=False,
> source=None):
>    """Simple ping implementation using TCP connect(2).
>
> diff --git a/test/py/ganeti.netutils_unittest.py b/test/py/
> ganeti.netutils_unittest.py
> index 79aeed8..9e073b9 100755
> --- a/test/py/ganeti.netutils_unittest.py
> +++ b/test/py/ganeti.netutils_unittest.py
> @@ -531,5 +531,18 @@ class TestIpParsing(testutils.GanetiTestCase):
>                      addr[4][0] == "192.0.2.1")
>
>
> +class TestValidatePortNumber(unittest.TestCase):
> +  """Test netutils.ValidatePortNumber"""
> +
> +  def testPortNumberInt(self):
> +    self.assertRaises(ValueError, lambda: \
> +      netutils.ValidatePortNumber(500000))
> +    self.assertEqual(netutils.ValidatePortNumber(5000), 5000)
> +
> +  def testPortNumberStr(self):
> +    self.assertRaises(ValueError, lambda: \
> +      netutils.ValidatePortNumber("pinky bunny"))
> +    self.assertEqual(netutils.ValidatePortNumber("5000"), 5000)
> +
>  if __name__ == "__main__":
>    testutils.GanetiTestProgram()
> --
> 1.7.10.4
>
>


-- 
Thomas Thrainer | Software Engineer | [email protected] |

Google Germany GmbH
Dienerstr. 12
80331 München

Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Graham Law, Christine Elizabeth Flores

Reply via email to