From 3cdeea1627ab4ec259586d96c4ba7ba2e682eac2 Mon Sep 17 00:00:00 2001 From: Bruno Goncalves Date: Jul 08 2019 15:27:39 +0000 Subject: support to save files on basic role fix https://pagure.io/standard-test-roles/issue/365 --- diff --git a/roles/standard-test-basic/README.md b/roles/standard-test-basic/README.md index 5675da8..ec321e3 100644 --- a/roles/standard-test-basic/README.md +++ b/roles/standard-test-basic/README.md @@ -23,6 +23,9 @@ to run testing. You can redefine the following variables in * **dir**: test directory. default: is the test name * **run**: command to run the test. default: ./runtest.sh * **timeout**: abort test case after this time. More details on [timeout][1]. default: 0 + * **save-files**: List of extra files to save to artifacts. + Path to the file is relative to test directory. The files are saved to + artifacts under test name directory. default: None Example usage: diff --git a/roles/standard-test-basic/files/run-basic-test b/roles/standard-test-basic/files/run-basic-test index c8e29eb..ef89791 100755 --- a/roles/standard-test-basic/files/run-basic-test +++ b/roles/standard-test-basic/files/run-basic-test @@ -25,6 +25,7 @@ Options: -t, --testname name of the test --timeout test timeout -c, --cmd shell command to run the test + --save-files list of files to be saved to artifacts, files are separated by comma. Path is relative to workdir EOF } @@ -39,9 +40,10 @@ STR_WORKDIR="${STR_WORKDIR:-}" STR_TEST_NAME="${STR_TEST_NAME:-}" STR_ARTIFACTS_DIR="${STR_ARTIFACTS_DIR:-/tmp}" STR_TIMEOUT="${STR_TIMEOUT:-0}" +STR_SAVE_FILES="${STR_SAVE_FILES:-}" # http://wiki.bash-hackers.org/howto/getopts_tutorial -opt=$(getopt -n "$0" --options "hvt:w:a:c:" --longoptions "help,verbose,cmd:,testname:,workdir:,artifactsdir:,timeout:" -- "$@") +opt=$(getopt -n "$0" --options "hvt:w:a:c:" --longoptions "help,verbose,cmd:,testname:,workdir:,artifactsdir:,timeout:,save-files:" -- "$@") eval set -- "$opt" while [[ $# -gt 0 ]]; do case "$1" in @@ -65,6 +67,10 @@ while [[ $# -gt 0 ]]; do STR_TIMEOUT="$2" shift 2 ;; + --save-files) + STR_SAVE_FILES=$(echo "$2" | tr "," " ") + shift 2 + ;; -v|--verbose) DEBUG="-v" shift @@ -143,6 +149,15 @@ clean_exit() { echo " - $(basename $prefixed_log)" >> "$results" fi done + for file in $STR_SAVE_FILES; do + if [[ ! -d $STR_ARTIFACTS_DIR/$STR_TEST_NAME ]]; then + mkdir -p $STR_ARTIFACTS_DIR/$STR_TEST_NAME + fi + set +f # allow expand wildcards on file name, like output*.log + # if for some reason file doesn't exist, just ignore it + cp -f $STR_WORKDIR/$file $STR_ARTIFACTS_DIR/$STR_TEST_NAME || true + set -f + done exit 0 } trap clean_exit SIGINT SIGTERM SIGABRT EXIT diff --git a/roles/standard-test-basic/tasks/main.yml b/roles/standard-test-basic/tasks/main.yml index 86948b9..50075e1 100644 --- a/roles/standard-test-basic/tasks/main.yml +++ b/roles/standard-test-basic/tasks/main.yml @@ -19,7 +19,8 @@ --artifactsdir "{{ remote_artifacts }}" \ --test "{{ item if item.keys is not defined else (item.keys()|list)[0] }}" \ --timeout "{{ '0' if item.keys is not defined else item[(item.keys()|list)[0]]['timeout']|default('0') }}" \ - --cmd "{{ './runtest.sh' if item.keys is not defined else item[(item.keys()|list)[0]]['run']|default('./runtest.sh') | regex_replace('\\', '\\\\') | regex_replace('\"', '\"') | regex_replace('\$', '\\$') }}" + --cmd "{{ './runtest.sh' if item.keys is not defined else item[(item.keys()|list)[0]]['run']|default('./runtest.sh') | regex_replace('\\', '\\\\') | regex_replace('\"', '\"') | regex_replace('\$', '\\$') }}" \ + --save-files "{{ '' if item.keys is not defined else item[(item.keys()|list)[0]]['save-files']|default('') | join(',') | regex_replace('\\', '\\\\') | regex_replace('\"', '\"') | regex_replace('\$', '\\$') }}" with_items: - "{{ tests }}" diff --git a/tests/basic.yml b/tests/basic.yml index b70b3ac..c40abce 100644 --- a/tests/basic.yml +++ b/tests/basic.yml @@ -91,3 +91,36 @@ - import_tasks: shared-tasks/verify_error_test.yml - import_tasks: shared-tasks/artifacts_test_env.yml - import_tasks: shared-tasks/artifacts_test_runner.yml + +# Make sure the role passes on timeout +- hosts: localhost + tags: + - atomic + - classic + - container + roles: + - role: standard-test-basic + tests: + - test-basic-save-files: + run: echo "file1" > file1.log; echo "file2" > file2.log + save-files: + - file*.log + - basic-save-files-dir: + dir: test-basic-save-files-dir + save-files: + - logs/newfile*.log + tasks: + - name: "Check if {{artifacts}}/test-basic-save-files/file1.log was created properly on test runner" + shell: "ls {{artifacts}}/test-basic-save-files/file1.log" + delegate_to: localhost + - name: "Check if {{artifacts}}/test-basic-save-files/file2.log was created properly on test runner" + shell: "ls {{artifacts}}/test-basic-save-files/file2.log" + delegate_to: localhost + - name: "Check if {{artifacts}}/basic-save-files-dir/newfile1.log was created properly on test runner" + shell: "ls {{artifacts}}/basic-save-files-dir/newfile1.log" + delegate_to: localhost + - name: "Check if {{artifacts}}/basic-save-files-dir/newfile2.log was created properly on test runner" + shell: "ls {{artifacts}}/basic-save-files-dir/newfile2.log" + delegate_to: localhost + - import_tasks: shared-tasks/artifacts_test_env.yml + - import_tasks: shared-tasks/artifacts_test_runner.yml diff --git a/tests/test-basic-save-files-dir/runtest.sh b/tests/test-basic-save-files-dir/runtest.sh new file mode 100644 index 0000000..6a0a743 --- /dev/null +++ b/tests/test-basic-save-files-dir/runtest.sh @@ -0,0 +1,7 @@ +#!/usr/bin/bash + +mkdir logs + +echo "newfile1" > logs/newfile1.log +echo "newfile2" > logs/newfile2.log +