Validates security group name and description
RM11507 Security group names and descriptions are now correctly limited to 255 characters a piece, and an error will be thrown to the user if either is greater.
This commit is contained in:
		@@ -27,6 +27,8 @@ from quark import protocols
 | 
			
		||||
CONF = cfg.CONF
 | 
			
		||||
LOG = logging.getLogger(__name__)
 | 
			
		||||
DEFAULT_SG_UUID = "00000000-0000-0000-0000-000000000000"
 | 
			
		||||
GROUP_NAME_MAX_LENGTH = 255
 | 
			
		||||
GROUP_DESCRIPTION_MAX_LENGTH = 255
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _validate_security_group_rule(context, rule):
 | 
			
		||||
@@ -63,13 +65,28 @@ def _validate_security_group_rule(context, rule):
 | 
			
		||||
    return rule
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _validate_security_group(security_group):
 | 
			
		||||
    if "name" in security_group:
 | 
			
		||||
        if len(security_group["name"]) > GROUP_NAME_MAX_LENGTH:
 | 
			
		||||
            raise exceptions.InvalidInput(msg="Group name must be 255 "
 | 
			
		||||
                                              "characters or less")
 | 
			
		||||
 | 
			
		||||
        if security_group["name"] == "default":
 | 
			
		||||
            raise sg_ext.SecurityGroupDefaultAlreadyExists()
 | 
			
		||||
 | 
			
		||||
    if ("description" in security_group and
 | 
			
		||||
            len(security_group["description"]) > GROUP_DESCRIPTION_MAX_LENGTH):
 | 
			
		||||
        raise exceptions.InvalidInput(msg="Group description must be 255 "
 | 
			
		||||
                                          "characters or less")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def create_security_group(context, security_group):
 | 
			
		||||
    LOG.info("create_security_group for tenant %s" %
 | 
			
		||||
             (context.tenant_id))
 | 
			
		||||
    group = security_group["security_group"]
 | 
			
		||||
    _validate_security_group(group)
 | 
			
		||||
 | 
			
		||||
    group_name = group.get('name', '')
 | 
			
		||||
    if group_name == "default":
 | 
			
		||||
        raise sg_ext.SecurityGroupDefaultAlreadyExists()
 | 
			
		||||
    group_id = uuidutils.generate_uuid()
 | 
			
		||||
 | 
			
		||||
    with context.session.begin():
 | 
			
		||||
@@ -178,6 +195,8 @@ def update_security_group(context, id, security_group):
 | 
			
		||||
    if id == DEFAULT_SG_UUID:
 | 
			
		||||
        raise sg_ext.SecurityGroupCannotUpdateDefault()
 | 
			
		||||
    new_group = security_group["security_group"]
 | 
			
		||||
    _validate_security_group(new_group)
 | 
			
		||||
 | 
			
		||||
    with context.session.begin():
 | 
			
		||||
        group = db_api.security_group_find(context, id=id, scope=db_api.ONE)
 | 
			
		||||
        db_group = db_api.security_group_update(context, group, **new_group)
 | 
			
		||||
 
 | 
			
		||||
@@ -209,6 +209,22 @@ class TestQuarkCreateSecurityGroup(test_quark_plugin.TestQuarkPlugin):
 | 
			
		||||
                    self.context, {'security_group': group})
 | 
			
		||||
                self.assertTrue(group_create.called)
 | 
			
		||||
 | 
			
		||||
    def test_create_security_group_name_too_long(self):
 | 
			
		||||
        group = {'name': 'a' * 256, 'description': 'bar',
 | 
			
		||||
                 'tenant_id': self.context.tenant_id}
 | 
			
		||||
        with self._stubs(group):
 | 
			
		||||
            with self.assertRaises(exceptions.InvalidInput):
 | 
			
		||||
                self.plugin.create_security_group(
 | 
			
		||||
                    self.context, {'security_group': group})
 | 
			
		||||
 | 
			
		||||
    def test_create_security_group_description(self):
 | 
			
		||||
        group = {'name': 'foo', 'description': 'b' * 256,
 | 
			
		||||
                 'tenant_id': self.context.tenant_id}
 | 
			
		||||
        with self._stubs(group):
 | 
			
		||||
            with self.assertRaises(exceptions.InvalidInput):
 | 
			
		||||
                self.plugin.create_security_group(
 | 
			
		||||
                    self.context, {'security_group': group})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestQuarkDeleteSecurityGroup(test_quark_plugin.TestQuarkPlugin):
 | 
			
		||||
    @contextlib.contextmanager
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user