From f98bf9adbb1ff57de1c2344c276f88cb94be274d Mon Sep 17 00:00:00 2001 From: Bruno Goncalves Date: Oct 04 2019 14:49:44 +0000 Subject: basic role: stdout and stderr in a single file fix https://pagure.io/fedora-ci/general/issue/57 --- diff --git a/roles/standard-test-basic/files/run-basic-test b/roles/standard-test-basic/files/run-basic-test index ef89791..8f456ac 100755 --- a/roles/standard-test-basic/files/run-basic-test +++ b/roles/standard-test-basic/files/run-basic-test @@ -142,7 +142,7 @@ clean_exit() { " result: $result" \ " logs:" \ >> "$results" - for log in "$logfile_stdout" "$logfile_stderr"; do + for log in "$logfile"; do if [ -f "$log" ]; then local prefixed_log="$STR_ARTIFACTS_DIR/${status}-$(basename $log)" mv -f "$log" "$prefixed_log" @@ -165,11 +165,9 @@ trap clean_exit SIGINT SIGTERM SIGABRT EXIT export PATH="$PATH:$STR_WORKDIR" mkdir -p "$STR_ARTIFACTS_DIR" # add str_ prefix to test logs -logfile_stdout="$STR_ARTIFACTS_DIR/$(echo "str_$STR_TEST_NAME" | sed -e 's/\//-/g').log" -logfile_stderr="$STR_ARTIFACTS_DIR/$(echo "str_$STR_TEST_NAME" | sed -e 's/\//-/g')-err.log" -logfile_stdout="$(realpath "$logfile_stdout")" -logfile_stderr="$(realpath "$logfile_stderr")" -exec 3>&1 4>&2 1> >(tee -a "$logfile_stdout" >&3) 2> >(tee -a "$logfile_stderr" >&4) +logfile="$STR_ARTIFACTS_DIR/$(echo "str_$STR_TEST_NAME" | sed -e 's/\//-/g').log" +logfile="$(realpath "$logfile")" +exec > >(tee -a "$logfile") 2>&1 cd "$STR_WORKDIR" # Purpose to spawn new bash is to ignore -efu setting for current shell # Test command: run-basic-test -w wodir -c 'false; echo 123; echo 333 >&2; touch "123 123"; exit 43' -t my_test -a logs -v diff --git a/tests/basic.yml b/tests/basic.yml index 12adf16..cc0d43f 100644 --- a/tests/basic.yml +++ b/tests/basic.yml @@ -126,3 +126,22 @@ delegate_to: localhost - import_tasks: shared-tasks/artifacts_test_env.yml - import_tasks: shared-tasks/artifacts_test_runner.yml + +# Make sure the role outputs stderr and stdout correctly +- hosts: localhost + tags: + - atomic + - classic + - container + roles: + - role: standard-test-basic + tests: + - test-basic-stdout-stderr + tasks: + - name: "Check if {{artifacts}}/PASS-str_test-basic-stdout-stderr.log was created properly" + shell: > + diff {{artifacts}}/PASS-str_test-basic-stdout-stderr.log + {{playbook_dir}}/test-basic-stdout-stderr/expected_output.txt + 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-stdout-stderr/expected_output.txt b/tests/test-basic-stdout-stderr/expected_output.txt new file mode 100644 index 0000000..0cb05d6 --- /dev/null +++ b/tests/test-basic-stdout-stderr/expected_output.txt @@ -0,0 +1,7 @@ +error1 +pass1 +error2 +pass2 +pass3 +error3 +Run test 'test-basic-stdout-stderr': done. Test's exit code: 0 diff --git a/tests/test-basic-stdout-stderr/runtest.sh b/tests/test-basic-stdout-stderr/runtest.sh new file mode 100644 index 0000000..aa89515 --- /dev/null +++ b/tests/test-basic-stdout-stderr/runtest.sh @@ -0,0 +1,7 @@ +#!/usr/bin/sh +>&2 echo "error1" +echo pass1 +>&2 echo "error2" +echo pass2 +echo pass3 +>&2 echo "error3"