On Thu, Jul 23, 2026 at 02:55:58PM +0200, David Marchand wrote:
> Let's check if a testpmd and unit tests from a reference build can run
> with the current release libraries/drivers.
> 
> This gives another level of ABI checking, like catching regressions on
> experimental or internal ABI symbols that get promoted to stable.
> 
> We may need to skip unit tests that were added since the reference.
> So add a ABI_SKIP_TESTS environment variable in preparation.
> 
> Signed-off-by: David Marchand <[email protected]>
> ---
> Changes since v1:
> - dropped hack, testing this patch can't be done in the CI now,
> - emptied the excluded tests list,
> - added test-null.sh,
> 
> ---

This is a good test to run. It's something I believe our internal
validation team does at times too. Some comments inline below, nothing
major though.

Acked-by: Bruce Richardson <[email protected]>


>  .ci/linux-build.sh          | 33 ++++++++++++++++++++++++++++++---
>  .github/workflows/build.yml |  1 +
>  2 files changed, 31 insertions(+), 3 deletions(-)
> 
> diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
> index a5e602ed83..032f3726e8 100755
> --- a/.ci/linux-build.sh
> +++ b/.ci/linux-build.sh
> @@ -206,23 +206,33 @@ if [ "$ABI_CHECKS" = "true" ]; then
>          # don't try to link apps.
>          REF_OPTS="$REF_OPTS -Dcheck_includes=false"
>          REF_OPTS="$REF_OPTS -Ddeveloper_mode=disabled"
> -        REF_OPTS="$REF_OPTS -Ddisable_apps=*"
> +        REF_OPTS="$REF_OPTS -Denable_apps=test,test-pmd"
>          REF_OPTS="$REF_OPTS -Denable_docs=false"
>          REF_OPTS="$REF_OPTS -Dexamples="
> -        REF_OPTS="$REF_OPTS -Dtests=false"

These changes should go in the previous patch, I think - certainly you can
drop the tests=false one, since it should be a no-op.

>          refsrcdir=$(readlink -f $(pwd)/../dpdk-$REF_GIT_TAG)
>          git clone --single-branch -b "$REF_GIT_TAG" $REF_GIT_REPO $refsrcdir
>          meson setup $REF_OPTS $refsrcdir $refsrcdir/build
>          ninja -C $refsrcdir/build
>          DESTDIR=$(pwd)/reference meson install -C $refsrcdir/build
>          find reference/usr/local -name '*.a' -delete
> -        rm -rf reference/usr/local/bin
> +        rm -rf reference/usr/local/bin/*
> +        cp $refsrcdir/build/app/dpdk-test reference/usr/local/bin/dpdk-test
> +        cp $refsrcdir/build/app/dpdk-testpmd 
> reference/usr/local/bin/dpdk-testpmd

At this point I'd suggest running "meson test --list --suite=fast-tests" to
get the list of available tests in the reference implementation.

>          rm -rf reference/usr/local/share
>          echo $REF_GIT_TAG > reference/VERSION
>      fi
>  
>      DESTDIR=$(pwd)/install meson install -C build
>      devtools/check-abi.sh reference install ${ABI_CHECKS_WARN_ONLY:-}
> +
> +    failed=
> +    configure_coredump
> +    mv -f build/app/dpdk-testpmd build/app/dpdk-testpmd.ori
> +    cp reference/usr/local/bin/dpdk-testpmd build/app/dpdk-testpmd
> +    devtools/test-null.sh || failed="true"
> +    mv -f build/app/dpdk-testpmd.ori build/app/dpdk-testpmd
> +    catch_coredump
> +    [ "$failed" != "true" ]
>  fi
>  
>  if [ "$RUN_TESTS" = "true" ]; then
> @@ -233,6 +243,23 @@ if [ "$RUN_TESTS" = "true" ]; then
>      catch_ubsan DPDK:fast-tests build/meson-logs/testlog.txt
>      check_traces
>      [ "$failed" != "true" ]
> +
> +    if [ "$ABI_CHECKS" = "true" ]; then
> +        failed=
> +        configure_coredump
> +        mv -f build/app/dpdk-test build/app/dpdk-test.ori
> +        cp reference/usr/local/bin/dpdk-test build/app/dpdk-test
> +        for t in ${ABI_SKIP_TESTS}; do
> +            DPDK_TEST_SKIP=${DPDK_TEST_SKIP+$DPDK_TEST_SKIP,}$t
> +        done

As well as the ABI_SKIP_TESTS, you could automate the list by again running
"meson test --list --suite..." and then only running the tests in both
lists. [using "sort" and "uniq -d" perhaps?]

> +        sudo env DPDK_TEST_SKIP="$DPDK_TEST_SKIP" \
> +            meson test -C build --suite fast-tests -t 3 --no-stdsplit 
> --print-errorlogs || failed="true"
> +        catch_coredump
> +        catch_ubsan DPDK:fast-tests build/meson-logs/testlog.txt
> +        check_traces
> +        mv -f build/app/dpdk-test.ori build/app/dpdk-test
> +        [ "$failed" != "true" ]
> +    fi
>  fi
>  
>  # Test examples compilation with an installed dpdk
> diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
> index c63a9a3982..5ee55f4d27 100644
> --- a/.github/workflows/build.yml
> +++ b/.github/workflows/build.yml
> @@ -39,6 +39,7 @@ jobs:
>      env:
>        AARCH64: ${{ matrix.config.cross == 'aarch64' }}
>        ABI_CHECKS: ${{ contains(matrix.config.checks, 'abi') }}
> +      ABI_SKIP_TESTS: none
>        ASAN: ${{ contains(matrix.config.checks, 'asan') }}
>        BUILD_32BIT: ${{ matrix.config.cross == 'i386' }}
>        BUILD_DEBUG: ${{ contains(matrix.config.checks, 'debug') }}
> -- 
> 2.54.0
> 

Reply via email to