Fix missing error handling during pegleg render
1. Currently Pegleg render does not show error output when deckhand produce error exception. 2. Added unit test case for this PS Change-Id: If1699545dfc539dc09cea449bd2a48c888294c44
This commit is contained in:
parent
cc000c66ab
commit
f4dd4f7db6
|
@ -79,6 +79,14 @@ def render(site_name, output_stream):
|
|||
|
||||
rendered_documents, errors = util.deckhand.deckhand_render(
|
||||
documents=documents)
|
||||
err_msg = ''
|
||||
if errors:
|
||||
for err in errors:
|
||||
if isinstance(err, tuple) and len(err) > 1:
|
||||
err_msg += ': '.join(err) + '\n'
|
||||
else:
|
||||
err_msg += str(err) + '\n'
|
||||
raise click.ClickException(err_msg)
|
||||
yaml.dump_all(rendered_documents, output_stream, default_flow_style=False)
|
||||
|
||||
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
import mock
|
||||
|
||||
from pegleg.engine import lint
|
||||
from pegleg.engine.errorcodes import DECKHAND_DUPLICATE_SCHEMA
|
||||
from pegleg.engine.errorcodes import DECKHAND_RENDER_EXCEPTION
|
||||
from pegleg.engine.util import deckhand
|
||||
from pegleg.engine.util import files
|
||||
from tests.unit.fixtures import create_tmp_deployment_files
|
||||
|
||||
|
@ -150,3 +153,82 @@ def test_verify_deckhand_render_site_documents_separately(
|
|||
assert sorted(
|
||||
expected_documents, key=sort_func) == sorted(
|
||||
actual_documents, key=sort_func)
|
||||
|
||||
|
||||
@mock.patch('pegleg.engine.util.deckhand.deckhand_render')
|
||||
def test_verify_deckhand_render_error_handling(mock_render):
|
||||
"""
|
||||
Verifying deckhand render error handling.
|
||||
|
||||
Parameters:
|
||||
mock_render: Mock render object.
|
||||
"""
|
||||
exp_dict = {
|
||||
'exp1':
|
||||
DECKHAND_DUPLICATE_SCHEMA + ": Duplicate schema specified.\n",
|
||||
'exp2':
|
||||
DECKHAND_RENDER_EXCEPTION +
|
||||
": An unknown Deckhand exception occurred while trying to render documents\n",
|
||||
'exp3':
|
||||
"Generic Error\n"
|
||||
}
|
||||
# No exception raised
|
||||
mock_render.return_value = _return_deckhand_render_errors()
|
||||
errors = deckhand.deckhand_render()
|
||||
assert errors == []
|
||||
# check errors object type
|
||||
mock_render.return_value = _return_deckhand_render_errors(1)
|
||||
errors = deckhand.deckhand_render()
|
||||
assert isinstance(errors, list)
|
||||
# check single exception handling
|
||||
assert _deckhand_render_exception_msg(errors) == exp_dict['exp1']
|
||||
# check multiple exception with tuple type
|
||||
mock_render.return_value = _return_deckhand_render_errors(2)
|
||||
errors = deckhand.deckhand_render()
|
||||
assert _deckhand_render_exception_msg(
|
||||
errors) == exp_dict['exp1'] + exp_dict['exp2']
|
||||
# check multiple exception with mixed type
|
||||
mock_render.return_value = _return_deckhand_render_errors(3)
|
||||
errors = deckhand.deckhand_render()
|
||||
assert _deckhand_render_exception_msg(
|
||||
errors) == exp_dict['exp1'] + exp_dict['exp2'] + exp_dict['exp3']
|
||||
|
||||
|
||||
def _deckhand_render_exception_msg(errors):
|
||||
"""
|
||||
Helper function to create deckhand render exception msg.
|
||||
|
||||
Parameters:
|
||||
errors: List of errors provided by deckhand render.
|
||||
Returns:
|
||||
string: formulated error message.
|
||||
"""
|
||||
err_msg = ''
|
||||
for err in errors:
|
||||
if isinstance(err, tuple) and len(err) > 1:
|
||||
err_msg += ': '.join(err) + '\n'
|
||||
else:
|
||||
err_msg += str(err) + '\n'
|
||||
return err_msg
|
||||
|
||||
|
||||
def _return_deckhand_render_errors(error_count=0):
|
||||
"""
|
||||
Helper function to mock deckhand render errors.
|
||||
|
||||
Parameters:
|
||||
error_count: Number of mock errors to return.
|
||||
Returns:
|
||||
List: List of mock errors as per error_count.
|
||||
"""
|
||||
errors = []
|
||||
if error_count >= 1:
|
||||
errors.append((DECKHAND_DUPLICATE_SCHEMA,
|
||||
'Duplicate schema specified.'))
|
||||
if error_count >= 2:
|
||||
errors.append((DECKHAND_RENDER_EXCEPTION,
|
||||
'An unknown Deckhand exception occurred while '
|
||||
'trying to render documents'))
|
||||
if error_count >= 3:
|
||||
errors.append(('Generic Error'))
|
||||
return errors
|
||||
|
|
Loading…
Reference in New Issue