diff --git a/.gitlab-ci/common/init-stage2.sh b/.gitlab-ci/common/init-stage2.sh index 2f6f498c9d6..ff73ec8a06f 100755 --- a/.gitlab-ci/common/init-stage2.sh +++ b/.gitlab-ci/common/init-stage2.sh @@ -157,5 +157,9 @@ fi # We still need to echo the hwci: mesa message, as some scripts rely on it, such # as the python ones inside the bare-metal folder [ ${EXIT_CODE} -eq 0 ] && RESULT=pass + +set +x echo "hwci: mesa: $RESULT" +# Sleep a bit to avoid kernel dump message interleave from LAVA ENDTC signal +sleep 1 exit $EXIT_CODE diff --git a/.gitlab-ci/lava/lava_job_submitter.py b/.gitlab-ci/lava/lava_job_submitter.py index f9d4d89b893..9eba34c8820 100755 --- a/.gitlab-ci/lava/lava_job_submitter.py +++ b/.gitlab-ci/lava/lava_job_submitter.py @@ -313,7 +313,7 @@ class LAVAJob: """ log_lines = [l["msg"] for l in lava_lines if l["lvl"] == "target"] for line in log_lines: - if result := re.search(r"hwci: mesa: (\S*)", line): + if result := re.search(r"hwci: mesa: (pass|fail)", line): self.is_finished = True self.status = result.group(1) color = LAVAJob.color_status_map.get(self.status, CONSOLE_LOG_COLOR_RED) diff --git a/.gitlab-ci/tests/test_lava_job_submitter.py b/.gitlab-ci/tests/test_lava_job_submitter.py index 76a43c33eff..9e010b46b14 100644 --- a/.gitlab-ci/tests/test_lava_job_submitter.py +++ b/.gitlab-ci/tests/test_lava_job_submitter.py @@ -421,6 +421,7 @@ GITLAB_SECTION_MANGLED_SCENARIOS = { ), } + @pytest.mark.parametrize( "message, fixed_message", GITLAB_SECTION_MANGLED_SCENARIOS.values(), @@ -464,3 +465,51 @@ LAVA_DEBUG_SPAM_MESSAGES = { ) def test_filter_debug_messages(message, expectation): assert filter_debug_messages(message) == expectation + + +LAVA_RESULT_LOG_SCENARIOS = { + # the submitter should accept xtrace logs + "Bash xtrace echo with kmsg interleaving": ( + create_lava_yaml_msg( + msg="echo hwci: mesa: pass[ 737.673352] ", + lvl="target", + ), + "pass", + ), + # the submitter should accept xtrace logs + "kmsg result print": ( + create_lava_yaml_msg( + msg="[ 737.673352] hwci: mesa: pass", + lvl="target", + ), + "pass", + ), + # if the job result echo has a very bad luck, it still can be interleaved + # with kmsg + "echo output with kmsg interleaving": ( + create_lava_yaml_msg( + msg="hwci: mesa: pass[ 737.673352] ", + lvl="target", + ), + "pass", + ), + "fail case": ( + create_lava_yaml_msg( + msg="hwci: mesa: fail", + lvl="target", + ), + "fail", + ), +} + + +@pytest.mark.parametrize( + "message, expectation", + LAVA_RESULT_LOG_SCENARIOS.values(), + ids=LAVA_RESULT_LOG_SCENARIOS.keys(), +) +def test_filter_debug_messages(message, expectation, mock_proxy): + job = LAVAJob(mock_proxy(), "") + job.parse_job_result_from_log([message]) + + assert job.status == expectation