Add functional API tests for cron-triggers
- Added API tests which check main api calls to cron-trigger endpoint - Fixed tearDown method (there was a problem when item array had a few elements, not all of them were deleted) Partly implements: blueprint mistral-triggers-functional-tests Change-Id: Ibba7cd03e6ccdf06c76ea4ea161542b954faee0f
This commit is contained in:
parent
b8390eb84d
commit
e00ad25ca6
|
@ -132,7 +132,7 @@ class ExecutionTestsV1(base.TestCase):
|
|||
|
||||
for ex in self.client.executions:
|
||||
self.client.delete_obj('executions', ex)
|
||||
self.client.executions.remove(ex)
|
||||
self.client.executions = []
|
||||
|
||||
@test.attr(type='positive')
|
||||
def test_create_execution(self):
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from tempest import exceptions
|
||||
from tempest import test
|
||||
|
||||
from mistral.tests.functional.api.v1 import test_mistral_basic
|
||||
|
@ -25,7 +26,7 @@ class WorkbookTestsV2(test_mistral_basic.WorkbookTestsV1):
|
|||
def tearDown(self):
|
||||
for wf in self.client.workflows:
|
||||
self.client.delete_obj('workflows', wf)
|
||||
self.client.workflows.remove(wf)
|
||||
self.client.workflows = []
|
||||
|
||||
super(WorkbookTestsV2, self).tearDown()
|
||||
|
||||
|
@ -37,7 +38,7 @@ class WorkflowTestsV2(base.TestCase):
|
|||
def tearDown(self):
|
||||
for wf in self.client.workflows:
|
||||
self.client.delete_obj('workflows', wf)
|
||||
self.client.workflows.remove(wf)
|
||||
self.client.workflows = []
|
||||
|
||||
super(WorkflowTestsV2, self).tearDown()
|
||||
|
||||
|
@ -109,6 +110,144 @@ class ExecutionTestsV2(test_mistral_basic.ExecutionTestsV1):
|
|||
def tearDown(self):
|
||||
for wf in self.client.workflows:
|
||||
self.client.delete_obj('workflows', wf)
|
||||
self.client.workflows.remove(wf)
|
||||
self.client.workflows = []
|
||||
|
||||
super(ExecutionTestsV2, self).tearDown()
|
||||
|
||||
|
||||
class CronTriggerTestsV2(base.TestCase):
|
||||
|
||||
_version = 2
|
||||
|
||||
def setUp(self):
|
||||
super(CronTriggerTestsV2, self).setUp()
|
||||
|
||||
_, body = self.client.create_workflow()
|
||||
self.wf_name = body['workflows'][0]['name']
|
||||
|
||||
def tearDown(self):
|
||||
|
||||
for tr in self.client.triggers:
|
||||
self.client.delete_obj('cron_triggers', tr)
|
||||
self.client.triggers = []
|
||||
|
||||
for wf in self.client.workflows:
|
||||
self.client.delete_obj('workflows', wf)
|
||||
self.client.workflows = []
|
||||
|
||||
super(CronTriggerTestsV2, self).tearDown()
|
||||
|
||||
@test.attr(type='smoke')
|
||||
def test_get_list_triggers(self):
|
||||
resp, body = self.client.get_list_obj('cron_triggers')
|
||||
|
||||
self.assertEqual(200, resp.status)
|
||||
self.assertEqual([], body['cron_triggers'])
|
||||
|
||||
@test.attr(type='sanity')
|
||||
def test_create_and_delete_triggers(self):
|
||||
tr_name = 'trigger'
|
||||
resp, body = self.client.create_trigger(
|
||||
tr_name, '5 * * * *', self.wf_name)
|
||||
|
||||
self.assertEqual(201, resp.status)
|
||||
self.assertEqual(tr_name, body['name'])
|
||||
|
||||
resp, body = self.client.get_list_obj('cron_triggers')
|
||||
|
||||
self.assertEqual(200, resp.status)
|
||||
trs_names = [body['cron_triggers'][i]['name']
|
||||
for i in range(len(body['cron_triggers']))]
|
||||
self.assertIn(tr_name, trs_names)
|
||||
|
||||
self.client.delete_obj('cron_triggers', tr_name)
|
||||
self.client.triggers.remove(tr_name)
|
||||
|
||||
_, body = self.client.get_list_obj('cron_triggers')
|
||||
|
||||
trs_names = [body['cron_triggers'][i]['name']
|
||||
for i in range(len(body['cron_triggers']))]
|
||||
self.assertNotIn(tr_name, trs_names)
|
||||
|
||||
@test.attr(type='sanity')
|
||||
def test_create_two_triggers_for_one_wf(self):
|
||||
tr_name_1 = 'trigger1'
|
||||
tr_name_2 = 'trigger2'
|
||||
resp, body = self.client.create_trigger(
|
||||
tr_name_1, '5 * * * *', self.wf_name)
|
||||
|
||||
self.assertEqual(201, resp.status)
|
||||
self.assertEqual(tr_name_1, body['name'])
|
||||
|
||||
resp, body = self.client.create_trigger(
|
||||
tr_name_2, '15 * * * *', self.wf_name)
|
||||
|
||||
self.assertEqual(201, resp.status)
|
||||
self.assertEqual(tr_name_2, body['name'])
|
||||
|
||||
resp, body = self.client.get_list_obj('cron_triggers')
|
||||
|
||||
self.assertEqual(200, resp.status)
|
||||
trs_names = [body['cron_triggers'][i]['name']
|
||||
for i in range(len(body['cron_triggers']))]
|
||||
self.assertIn(tr_name_1, trs_names)
|
||||
self.assertIn(tr_name_2, trs_names)
|
||||
|
||||
@test.attr(type='sanity')
|
||||
def test_get_trigger(self):
|
||||
tr_name = 'trigger'
|
||||
self.client.create_trigger(
|
||||
tr_name, '5 * * * *', self.wf_name)
|
||||
|
||||
resp, body = self.client.get_object('cron_triggers', tr_name)
|
||||
|
||||
self.assertEqual(200, resp.status)
|
||||
self.assertEqual(tr_name, body['name'])
|
||||
|
||||
@test.attr(type='negative')
|
||||
def test_create_trigger_nonexistent_wf(self):
|
||||
self.assertRaises(exceptions.NotFound,
|
||||
self.client.create_trigger,
|
||||
'trigger', '5 * * * *', 'nonexist')
|
||||
|
||||
@test.attr(type='negative')
|
||||
def test_get_nonexistent_trigger(self):
|
||||
self.assertRaises(exceptions.NotFound,
|
||||
self.client.get_object,
|
||||
'cron_triggers', 'trigger')
|
||||
|
||||
@test.attr(type='negative')
|
||||
def test_delete_nonexistent_trigger(self):
|
||||
self.assertRaises(exceptions.NotFound,
|
||||
self.client.delete_obj,
|
||||
'cron_triggers', 'trigger')
|
||||
|
||||
@test.attr(type='negative')
|
||||
def test_create_two_triggers_with_same_name(self):
|
||||
tr_name = 'trigger'
|
||||
self.client.create_trigger(
|
||||
tr_name, '5 * * * *', self.wf_name)
|
||||
self.assertRaises(exceptions.Conflict,
|
||||
self.client.create_trigger,
|
||||
tr_name, '5 * * * *', self.wf_name)
|
||||
|
||||
@test.skip_because(bug="1383146")
|
||||
@test.attr(type='negative')
|
||||
def test_create_two_triggers_with_same_pattern(self):
|
||||
self.client.create_trigger(
|
||||
'trigger1', '5 * * * *', self.wf_name)
|
||||
self.assertRaises(exceptions.Conflict,
|
||||
self.client.create_trigger,
|
||||
'trigger2', '5 * * * *', self.wf_name)
|
||||
|
||||
@test.attr(type='nagative')
|
||||
def test_invalid_pattern_not_enough_params(self):
|
||||
self.assertRaises(exceptions.ServerFault,
|
||||
self.client.create_trigger,
|
||||
'trigger', '5 *', self.wf_name)
|
||||
|
||||
@test.attr(type='nagative')
|
||||
def test_invalid_pattern_out_of_range(self):
|
||||
self.assertRaises(exceptions.ServerFault,
|
||||
self.client.create_trigger,
|
||||
'trigger', '88 * * * *', self.wf_name)
|
||||
|
|
|
@ -72,6 +72,7 @@ class MistralClientBase(rest_client.RestClient):
|
|||
self.workbooks = []
|
||||
self.executions = []
|
||||
self.workflows = []
|
||||
self.triggers = []
|
||||
|
||||
def get_list_obj(self, name):
|
||||
resp, body = self.get(name)
|
||||
|
@ -286,6 +287,21 @@ class MistralClientV2(MistralClientBase):
|
|||
|
||||
return resp, json.loads(body)
|
||||
|
||||
def create_trigger(self, name, pattern, wf_name, wf_input=None):
|
||||
post_body = {
|
||||
'name': name,
|
||||
'pattern': pattern,
|
||||
'workflow_name': wf_name,
|
||||
}
|
||||
if wf_input:
|
||||
post_body.update({'workflow_input': json.dumps(wf_input)})
|
||||
|
||||
rest, body = self.post('cron_triggers', json.dumps(post_body))
|
||||
|
||||
self.triggers.append(name)
|
||||
|
||||
return rest, json.loads(body)
|
||||
|
||||
|
||||
class AuthProv(auth.KeystoneV2AuthProvider):
|
||||
|
||||
|
@ -333,7 +349,7 @@ class TestCase(tempest.test.BaseTestCase):
|
|||
|
||||
for wb in self.client.workbooks:
|
||||
self.client.delete_obj('workbooks', wb)
|
||||
self.client.workbooks.remove(wb)
|
||||
self.client.workbooks = []
|
||||
|
||||
|
||||
class TestCaseAdvanced(TestCase):
|
||||
|
@ -355,10 +371,10 @@ class TestCaseAdvanced(TestCase):
|
|||
def tearDown(self):
|
||||
for wb in self.client.workbooks:
|
||||
self.client.delete_obj('workbooks', wb)
|
||||
self.client.workbooks.remove(wb)
|
||||
self.client.workbooks = []
|
||||
|
||||
for ex in self.client.executions:
|
||||
self.client.delete_obj('executions', ex)
|
||||
self.client.executions.remove(ex)
|
||||
self.client.executions = []
|
||||
|
||||
super(TestCaseAdvanced, self).tearDown()
|
||||
|
|
Loading…
Reference in New Issue