Get "cron trigger" list using model query.

If cron-trigger is created in different tenant
than workflow's tenant, associated cron-trigger
can not be got. So "model_query" has been used
instead of "secure_query".

Change-Id: Ief78f2cad76e6ca16893bff80c5e75c9015e9c74
Closes-bug: #1522286
This commit is contained in:
hparekh 2015-12-03 11:32:31 +00:00
parent 4d5fff53dc
commit f3d3e25235
3 changed files with 52 additions and 9 deletions

View File

@ -364,9 +364,9 @@ def delete_workflow_definition(name, session=None):
def _get_associated_cron_triggers(wf_name):
cron_triggers = _secure_query(
cron_triggers = b.model_query(
models.CronTrigger,
models.CronTrigger.name
[models.CronTrigger.name]
).filter_by(workflow_name=wf_name).all()
return [t[0] for t in cron_triggers]

View File

@ -338,12 +338,45 @@ class WorkflowTestsV2(base.TestCase):
resp, body = self.client.create_cron_trigger(
tr_name, name, None, '5 * * * *')
self.assertRaises(exceptions.BadRequest,
self.client.delete_obj,
'workflows', name)
try:
self.assertRaises(
exceptions.BadRequest,
self.client.delete_obj,
'workflows',
name
)
finally:
self.client.delete_obj('cron_triggers', tr_name)
self.client.triggers.remove(tr_name)
self.client.delete_obj('cron_triggers', tr_name)
self.client.triggers.remove(tr_name)
@test.attr(type='negative')
def test_delete_wf_with_trigger_associate_in_other_tenant(self):
tr_name = 'trigger'
_, body = self.client.create_workflow('wf_v2.yaml', scope='public')
name = body['workflows'][0]['name']
resp, body = self.alt_client.create_cron_trigger(
tr_name,
name,
None,
'5 * * * *'
)
try:
exception = self.assertRaises(
exceptions.BadRequest,
self.client.delete_obj,
'workflows',
name
)
self.assertEqual(
"Can't delete workflow that has triggers " +
"[workflow_name=wf2],[cron_trigger_name(s)=trigger]",
exception.resp_body['faultstring']
)
finally:
self.alt_client.delete_obj('cron_triggers', tr_name)
self.alt_client.triggers.remove(tr_name)
@test.attr(type='negative')
def test_delete_nonexistent_wf(self):

View File

@ -154,8 +154,11 @@ class MistralClientV2(MistralClientBase):
return resp, json.loads(body)
def create_workflow(self, yaml_file):
resp, body = self.post_request('workflows', yaml_file)
def create_workflow(self, yaml_file, scope=None):
if scope:
resp, body = self.post_request('workflows?scope=public', yaml_file)
else:
resp, body = self.post_request('workflows', yaml_file)
for wf in json.loads(body)['workflows']:
self.workflows.append(wf['name'])
@ -259,9 +262,16 @@ class TestCase(test.BaseTestCase):
)
cls.mgr = clients.Manager(cls.creds)
cls.alt_creds = creds.get_configured_credentials(
credential_type='alt_user'
)
cls.alt_mgr = clients.Manager(cls.alt_creds)
if cls._service == 'workflowv2':
cls.client = MistralClientV2(
cls.mgr.auth_provider, cls._service)
cls.alt_client = MistralClientV2(
cls.alt_mgr.auth_provider, cls._service)
def setUp(self):
super(TestCase, self).setUp()