def _validate_method_dict(data, valid_values=None): if not isinstance(data, dict): msg = _("'%s' is not a dict") % data LOG.debug(msg) return msg if not data.has_key('uplink'): msg = _("'%s' must has key uplink") % data LOG.debug(msg) return msg if not data.has_key('downlink'): msg = _("'%s' must has key downlink") % data LOG.debug(msg) return msg msg = attr._validate_string(data['uplink']) if msg: msg = _("'uplink' should be string") LOG.debug(msg) return msg msg = attr._validate_string(data['downlink']) if msg: msg = _("'downlink' should be string") LOG.debug(msg) return msg if data['uplink'] == 'LBM_SIP': if data['downlink'] != 'LBM_DIP': msg = _("when uplink=LBM_SIP, downlink must be LBM_DIP") LOG.debug(msg) return msg if data['downlink'] == 'LBM_SIP': if data['uplink'] != 'LBM_DIP': msg = _("when downlink=LBM_SIP, uplink must be LBM_DIP") LOG.debug(msg) return msg if data['downlink'] == 'LBM_DIP': if data['uplink'] != 'LBM_SIP': msg = _("when downlink=LBM_DIP, uplink must be LBM_SIP") LOG.debug(msg) return msg if data['uplink'] == 'LBM_DIP': if data['downlink'] != 'LBM_SIP': msg = _("when uplink=LBM_DIP, downlink must be LBM_SIP") LOG.debug(msg) return msg if data['downlink'] == 'LBM_5TUPLE': if data['uplink'] != 'LBM_5TUPLE': msg = _("when downlink=LBM_5TUPLE, uplink must be LBM_5TUPLE") LOG.debug(msg) return msg
def test_validate_string(self): msg = attributes._validate_string(None, None) self.assertEqual("'None' is not a valid string", msg) # 0 == len(data) == max_len msg = attributes._validate_string("", 0) self.assertIsNone(msg) # 0 == len(data) < max_len msg = attributes._validate_string("", 9) self.assertIsNone(msg) # 0 < len(data) < max_len msg = attributes._validate_string("123456789", 10) self.assertIsNone(msg) # 0 < len(data) == max_len msg = attributes._validate_string("123456789", 9) self.assertIsNone(msg) # 0 < max_len < len(data) msg = attributes._validate_string("1234567890", 9) self.assertEqual("'1234567890' exceeds maximum length of 9", msg) msg = attributes._validate_string("123456789", None) self.assertIsNone(msg)
def _validate_dns_search_domain(data, max_len=attributes.NAME_MAX_LEN): msg = attributes._validate_string(data, max_len) if msg: return msg if not data: return msg = _validate_dns_format(data) if msg: return msg
def _validate_type(data, valid_values=None): msg = attr._validate_string(data) if msg: msg = _("type should be string") LOG.debug(msg) return msg if data.strip() == '': msg = _("type can not be empty") LOG.debug(msg) return msg
def _validate_str_list(data, valid_values=None): if not isinstance(data, list): msg = _("'%s' is not a list") % data LOG.debug(msg) return msg for item in data: msg = attr._validate_string(item) if msg: LOG.debug(msg) return msg if len(set(data)) != len(data): msg = _("Duplicate items in the list: '%s'") % ', '.join(data) LOG.debug(msg) return msg
def _validate_dns_domain(data, max_len=FQDN_MAX_LEN): msg = attr._validate_string(data) if msg: return msg if not data: return if not data.endswith('.'): msg = _("'%s' is not a FQDN") % data return msg msg = _validate_dns_format(data, max_len) if msg: return msg length = len(data) if length > max_len - 2: msg = _("'%(data)s' contains '%(length)s' characters. Adding a " "sub-domain will cause it to exceed the maximum length of a " "FQDN of '%(max_len)s'") % {"data": data, "length": length, "max_len": max_len} return msg
def _validate_fip_dns_name(data, max_len=FQDN_MAX_LEN): msg = attr._validate_string(data) if msg: return msg if not data: return if data.endswith('.'): msg = _("'%s' is a FQDN. It should be a relative domain name") % data return msg msg = _validate_dns_format(data, max_len) if msg: return msg length = len(data) if length > max_len - 3: msg = _("'%(data)s' contains '%(length)s' characters. Adding a " "domain name will cause it to exceed the maximum length " "of a FQDN of '%(max_len)s'") % {"data": data, "length": length, "max_len": max_len} return msg
def _validate_gbp_resource_name(data, valid_values=None): # Any REST API defined GBP resource name is restricted to 128 characters return attr._validate_string(data, max_len=128)
def validate_tag(tag): msg = attributes._validate_string(tag, MAX_TAG_LEN) if msg: raise exceptions.InvalidInput(error_message=msg)
def _validate_service_defs(data, valid_values=None): """Validate the list of service definitions.""" try: if not data: return _("No service type definition was provided. At least a " "service type definition must be provided") f_name = _validate_service_defs.__name__ for svc_def in data: try: # Do a copy of the original object so we can easily # pop out stuff from it svc_def_copy = svc_def.copy() try: svc_name = svc_def_copy.pop(SERVICE_ATTR) plugin_name = svc_def_copy.pop(PLUGIN_ATTR) except KeyError: msg = (_("Required attributes missing in service " "definition: %s") % svc_def) LOG.error(_("%(f_name)s: %(msg)s"), {'f_name': f_name, 'msg': msg}) return msg # Validate 'service' attribute if svc_name not in constants.ALLOWED_SERVICES: msg = (_("Service name '%s' unspecified " "or invalid") % svc_name) LOG.error(_("%(f_name)s: %(msg)s"), {'f_name': f_name, 'msg': msg}) return msg # Validate 'plugin' attribute if not plugin_name: msg = (_("Plugin name not specified in " "service definition %s") % svc_def) LOG.error(_("%(f_name)s: %(msg)s"), {'f_name': f_name, 'msg': msg}) return msg # TODO(salvatore-orlando): This code will need to change when # multiple plugins for each adv service will be supported svc_plugin = manager.NeutronManager.get_service_plugins().get( svc_name) if not svc_plugin: msg = _("No plugin for service '%s'") % svc_name LOG.error(_("%(f_name)s: %(msg)s"), {'f_name': f_name, 'msg': msg}) return msg if svc_plugin.get_plugin_name() != plugin_name: msg = _("Plugin name '%s' is not correct ") % plugin_name LOG.error(_("%(f_name)s: %(msg)s"), {'f_name': f_name, 'msg': msg}) return msg # Validate 'driver' attribute (just check it's a string) # FIXME(salvatore-orlando): This should be a list # Note: using get() instead of pop() as pop raises if the # key is not found, which might happen for the driver driver = svc_def_copy.get(DRIVER_ATTR) if driver: msg = attributes._validate_string(driver,) if msg: return msg del svc_def_copy[DRIVER_ATTR] # Anything left - it should be an error if svc_def_copy: msg = (_("Unparseable attributes found in " "service definition %s") % svc_def) LOG.error(_("%(f_name)s: %(msg)s"), {'f_name': f_name, 'msg': msg}) return msg except TypeError: LOG.exception(_("Exception while parsing service " "definition:%s"), svc_def) msg = (_("Was expecting a dict for service definition, found " "the following: %s") % svc_def) LOG.error(_("%(f_name)s: %(msg)s"), {'f_name': f_name, 'msg': msg}) return msg except TypeError: return (_("%s: provided data are not iterable") % _validate_service_defs.__name__)