def convert_to_protocol(data): """Validate that a specified IP protocol is valid. For the authoritative list mapping protocol names to numbers, see the IANA: http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml :param data: The value to verify is an IP protocol. :returns: If data is an int between 0 and 255 or None, return that; if data is a string then return it lower-cased if it matches one of the allowed protocol names. :raises exceptions.InvalidInput: If data is an int < 0, an int > 255, or a string that does not match one of the allowed protocol names. """ if data is None: return val = convert_string_to_case_insensitive(data) if val in constants.IPTABLES_PROTOCOL_MAP: return data error_message = _("IP protocol '%s' is not supported. Only protocol " "names and their integer representation (0 to " "255) are supported") % data try: if validators.validate_range(convert_to_int(data), [0, 255]) is None: return data else: raise n_exc.InvalidInput(error_message=error_message) except n_exc.InvalidInput: raise n_exc.InvalidInput(error_message=error_message)
def _validate_port_or_none(data, valid_values=None): if data is None: return None return validators.validate_range(data, [0, 65535])
def test_validate_range(self): msg = validators.validate_range(1, [1, 9]) self.assertIsNone(msg) msg = validators.validate_range(5, [1, 9]) self.assertIsNone(msg) msg = validators.validate_range(9, [1, 9]) self.assertIsNone(msg) msg = validators.validate_range(1, (1, 9)) self.assertIsNone(msg) msg = validators.validate_range(5, (1, 9)) self.assertIsNone(msg) msg = validators.validate_range(9, (1, 9)) self.assertIsNone(msg) msg = validators.validate_range(0, [1, 9]) self.assertEqual("'0' is too small - must be at least '1'", msg) msg = validators.validate_range(10, (1, 9)) self.assertEqual("'10' is too large - must be no larger than '9'", msg) msg = validators.validate_range("bogus", (1, 9)) self.assertEqual("'bogus' is not an integer", msg) msg = validators.validate_range( 10, (validators.UNLIMITED, validators.UNLIMITED)) self.assertIsNone(msg) msg = validators.validate_range(10, (1, validators.UNLIMITED)) self.assertIsNone(msg) msg = validators.validate_range(1, (validators.UNLIMITED, 9)) self.assertIsNone(msg) msg = validators.validate_range(-1, (0, validators.UNLIMITED)) self.assertEqual("'-1' is too small - must be at least '0'", msg) msg = validators.validate_range(10, (validators.UNLIMITED, 9)) self.assertEqual("'10' is too large - must be no larger than '9'", msg)
def test_validate_range(self): msg = validators.validate_range(1, [1, 9]) self.assertIsNone(msg) msg = validators.validate_range(5, [1, 9]) self.assertIsNone(msg) msg = validators.validate_range(9, [1, 9]) self.assertIsNone(msg) msg = validators.validate_range(1, (1, 9)) self.assertIsNone(msg) msg = validators.validate_range(5, (1, 9)) self.assertIsNone(msg) msg = validators.validate_range(9, (1, 9)) self.assertIsNone(msg) msg = validators.validate_range(0, [1, 9]) self.assertEqual("'0' is too small - must be at least '1'", msg) msg = validators.validate_range(10, (1, 9)) self.assertEqual("'10' is too large - must be no larger than '9'", msg) msg = validators.validate_range("bogus", (1, 9)) self.assertEqual("'bogus' is not an integer", msg) msg = validators.validate_range(10, (validators.UNLIMITED, validators.UNLIMITED)) self.assertIsNone(msg) msg = validators.validate_range(10, (1, validators.UNLIMITED)) self.assertIsNone(msg) msg = validators.validate_range(1, (validators.UNLIMITED, 9)) self.assertIsNone(msg) msg = validators.validate_range(-1, (0, validators.UNLIMITED)) self.assertEqual("'-1' is too small - must be at least '0'", msg) msg = validators.validate_range(10, (validators.UNLIMITED, 9)) self.assertEqual("'10' is too large - must be no larger than '9'", msg)