zuul-jobs/test-playbooks/base-roles/fetch-subunit-output.yaml
Luigi Toscano ab8f9fc403 fetch-subunit-output: collect additional subunits (2nd try)
In addition to the main subunit file from zuul_work_dir,
collect the subunit files from the elements (directories)
of the zuul_additional_subunit_dirs list.

The default behavior is unchanged.

While the documentation of this role states that zuul_work_dir
contains an absolute path, this is not always true.
So make sure to not make any assumption about zuul_work_dir
in order to not fail spectacularly as it happened with the
previous patch[0].

Add also some tests for the role: both the basic case
and with an additional test directory.

[0] https://review.opendev.org/673885

Change-Id: Iabf2e0cf6d86e36a174778367186bbd39a65c3dd
2019-10-17 00:42:28 +02:00

128 lines
4.2 KiB
YAML

- name: Run the fetch-subunit-output role
hosts: all
vars:
tests_data:
main:
directory: "{{ zuul_work_dir }}"
test_pattern: "WorkingTest.test_success"
secondary:
directory: "/var/tmp/extratests"
test_pattern: "FailingTest.test_failure"
pre_tasks:
# Required packages; install them into a .tox path
# to cover the find-*.sh scripts in the role a bit more.
- name: Install stestr and subunit-output
pip:
name:
- stestr>=2.0.0,<2.6.0
- python-subunit
virtualenv: "{{ zuul_work_dir }}/.tox/utests/"
- name: Ensure that the test directories exists
file:
name: "{{ item.value.directory }}"
state: directory
loop: "{{ tests_data|dict2items }}"
- name: Copy the test files on all directories
copy:
src: "subunit_tests"
dest: "{{ item.value.directory }}"
loop: "{{ tests_data|dict2items }}"
- name: Prepare the test results on all directories
shell: |
. {{ zuul_work_dir }}/.tox/utests/bin/activate
stestr init
stestr run --test-path subunit_tests {{ item.value.test_pattern }}
args:
chdir: "{{ item.value.directory }}"
ignore_errors: yes
loop: "{{ tests_data|dict2items }}"
roles:
- role: fetch-subunit-output
post_tasks:
- name: Check that the testrepository file has been pulled
delegate_to: localhost
file:
path: "{{ zuul.executor.log_root }}/testrepository.subunit.gz"
state: file
register: local_subunit_file
- name: Check that HTML test result file has been pulled
delegate_to: localhost
file:
path: "{{ zuul.executor.log_root }}/testr_results.html.gz"
state: file
register: local_html_test_results
- name: Validate that files were pulled correctly
assert:
that:
- local_subunit_file is not changed
- local_subunit_file is succeeded
- local_html_test_results is not changed
- local_html_test_results is succeeded
# only one subunit file; the failed result should be hidden
- name: Check the content of the HTML file
delegate_to: localhost
shell: |
GLOBAL_RESULT=1
zgrep -q -E 'subunit_tests.test_working.WorkingTest.test_success$' \
{{ zuul.executor.log_root }}/testr_results.html.gz
T1=$?
zgrep -q -E 'subunit_tests.test_failing.FailingTest.test_failure.*_StringException:' \
{{ zuul.executor.log_root }}/testr_results.html.gz
T2=$?
if [ ${T1} -eq 0 ] && [ ${T2} -ne 0 ]; then
GLOBAL_RESULT=0
fi
exit $GLOBAL_RESULT
# The following test(s) require(s) the previous playbook
- name: Run the fetch-subunit-output role with multiple subunits
hosts: all
roles:
- role: fetch-subunit-output
zuul_additional_subunit_dirs:
- "/var/tmp/extratests"
post_tasks:
- name: Check that the testrepository file has been pulled
delegate_to: localhost
file:
path: "{{ zuul.executor.log_root }}/testrepository.subunit.gz"
state: file
register: local_subunit_file
- name: Check that HTML test result file has been pulled
delegate_to: localhost
file:
path: "{{ zuul.executor.log_root }}/testr_results.html.gz"
state: file
register: local_html_test_results
- name: Validate that files were pulled correctly
assert:
that:
- local_subunit_file is not changed
- local_subunit_file is succeeded
- local_html_test_results is not changed
- local_html_test_results is succeeded
- name: Check the content of the HTML file
delegate_to: localhost
shell: |
GLOBAL_RESULT=1
zgrep -q -E 'subunit_tests.test_working.WorkingTest.test_success$' \
{{ zuul.executor.log_root }}/testr_results.html.gz
T1=$?
zgrep -q -E 'subunit_tests.test_failing.FailingTest.test_failure.*_StringException:' \
{{ zuul.executor.log_root }}/testr_results.html.gz
T2=$?
if [ ${T1} -eq 0 ] && [ ${T2} -eq 0 ]; then
GLOBAL_RESULT=0
fi
exit $GLOBAL_RESULT