1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

ISSUE 25470 - junit report failure on changes

This commit provides an environment option to change the behaviour so
that it's possible to declare any changes shoudl be considered a junit
failure.

This is useful when carrying out idempotent testing to ensure that
multiple runs are safe and any changes should be considered a test
failure.

In a CI test of an ansible role the practice would be to run the role
once without this to configure the test system, and tehn to run a second
time including this environment vairable so that the CI engine
processing the junit report recognise any changes to be a test fail.
This commit is contained in:
James 2017-06-15 12:15:38 +01:00 committed by Toshio Kuratomi
parent e7763204e9
commit fc274bda8a
2 changed files with 11 additions and 1 deletions

View file

@ -115,6 +115,7 @@ Ansible Changes By Release
* Update ipaddr Jinja filters to replace existing non RFC compliant ones. Added additional filters for easier use * Update ipaddr Jinja filters to replace existing non RFC compliant ones. Added additional filters for easier use
of handling IP addresses. (PR# 26566) of handling IP addresses. (PR# 26566)
* datetime filter updated to use default format of datetime.datetime (ISO8601) * datetime filter updated to use default format of datetime.datetime (ISO8601)
* The junit plugin now has an option to report a junit test failure on changes for idempotent testing.
#### New Callbacks: #### New Callbacks:
- full_skip - full_skip

View file

@ -58,6 +58,8 @@ class CallbackModule(CallbackBase):
Default: ~/.ansible.log Default: ~/.ansible.log
JUNIT_TASK_CLASS (optional): Configure the output to be one class per yaml file JUNIT_TASK_CLASS (optional): Configure the output to be one class per yaml file
Default: False Default: False
JUNIT_FAIL_ON_CHANGE (optional): Consider any tasks reporting "changed" as a junit test failure
Default: False
Requires: Requires:
junit_xml junit_xml
@ -74,6 +76,7 @@ class CallbackModule(CallbackBase):
self._output_dir = os.getenv('JUNIT_OUTPUT_DIR', os.path.expanduser('~/.ansible.log')) self._output_dir = os.getenv('JUNIT_OUTPUT_DIR', os.path.expanduser('~/.ansible.log'))
self._task_class = os.getenv('JUNIT_TASK_CLASS', 'False').lower() self._task_class = os.getenv('JUNIT_TASK_CLASS', 'False').lower()
self._fail_on_change = os.getenv('JUNIT_FAIL_ON_CHANGE', 'False').lower()
self._playbook_path = None self._playbook_path = None
self._playbook_name = None self._playbook_name = None
self._play_name = None self._play_name = None
@ -129,6 +132,9 @@ class CallbackModule(CallbackBase):
task_data = self._task_data[task_uuid] task_data = self._task_data[task_uuid]
if self._fail_on_change == 'true' and status == 'changed':
status = 'failed'
if status == 'failed' and 'EXPECTED FAILURE' in task_data.name: if status == 'failed' and 'EXPECTED FAILURE' in task_data.name:
status = 'ok' status = 'ok'
@ -224,7 +230,10 @@ class CallbackModule(CallbackBase):
self._finish_task('failed', result) self._finish_task('failed', result)
def v2_runner_on_ok(self, result): def v2_runner_on_ok(self, result):
self._finish_task('ok', result) if result._result.get('changed', False):
self._finish_task('changed', result)
else:
self._finish_task('ok', result)
def v2_runner_on_skipped(self, result): def v2_runner_on_skipped(self, result):
self._finish_task('skipped', result) self._finish_task('skipped', result)