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
