From 861012ba50c5ca4c71a844aecedcc64dd083af4b Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Thu, 19 Mar 2026 16:14:06 +0100 Subject: [PATCH 01/16] add renderer sanitizer tests as scheduled tests in basop --- main-basop.yml | 142 ++++++++++++++++++------------------------------- 1 file changed, 52 insertions(+), 90 deletions(-) diff --git a/main-basop.yml b/main-basop.yml index 142c30b..7c79fb8 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -275,6 +275,24 @@ workflow: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' when: never +.rules-pytest-msan-on-schedule: + rules: + - if: $CI_PIPELINE_SOURCE == 'push' + when: never + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + when: never + - if: $CI_PIPELINE_SOURCE == 'schedule' && $IVAS_PYTEST_MSAN + - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == "sanitizer" + +.rules-pytest-asan-usan-on-schedule: + rules: + - if: $CI_PIPELINE_SOURCE == 'push' + when: never + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + when: never + - if: $CI_PIPELINE_SOURCE == 'schedule' && $IVAS_PYTEST_ASAN_USAN + - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == "sanitizer" + # --------------------------------------------------------------- # Job templates # --------------------------------------------------------------- @@ -1492,95 +1510,57 @@ renderer-smoke-test: junit: - report-junit.xml -# from float -# TODO: turn into scheduled job -.renderer-asan: +.renderer-sanitizer-job: extends: - .test-job-linux - needs: ["build-codec-linux-clang-cmake"] + needs: ["build-codec-linux-clang-make"] stage: test - script: - - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/print-common-info.sh - - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/basop/update-scripts-repo.sh - - make clean - - make -j 2>&1 >$MAKE_BUILD_LOG_FILE_DEFAULT - - testcase_timeout=180 - - python3 -m pytest -q -n auto --tb=no --junit-xml=report-junit.xml tests/renderer_short/test_renderer.py --testcase_timeout=$testcase_timeout - + timeout: "300 minutes" artifacts: - name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results" + name: "$CI_JOB_NAME--sha-$CI_COMMIT_SHORT_SHA--results" expire_in: 1 week when: always paths: - report-junit.xml + - report.html + - errors.csv - $MAKE_BUILD_LOG_FILE_DEFAULT - expose_as: "renderer asan pytest results" reports: junit: - report-junit.xml - -# from float -# TODO: turn into scheduled job -.renderer-msan: - extends: - - .test-job-linux - needs: ["build-codec-linux-clang-cmake"] - stage: test - tags: - - ivas-linux script: - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/print-common-info.sh - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/basop/update-scripts-repo.sh + + - python3 scripts/basop_create_ignorelist_for_ubsan.py + - make clean - - make -j 2>&1 >$MAKE_BUILD_LOG_FILE_DEFAULT - - testcase_timeout=180 - - python3 -m pytest -q -n auto --tb=no --junit-xml=report-junit.xml tests/renderer_short/test_renderer.py --testcase_timeout=$testcase_timeout + - make -j CLANG=$CLANG_NUM IGNORELIST=1 2>&1 >$MAKE_BUILD_LOG_FILE_DEFAULT - artifacts: - name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results" - expire_in: 1 week - when: always - paths: - - report-junit.xml - - $MAKE_BUILD_LOG_FILE_DEFAULT - expose_as: "renderer msan pytest results" - reports: - junit: - - report-junit.xml + - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1,log_path=usan_log_catchall python3 -m pytest -q -n auto --tb=no --log-level=INFO --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/renderer_short/test_renderer.py -# from float -# TODO: turn into scheduled job -# NOTE: disabled for now until existing bug is fixed -.renderer-usan: + - python3 scripts/parse_sanitizer_errors_from_xml_report.py report-junit.xml errors.csv + +renderer-msan: extends: - - .test-job-linux - needs: ["build-codec-linux-clang-cmake"] - stage: test - tags: - - ivas-linux - script: - - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/print-common-info.sh - - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/basop/update-scripts-repo.sh - - python3 scripts/basop_create_ignorelist_for_ubsan.py - - make -j CLANG=3 IGNORELIST=1 2>&1 >$MAKE_BUILD_LOG_FILE_DEFAULT - - testcase_timeout=180 - - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1,log_path=usan_log_catchall python3 -m pytest -q -n auto --tb=no --junit-xml=report-junit.xml tests/renderer_short/test_renderer.py --testcase_timeout=$testcase_timeout - - grep_exit_code=0 - - touch usan_log_empty # Creates an empty file, this is to avoid "grep: usan_log_*: No such file or directory" in case no USAN failures are reported from pytest - - grep UndefinedBehaviorSanitizer usan_log_* || grep_exit_code=$? - - if [ $grep_exit_code != 1 ] ; then echo "Run errors in test_renderer.py with Clang undefined-behavior-sanitizer"; exit 1; fi + - .renderer-sanitizer-job + - .rules-pytest-msan-on-schedule + variables: + CLANG_NUM: 1 - artifacts: - name: "mr-$CI_MERGE_REQUEST_IID--sha-$CI_COMMIT_SHORT_SHA--job-$CI_JOB_NAME--results" - expire_in: 1 week - when: always - paths: - - report-junit.xml - - $MAKE_BUILD_LOG_FILE_DEFAULT - expose_as: "renderer usan pytest results" - reports: - junit: - - report-junit.xml +renderer-asan: + extends: + - .renderer-sanitizer-job + - .rules-pytest-asan-usan-on-schedule + variables: + CLANG_NUM: 2 + +renderer-usan: + extends: + - .renderer-sanitizer-job + - .rules-pytest-asan-usan-on-schedule + variables: + CLANG_NUM: 3 .sanitizer-selftest-on-mr: stage: test @@ -2068,16 +2048,10 @@ ivas-pytest-compare_ref-long-fx-fx-lev+10: ivas-pytest-msan: extends: - .ivas-pytest-sanitizers-anchor + - .rules-pytest-msan-on-schedule tags: - ivas-linux-fast resource_group: basop-long-sanitizers - rules: - - if: $CI_PIPELINE_SOURCE == 'push' - when: never - - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - when: never - - if: $CI_PIPELINE_SOURCE == 'schedule' && $IVAS_PYTEST_MSAN - - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == "sanitizer" timeout: "24 hours" before_script: - !reference [ .ivas-pytest-sanitizers-anchor, before_script ] @@ -2101,16 +2075,10 @@ ivas-pytest-msan: ivas-pytest-asan: extends: - .ivas-pytest-sanitizers-anchor + - .rules-pytest-asan-usan-on-schedule tags: - ivas-linux-fast resource_group: basop-long-sanitizers - rules: - - if: $CI_PIPELINE_SOURCE == 'push' - when: never - - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - when: never - - if: $CI_PIPELINE_SOURCE == 'schedule' && $IVAS_PYTEST_ASAN_USAN - - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == "sanitizer" before_script: - !reference [ .ivas-pytest-sanitizers-anchor, before_script ] - CLANG_NUM=2 @@ -2133,16 +2101,10 @@ ivas-pytest-asan: ivas-pytest-usan: extends: - .ivas-pytest-sanitizers-anchor + - .rules-pytest-asan-usan-on-schedule tags: - ivas-linux-fast resource_group: basop-long-sanitizers - rules: - - if: $CI_PIPELINE_SOURCE == 'push' - when: never - - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - when: never - - if: $CI_PIPELINE_SOURCE == 'schedule' && $IVAS_PYTEST_ASAN_USAN - - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == "sanitizer" before_script: - !reference [ .ivas-pytest-sanitizers-anchor, before_script ] - CLANG_NUM=3 -- GitLab From 8ba52543755b53f3e1a25873458da2ca91cd7fb5 Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Thu, 19 Mar 2026 17:02:02 +0100 Subject: [PATCH 02/16] only apply ignorelist for Usan --- main-basop.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/main-basop.yml b/main-basop.yml index 7c79fb8..29e98f7 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1535,7 +1535,9 @@ renderer-smoke-test: - python3 scripts/basop_create_ignorelist_for_ubsan.py - make clean - - make -j CLANG=$CLANG_NUM IGNORELIST=1 2>&1 >$MAKE_BUILD_LOG_FILE_DEFAULT + - make_args="-j CLANG=$CLANG_NUM" + - if [ $CLANG_NUM == "3" ]; make_args="$make_args IGNORELIST=1" + - make -j $make_args 2>&1 >$MAKE_BUILD_LOG_FILE_DEFAULT - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1,log_path=usan_log_catchall python3 -m pytest -q -n auto --tb=no --log-level=INFO --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/renderer_short/test_renderer.py -- GitLab From 144e6e2161ce10e53625c0973939dc42b26bfb8c Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Thu, 19 Mar 2026 17:06:55 +0100 Subject: [PATCH 03/16] fix if syntax --- main-basop.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/main-basop.yml b/main-basop.yml index 29e98f7..061fed2 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1536,7 +1536,10 @@ renderer-smoke-test: - make clean - make_args="-j CLANG=$CLANG_NUM" - - if [ $CLANG_NUM == "3" ]; make_args="$make_args IGNORELIST=1" + - | + if [ $CLANG_NUM == "3" ]; then + make_args="$make_args IGNORELIST=1" + fi - make -j $make_args 2>&1 >$MAKE_BUILD_LOG_FILE_DEFAULT - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1,log_path=usan_log_catchall python3 -m pytest -q -n auto --tb=no --log-level=INFO --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/renderer_short/test_renderer.py -- GitLab From d7f3ca258d5d5215051a27f8d7673adf349c2329 Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Thu, 19 Mar 2026 17:36:22 +0100 Subject: [PATCH 04/16] switch to full renderer test on scheduled --- main-basop.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main-basop.yml b/main-basop.yml index 061fed2..613a0ab 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1516,6 +1516,7 @@ renderer-smoke-test: needs: ["build-codec-linux-clang-make"] stage: test timeout: "300 minutes" + resource_group: basop-long-sanitizers artifacts: name: "$CI_JOB_NAME--sha-$CI_COMMIT_SHORT_SHA--results" expire_in: 1 week @@ -1542,7 +1543,7 @@ renderer-smoke-test: fi - make -j $make_args 2>&1 >$MAKE_BUILD_LOG_FILE_DEFAULT - - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1,log_path=usan_log_catchall python3 -m pytest -q -n auto --tb=no --log-level=INFO --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/renderer_short/test_renderer.py + - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1,log_path=usan_log_catchall python3 -m pytest -q -n auto --tb=no --log-level=INFO --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/renderer/test_renderer.py - python3 scripts/parse_sanitizer_errors_from_xml_report.py report-junit.xml errors.csv -- GitLab From 2143941b2df38227b9c6a5e6aeebf020ee651132 Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Thu, 19 Mar 2026 17:43:10 +0100 Subject: [PATCH 05/16] turn into matrix job --- main-basop.yml | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/main-basop.yml b/main-basop.yml index 613a0ab..146db54 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1510,13 +1510,20 @@ renderer-smoke-test: junit: - report-junit.xml -.renderer-sanitizer-job: +renderer-sanitizer: extends: - .test-job-linux + - .rules-pytest-msan-on-schedule needs: ["build-codec-linux-clang-make"] stage: test timeout: "300 minutes" resource_group: basop-long-sanitizers + parallel: + matrix: + - SANITIZER: + - MSAN + - ASAN + - USAN artifacts: name: "$CI_JOB_NAME--sha-$CI_COMMIT_SHORT_SHA--results" expire_in: 1 week @@ -1535,10 +1542,15 @@ renderer-smoke-test: - python3 scripts/basop_create_ignorelist_for_ubsan.py + - declare -A sanitizer_to_clangnum + - sanitizer_to_clangnum["MSAN"]=1 + - sanitizer_to_clangnum["ASAN"]=2 + - sanitizer_to_clangnum["USAN"]=3 + - make clean - make_args="-j CLANG=$CLANG_NUM" - | - if [ $CLANG_NUM == "3" ]; then + if [ $SANITIZER == "USAN" ]; then make_args="$make_args IGNORELIST=1" fi - make -j $make_args 2>&1 >$MAKE_BUILD_LOG_FILE_DEFAULT @@ -1547,27 +1559,6 @@ renderer-smoke-test: - python3 scripts/parse_sanitizer_errors_from_xml_report.py report-junit.xml errors.csv -renderer-msan: - extends: - - .renderer-sanitizer-job - - .rules-pytest-msan-on-schedule - variables: - CLANG_NUM: 1 - -renderer-asan: - extends: - - .renderer-sanitizer-job - - .rules-pytest-asan-usan-on-schedule - variables: - CLANG_NUM: 2 - -renderer-usan: - extends: - - .renderer-sanitizer-job - - .rules-pytest-asan-usan-on-schedule - variables: - CLANG_NUM: 3 - .sanitizer-selftest-on-mr: stage: test needs: ["build-codec-sanitizers-clang-linux"] -- GitLab From 6d3918bc9c5d8abe1a0ff70edcca73dff3c08f42 Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 20 Mar 2026 09:31:14 +0100 Subject: [PATCH 06/16] correct make_args --- main-basop.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main-basop.yml b/main-basop.yml index 146db54..26f1579 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1542,13 +1542,14 @@ renderer-sanitizer: - python3 scripts/basop_create_ignorelist_for_ubsan.py + - set -euo pipefail - declare -A sanitizer_to_clangnum - sanitizer_to_clangnum["MSAN"]=1 - sanitizer_to_clangnum["ASAN"]=2 - sanitizer_to_clangnum["USAN"]=3 - make clean - - make_args="-j CLANG=$CLANG_NUM" + - make_args="-j CLANG=${sanitizer_to_clangnum["$SANITIZER"]}" - | if [ $SANITIZER == "USAN" ]; then make_args="$make_args IGNORELIST=1" -- GitLab From 0bdbc4de166b663520be69ff7dd457b44fc626ab Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 20 Mar 2026 09:34:46 +0100 Subject: [PATCH 07/16] set -x --- main-basop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main-basop.yml b/main-basop.yml index 26f1579..e540f7b 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1542,7 +1542,7 @@ renderer-sanitizer: - python3 scripts/basop_create_ignorelist_for_ubsan.py - - set -euo pipefail + - set -euxo pipefail - declare -A sanitizer_to_clangnum - sanitizer_to_clangnum["MSAN"]=1 - sanitizer_to_clangnum["ASAN"]=2 -- GitLab From 42fb494f2a65e7407dc0d5fe08358254f03da213 Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 20 Mar 2026 14:20:59 +0100 Subject: [PATCH 08/16] unify the pytest-based sanitizer tests --- main-basop.yml | 164 ++++++++++--------------------------------------- 1 file changed, 34 insertions(+), 130 deletions(-) diff --git a/main-basop.yml b/main-basop.yml index e540f7b..cd13e8f 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -293,6 +293,15 @@ workflow: - if: $CI_PIPELINE_SOURCE == 'schedule' && $IVAS_PYTEST_ASAN_USAN - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == "sanitizer" +.rules-pytest-sanitizers-on-schedule: + rules: + - if: $CI_PIPELINE_SOURCE == 'push' + when: never + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + when: never + - if: $CI_PIPELINE_SOURCE == 'schedule' && $IVAS_PYTEST_SANITIZERS + - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == "sanitizer" + # --------------------------------------------------------------- # Job templates # --------------------------------------------------------------- @@ -1510,13 +1519,13 @@ renderer-smoke-test: junit: - report-junit.xml -renderer-sanitizer: +ivas-pytest-sanitizers: extends: - .test-job-linux - - .rules-pytest-msan-on-schedule - needs: ["build-codec-linux-clang-make"] + - .rules-pytest-sanitizers-on-schedule + needs: ["build-codec-sanitizers-clang-linux"] stage: test - timeout: "300 minutes" + timeout: "20 hours" resource_group: basop-long-sanitizers parallel: matrix: @@ -1524,9 +1533,15 @@ renderer-sanitizer: - MSAN - ASAN - USAN + - WHAT: + - CODEC + - RENDERER + - TESTSIGNALS: + - SHORT + - LONG artifacts: name: "$CI_JOB_NAME--sha-$CI_COMMIT_SHORT_SHA--results" - expire_in: 1 week + expire_in: 2 week when: always paths: - report-junit.xml @@ -1548,6 +1563,7 @@ renderer-sanitizer: - sanitizer_to_clangnum["ASAN"]=2 - sanitizer_to_clangnum["USAN"]=3 + # build everything with the right sanitizer - make clean - make_args="-j CLANG=${sanitizer_to_clangnum["$SANITIZER"]}" - | @@ -1556,7 +1572,19 @@ renderer-sanitizer: fi - make -j $make_args 2>&1 >$MAKE_BUILD_LOG_FILE_DEFAULT - - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1,log_path=usan_log_catchall python3 -m pytest -q -n auto --tb=no --log-level=INFO --html=report.html --self-contained-html --junit-xml=report-junit.xml tests/renderer/test_renderer.py + # assemble arguments and run pytest + - pytest_args="-q -n auto --tb=no --log-level=INFO --html=report.html --self-contained-html --junit-xml=report-junit.xml" + - | + if [ "$TESTSIGNALS" == "LONG"]; then + pytest_args="$pytest_args --param_file scripts/config/self_test_ltv.prm --use_ltv" + fi + - | + if [ "$WHAT" == "CODEC" ]; then + pytest_args="$pytest_args --update_ref 1 tests/codec_be_on_mr_nonselection --ref_encoder_path IVAS_cod --ref_decoder_path IVAS_dec" + else + pytest_args="$pytest_args --create_ref tests/renderer/test_renderer.py" + fi + - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1,log_path=usan_log_catchall python3 -m pytest $pytest_args - python3 scripts/parse_sanitizer_errors_from_xml_report.py report-junit.xml errors.csv @@ -1997,130 +2025,6 @@ ivas-pytest-compare_ref-long-fx-fx-lev+10: - SPLIT_COMPARISON="true" <<: *compare-to-ref-anchor -### These next 3 jobs run three different sanitizers for fx -> fx codec chain usin - -.ivas-pytest-sanitizers-anchor: - extends: - - .job-linux - stage: test - needs: ["build-codec-linux-clang-make"] - timeout: "6 hours" - parallel: - matrix: - - TESTSIGNALS: - - long - - short - before_script: - - case $TESTSIGNALS in - "long") - TEST_SUITE=$LONG_TEST_SUITE_NO_RENDERER - ;; - "short") - TEST_SUITE=$SHORT_TEST_SUITE - ;; - esac - script: - - !reference [ .test-job-linux, before_script ] - - - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/print-common-info.sh - - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/copy-ltv-files-to-testv-dir.sh - - - set -euxo pipefail - - make_args="CLANG=$CLANG_NUM" - - if [[ $CLANG_NUM == 3 ]]; then - - export UBSAN_OPTIONS="suppressions=scripts/ubsan_basop.supp,report_error_type=1,print_stacktrace=1" - - python3 scripts/basop_create_ignorelist_for_ubsan.py - - make_args="$make_args IGNORELIST=1" - - fi - - make clean - - make -j $make_args 2>&1 >$MAKE_BUILD_LOG_FILE_DEFAULT - - testcase_timeout_arg="--testcase_timeout $TESTCASE_TIMEOUT_LTV_SANITIZERS" - # disable per-testcase timeout for msan to evaluate what is going on that it takes so long - - if [[ $CLANG_NUM = 1 ]]; then - - testcase_timeout_arg="" - - fi - - # NOTE: here we do not use the "DUT_..CODER_PATH" variables because we do not build via a script, but directly from the make file (which is done because of the "make_args" - no way to inject that into build-binaries.sh) - - python3 -m pytest $TEST_SUITE --tb=no --update_ref 1 --html=report.html --self-contained-html --junit-xml=report-junit.xml $testcase_timeout_arg --ref_encoder_path IVAS_cod --ref_decoder_path IVAS_dec - -ivas-pytest-msan: - extends: - - .ivas-pytest-sanitizers-anchor - - .rules-pytest-msan-on-schedule - tags: - - ivas-linux-fast - resource_group: basop-long-sanitizers - timeout: "24 hours" - before_script: - - !reference [ .ivas-pytest-sanitizers-anchor, before_script ] - - CLANG_NUM=1 - after_script: - - python3 scripts/parse_sanitizer_errors_from_xml_report.py report-junit.xml msan-errors.csv - artifacts: - name: "$CI_JOB_NAME--sha-$CI_COMMIT_SHORT_SHA--results" - expire_in: 2 weeks - when: always - paths: - - report-junit.xml - - report.html - - msan-errors.csv - - $MAKE_BUILD_LOG_FILE_DEFAULT - expose_as: "Sanitizer selftest results" - reports: - junit: - - report-junit.xml - -ivas-pytest-asan: - extends: - - .ivas-pytest-sanitizers-anchor - - .rules-pytest-asan-usan-on-schedule - tags: - - ivas-linux-fast - resource_group: basop-long-sanitizers - before_script: - - !reference [ .ivas-pytest-sanitizers-anchor, before_script ] - - CLANG_NUM=2 - after_script: - - python3 scripts/parse_sanitizer_errors_from_xml_report.py report-junit.xml asan-errors.csv - artifacts: - name: "$CI_JOB_NAME--sha-$CI_COMMIT_SHORT_SHA--results" - expire_in: 2 weeks - when: always - paths: - - report-junit.xml - - report.html - - asan-errors.csv - - $MAKE_BUILD_LOG_FILE_DEFAULT - expose_as: "Sanitizer selftest results" - reports: - junit: - - report-junit.xml - -ivas-pytest-usan: - extends: - - .ivas-pytest-sanitizers-anchor - - .rules-pytest-asan-usan-on-schedule - tags: - - ivas-linux-fast - resource_group: basop-long-sanitizers - before_script: - - !reference [ .ivas-pytest-sanitizers-anchor, before_script ] - - CLANG_NUM=3 - after_script: - - python3 scripts/parse_sanitizer_errors_from_xml_report.py report-junit.xml usan-errors.csv - artifacts: - name: "$CI_JOB_NAME--sha-$CI_COMMIT_SHORT_SHA--results" - expire_in: 2 weeks - when: always - paths: - - report-junit.xml - - report.html - - usan-errors.csv - - $MAKE_BUILD_LOG_FILE_DEFAULT - expose_as: "Sanitizer selftest results" - reports: - junit: - - report-junit.xml # Manual long self-test (not including tests_sba.py) against BASOP main test-long-self-test: -- GitLab From 58b4e47a6516dca276c4fa057ec18711bde3e843 Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 20 Mar 2026 14:50:09 +0100 Subject: [PATCH 09/16] remove obsolete rules templates --- main-basop.yml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/main-basop.yml b/main-basop.yml index cd13e8f..5c764ea 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -275,24 +275,6 @@ workflow: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' when: never -.rules-pytest-msan-on-schedule: - rules: - - if: $CI_PIPELINE_SOURCE == 'push' - when: never - - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - when: never - - if: $CI_PIPELINE_SOURCE == 'schedule' && $IVAS_PYTEST_MSAN - - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == "sanitizer" - -.rules-pytest-asan-usan-on-schedule: - rules: - - if: $CI_PIPELINE_SOURCE == 'push' - when: never - - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - when: never - - if: $CI_PIPELINE_SOURCE == 'schedule' && $IVAS_PYTEST_ASAN_USAN - - if: $CI_PIPELINE_SOURCE == 'web' && $MANUAL_PIPELINE_TYPE == "sanitizer" - .rules-pytest-sanitizers-on-schedule: rules: - if: $CI_PIPELINE_SOURCE == 'push' -- GitLab From fa91f79e0944413b74e57d62524b24fe0fc27abf Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 20 Mar 2026 14:55:26 +0100 Subject: [PATCH 10/16] fix matrix syntax --- main-basop.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main-basop.yml b/main-basop.yml index 5c764ea..ae089d7 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1515,10 +1515,10 @@ ivas-pytest-sanitizers: - MSAN - ASAN - USAN - - WHAT: + WHAT: - CODEC - RENDERER - - TESTSIGNALS: + TESTSIGNALS: - SHORT - LONG artifacts: -- GitLab From 2d9ff543198c267545127940fdbcbc45e5fcf0da Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 20 Mar 2026 15:00:24 +0100 Subject: [PATCH 11/16] fix if syntax --- main-basop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main-basop.yml b/main-basop.yml index ae089d7..ae1dcd7 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1557,7 +1557,7 @@ ivas-pytest-sanitizers: # assemble arguments and run pytest - pytest_args="-q -n auto --tb=no --log-level=INFO --html=report.html --self-contained-html --junit-xml=report-junit.xml" - | - if [ "$TESTSIGNALS" == "LONG"]; then + if [ "$TESTSIGNALS" == "LONG" ]; then pytest_args="$pytest_args --param_file scripts/config/self_test_ltv.prm --use_ltv" fi - | -- GitLab From 9ede5ff3ef55638e5335656346f9f9acb13e79cb Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 20 Mar 2026 15:15:44 +0100 Subject: [PATCH 12/16] try different order orf args --- main-basop.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main-basop.yml b/main-basop.yml index ae1dcd7..cb71c66 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1562,9 +1562,9 @@ ivas-pytest-sanitizers: fi - | if [ "$WHAT" == "CODEC" ]; then - pytest_args="$pytest_args --update_ref 1 tests/codec_be_on_mr_nonselection --ref_encoder_path IVAS_cod --ref_decoder_path IVAS_dec" + pytest_args="tests/codec_be_on_mr_nonselection $pytest_args --update_ref 1 --ref_encoder_path IVAS_cod --ref_decoder_path IVAS_dec" else - pytest_args="$pytest_args --create_ref tests/renderer/test_renderer.py" + pytest_args="tests/renderer/test_renderer.py $pytest_args --create_ref" fi - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1,log_path=usan_log_catchall python3 -m pytest $pytest_args -- GitLab From 3069c7104dcf40e17cc9a99957cc284513a8c557 Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 20 Mar 2026 15:21:37 +0100 Subject: [PATCH 13/16] add missing script call --- main-basop.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/main-basop.yml b/main-basop.yml index cb71c66..50b2b21 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1536,6 +1536,7 @@ ivas-pytest-sanitizers: script: - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/print-common-info.sh - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/basop/update-scripts-repo.sh + - bash "${CI_PROJECT_DIR}"/ivas-codec-ci/snippets/copy-ltv-files-to-testv-dir.sh - python3 scripts/basop_create_ignorelist_for_ubsan.py -- GitLab From e5e845ea3e261e7e98804ff0f83003e5f9eed8d0 Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 20 Mar 2026 15:22:24 +0100 Subject: [PATCH 14/16] move error parsing into after_script section --- main-basop.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/main-basop.yml b/main-basop.yml index 50b2b21..09a2297 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1569,6 +1569,7 @@ ivas-pytest-sanitizers: fi - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1,log_path=usan_log_catchall python3 -m pytest $pytest_args + after_script: - python3 scripts/parse_sanitizer_errors_from_xml_report.py report-junit.xml errors.csv .sanitizer-selftest-on-mr: -- GitLab From 7ef135b2dfacfd55e9fc77c363b8b8f709e2332b Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Fri, 20 Mar 2026 17:27:19 +0100 Subject: [PATCH 15/16] add renaming of renderer binary --- main-basop.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/main-basop.yml b/main-basop.yml index 09a2297..7674319 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1563,9 +1563,11 @@ ivas-pytest-sanitizers: fi - | if [ "$WHAT" == "CODEC" ]; then - pytest_args="tests/codec_be_on_mr_nonselection $pytest_args --update_ref 1 --ref_encoder_path IVAS_cod --ref_decoder_path IVAS_dec" - else + pytest_args="tests/codec_be_on_mr_nonselection $pytest_args --update_ref 1 --ref_encoder_path IVAS_cod_ref --ref_decoder_path IVAS_dec_ref" + else # RENDERER pytest_args="tests/renderer/test_renderer.py $pytest_args --create_ref" + # renderer tests have this naming convention and no way to point to specific binaries + mv IVAS_rend IVAS_rend_ref fi - UBSAN_OPTIONS=suppressions=scripts/ubsan.supp,report_error_type=1,print_stacktrace=1,log_path=usan_log_catchall python3 -m pytest $pytest_args -- GitLab From 2d8f431c5df55ccc239468fe95633354a0a9d8ab Mon Sep 17 00:00:00 2001 From: Jan Kiene Date: Mon, 23 Mar 2026 16:23:31 +0100 Subject: [PATCH 16/16] increase timeout and correct binary names --- main-basop.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main-basop.yml b/main-basop.yml index 7674319..0f590d3 100644 --- a/main-basop.yml +++ b/main-basop.yml @@ -1507,7 +1507,7 @@ ivas-pytest-sanitizers: - .rules-pytest-sanitizers-on-schedule needs: ["build-codec-sanitizers-clang-linux"] stage: test - timeout: "20 hours" + timeout: "32 hours" resource_group: basop-long-sanitizers parallel: matrix: @@ -1563,7 +1563,7 @@ ivas-pytest-sanitizers: fi - | if [ "$WHAT" == "CODEC" ]; then - pytest_args="tests/codec_be_on_mr_nonselection $pytest_args --update_ref 1 --ref_encoder_path IVAS_cod_ref --ref_decoder_path IVAS_dec_ref" + pytest_args="tests/codec_be_on_mr_nonselection $pytest_args --update_ref 1 --ref_encoder_path IVAS_cod --ref_decoder_path IVAS_dec" else # RENDERER pytest_args="tests/renderer/test_renderer.py $pytest_args --create_ref" # renderer tests have this naming convention and no way to point to specific binaries -- GitLab