From 19fd616b90188ba7c4f81362b5c13fdec68a0816 Mon Sep 17 00:00:00 2001 From: hardik Date: Thu, 24 Sep 2015 11:30:05 +0530 Subject: [PATCH] Output format is corrected for wf-validate and wb-validate Output of workflow-validate and workbook-validate was not correct. Now output will be displayed in tabular format by default. Output can be customized by user by giving format option as described in doc. Change-Id: Ic159f188236a99acbba2d3728a74da438b90e9b2 Closes-Bug: #1499626 --- mistralclient/commands/v2/workbooks.py | 21 +++++++--- mistralclient/commands/v2/workflows.py | 21 +++++++--- .../tests/functional/cli/v2/cli_tests_v2.py | 42 +++++++++++++++++++ .../tests/unit/v2/test_cli_workbooks.py | 11 ++--- .../tests/unit/v2/test_cli_workflows.py | 11 ++--- 5 files changed, 80 insertions(+), 26 deletions(-) diff --git a/mistralclient/commands/v2/workbooks.py b/mistralclient/commands/v2/workbooks.py index 8b9edccc..37434ce3 100644 --- a/mistralclient/commands/v2/workbooks.py +++ b/mistralclient/commands/v2/workbooks.py @@ -21,7 +21,6 @@ from cliff import show from mistralclient.api.v2 import workbooks from mistralclient.commands.v2 import base -from mistralclient import exceptions as exc from mistralclient import utils @@ -166,6 +165,20 @@ class GetDefinition(command.Command): class Validate(show.ShowOne): """Validate workbook.""" + def _format(self, result=None): + columns = ('Valid', 'Error') + + if result: + data = (result.get('valid'),) + if not result.get('error'): + data += (None,) + else: + data += (result.get('error'),) + else: + data = (tuple('' for _ in range(len(columns))),) + + return columns, data + def get_parser(self, prog_name): parser = super(Validate, self).get_parser(prog_name) @@ -181,8 +194,4 @@ class Validate(show.ShowOne): result = workbooks.WorkbookManager(self.app.client).validate( parsed_args.definition.read()) - if not result.get('valid', None): - raise exc.MistralClientException( - result.get('error', 'Unknown exception.')) - - return tuple(), tuple() + return self._format(result) diff --git a/mistralclient/commands/v2/workflows.py b/mistralclient/commands/v2/workflows.py index 4539e60a..8ed7da69 100644 --- a/mistralclient/commands/v2/workflows.py +++ b/mistralclient/commands/v2/workflows.py @@ -21,7 +21,6 @@ from cliff import show from mistralclient.api.v2 import workflows from mistralclient.commands.v2 import base -from mistralclient import exceptions as exc from mistralclient import utils @@ -194,6 +193,20 @@ class GetDefinition(command.Command): class Validate(show.ShowOne): """Validate workflow.""" + def _format(self, result=None): + columns = ('Valid', 'Error') + + if result: + data = (result.get('valid'),) + if not result.get('error'): + data += (None,) + else: + data += (result.get('error'),) + else: + data = (tuple('' for _ in range(len(columns))),) + + return columns, data + def get_parser(self, prog_name): parser = super(Validate, self).get_parser(prog_name) @@ -209,8 +222,4 @@ class Validate(show.ShowOne): result = workflows.WorkflowManager(self.app.client).validate( parsed_args.definition.read()) - if not result.get('valid', None): - raise exc.MistralClientException( - result.get('error', 'Unknown exception.')) - - return tuple(), tuple() + return self._format(result) diff --git a/mistralclient/tests/functional/cli/v2/cli_tests_v2.py b/mistralclient/tests/functional/cli/v2/cli_tests_v2.py index 77375139..2415d32c 100644 --- a/mistralclient/tests/functional/cli/v2/cli_tests_v2.py +++ b/mistralclient/tests/functional/cli/v2/cli_tests_v2.py @@ -183,6 +183,27 @@ class WorkbookCLITests(base_v2.MistralClientTestBase): 'workbook-get-definition', params=wb_name) self.assertNotIn('404 Not Found', definition) + def test_workbook_validate_with_valid_def(self): + wb = self.mistral_admin( + 'workbook-validate', params=self.wb_def) + wb_valid = self.get_value_of_field(wb, 'Valid') + wb_error = self.get_value_of_field(wb, 'Error') + + self.assertEqual('True', wb_valid) + self.assertEqual('None', wb_error) + + def test_workbook_validate_with_invalid_def(self): + self.create_file('wb.yaml', + 'name: wb\n') + wb = self.mistral_admin( + 'workbook-validate', params='wb.yaml') + + wb_valid = self.get_value_of_field(wb, 'Valid') + wb_error = self.get_value_of_field(wb, 'Error') + + self.assertEqual('False', wb_valid) + self.assertNotEqual('None', wb_error) + class WorkflowCLITests(base_v2.MistralClientTestBase): """Test suite checks commands to work with workflows.""" @@ -269,6 +290,27 @@ class WorkflowCLITests(base_v2.MistralClientTestBase): 'workflow-get-definition', params=wf_name) self.assertNotIn('404 Not Found', definition) + def test_workflow_validate_with_valid_def(self): + wf = self.mistral_admin( + 'workflow-validate', params=self.wf_def) + wf_valid = self.get_value_of_field(wf, 'Valid') + wf_error = self.get_value_of_field(wf, 'Error') + + self.assertEqual('True', wf_valid) + self.assertEqual('None', wf_error) + + def test_workflow_validate_with_invalid_def(self): + self.create_file('wf.yaml', + 'name: wf\n') + wf = self.mistral_admin( + 'workflow-validate', params='wf.yaml') + + wf_valid = self.get_value_of_field(wf, 'Valid') + wf_error = self.get_value_of_field(wf, 'Error') + + self.assertEqual('False', wf_valid) + self.assertNotEqual('None', wf_error) + class ExecutionCLITests(base_v2.MistralClientTestBase): """Test suite checks commands to work with executions.""" diff --git a/mistralclient/tests/unit/v2/test_cli_workbooks.py b/mistralclient/tests/unit/v2/test_cli_workbooks.py index 7fe3fbf7..6234d490 100644 --- a/mistralclient/tests/unit/v2/test_cli_workbooks.py +++ b/mistralclient/tests/unit/v2/test_cli_workbooks.py @@ -17,7 +17,6 @@ import mock from mistralclient.api.v2 import workbooks from mistralclient.commands.v2 import workbooks as workbook_cmd -from mistralclient import exceptions as exc from mistralclient.tests.unit import base @@ -117,8 +116,7 @@ class TestCLIWorkbooksV2(base.BaseCommandTest): result = self.call(workbook_cmd.Validate, app_args=['wb.yaml']) - self.assertEqual(result[0], tuple()) - self.assertEqual(result[1], tuple()) + self.assertEqual(result[1], (True, None)) @mock.patch('argparse.open', create=True) @mock.patch('mistralclient.api.v2.workbooks.WorkbookManager.validate') @@ -126,7 +124,6 @@ class TestCLIWorkbooksV2(base.BaseCommandTest): mock.return_value = {'valid': False, 'error': 'Invalid DSL...'} mock_open.return_value = mock.MagicMock(spec=open) - self.assertRaises(exc.MistralClientException, - self.call, - workbook_cmd.Validate, - app_args=['wb.yaml']) + result = self.call(workbook_cmd.Validate, app_args=['wb.yaml']) + + self.assertEqual(result[1], (False, 'Invalid DSL...')) diff --git a/mistralclient/tests/unit/v2/test_cli_workflows.py b/mistralclient/tests/unit/v2/test_cli_workflows.py index f75389d5..02de23d9 100644 --- a/mistralclient/tests/unit/v2/test_cli_workflows.py +++ b/mistralclient/tests/unit/v2/test_cli_workflows.py @@ -19,7 +19,6 @@ import six from mistralclient.api.v2 import workflows from mistralclient.commands.v2 import base as cmd_base from mistralclient.commands.v2 import workflows as workflow_cmd -from mistralclient import exceptions as exc from mistralclient.tests.unit import base @@ -160,8 +159,7 @@ class TestCLIWorkflowsV2(base.BaseCommandTest): result = self.call(workflow_cmd.Validate, app_args=['wf.yaml']) - self.assertEqual(result[0], tuple()) - self.assertEqual(result[1], tuple()) + self.assertEqual(result[1], (True, None)) @mock.patch('argparse.open', create=True) @mock.patch('mistralclient.api.v2.workflows.WorkflowManager.validate') @@ -169,7 +167,6 @@ class TestCLIWorkflowsV2(base.BaseCommandTest): mock.return_value = {'valid': False, 'error': 'Invalid DSL...'} mock_open.return_value = mock.MagicMock(spec=open) - self.assertRaises(exc.MistralClientException, - self.call, - workflow_cmd.Validate, - app_args=['wf.yaml']) + result = self.call(workflow_cmd.Validate, app_args=['wf.yaml']) + + self.assertEqual(result[1], (False, 'Invalid DSL...'))