Fix role delete validation

* Fixed node filter in RoleValidator

Change-Id: Ia3159cb173c72b565ba7afec1d32af3cc38a06bc
Closes-bug: #1488091
This commit is contained in:
Fedor Zhadaev 2015-08-25 10:22:29 +03:00
parent 9f227f2cc0
commit f813073793
2 changed files with 17 additions and 2 deletions

View File

@ -29,10 +29,10 @@ class RoleValidator(BasicValidator):
clusters = [cluster.id for cluster in release.clusters]
node = db().query(models.Node).filter(
models.Node.cluster_id.in_(clusters)
).filter(sa.not_(sa.and_(
).filter(sa.or_(
models.Node.roles.any(role_name),
models.Node.pending_roles.any(role_name)
))).first()
)).first()
if node:
raise errors.CannotDelete(

View File

@ -121,6 +121,21 @@ class TestRoleApi(BaseRoleTest):
self.release.id, role['name'], expect_errors=True)
self.assertEqual(delete_resp.status_code, 400)
def test_delete_role_when_assigned_another_role(self):
# There was bug with such validation
# https://bugs.launchpad.net/fuel/+bug/1488091
role = self.env.create_role(self.release.id, self.role_data).json
self.env.create(
nodes_kwargs=[
{'roles': ['compute'], 'pending_addition': True},
],
cluster_kwargs={'release_id': self.release.id},
)
delete_resp = self.env.delete_role(
self.release.id, role['name'])
self.assertEqual(delete_resp.status_code, 204)
def test_delete_pending_assigned_role(self):
role = self.env.create_role(self.release.id, self.role_data).json
self.env.create(