Example #1
0
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
Example #2
0
    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 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
Example #5
0
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
Example #6
0
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_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
Example #8
0
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
Example #9
0
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
Example #10
0
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
Example #11
0
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_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)
Example #13
0
def validate_tag(tag):
    msg = attributes._validate_string(tag, MAX_TAG_LEN)
    if msg:
        raise exceptions.InvalidInput(error_message=msg)
Example #14
0
def validate_tag(tag):
    msg = attributes._validate_string(tag, MAX_TAG_LEN)
    if msg:
        raise exceptions.InvalidInput(error_message=msg)
Example #15
0
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_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__)