DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH] app/test: invoke all telemetry commands
@ 2022-07-29  9:54 David Marchand
  2022-07-29 10:20 ` Bruce Richardson
  2022-07-29 12:42 ` [PATCH v2 1/2] app/test: load drivers using build directory David Marchand
  0 siblings, 2 replies; 13+ messages in thread
From: David Marchand @ 2022-07-29  9:54 UTC (permalink / raw)
  To: dev; +Cc: Chengwen Feng, Aaron Conole, Michael Santana, Ciara Power

Try and call all possible telemetry commands.
Each commands is tested with no argument, 0 (for command that accepts
a single integer like for a port identifier) and z (to catch commands
not properly validating input).
Fake cryptodev, dmadev, ethdev, eventdev and rawdev devices are created
using dummy drivers.

Output of the commands is not checked, the point of this test is mainly
to catch simple issues and leaks (when coupled with ASan in the CI).

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
 .github/workflows/build.yml |  2 +-
 app/test/meson.build        | 35 ++++++++++++++++++++++++++++++++++-
 app/test/test_telemetry.sh  | 28 ++++++++++++++++++++++++++++
 3 files changed, 63 insertions(+), 2 deletions(-)
 create mode 100755 app/test/test_telemetry.sh

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 6f04e7071c..bf17d2b278 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -140,7 +140,7 @@ jobs:
       run: sudo apt install -y crossbuild-essential-riscv64
     - name: Install test tools packages
       if: env.AARCH64 != 'true' || env.PPC64LE != 'true' || env.RISCV64 != 'true' || env.RUN_TESTS == 'true'
-      run: sudo apt install -y gdb
+      run: sudo apt install -y gdb jq
     - name: Install doc generation packages
       if: env.BUILD_DOCS == 'true'
       run: sudo apt install -y doxygen graphviz python3-sphinx
diff --git a/app/test/meson.build b/app/test/meson.build
index 431c5bd318..e60fc64a37 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -473,12 +473,14 @@ message('hugepage availability: @0@'.format(has_hugepage))
 timeout_seconds = 600
 timeout_seconds_fast = 10
 
+test_no_huge_args = ['--no-huge', '-m', '2048']
+
 foreach arg : fast_tests
     test_args = []
     run_test = true
     if not has_hugepage
         if arg[1]
-            test_args += ['--no-huge', '-m', '2048']
+            test_args += test_no_huge_args
         else
             run_test = false
         endif
@@ -520,6 +522,37 @@ foreach arg : fast_tests
     endif
 endforeach
 
+if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY')
+    test_args = [dpdk_test]
+    test_args += test_no_huge_args
+    if get_option('default_library') == 'shared'
+        foreach drv:dpdk_drivers
+            test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
+        endforeach
+    endif
+    if dpdk_conf.has('RTE_CRYPTO_NULL')
+        test_args += ['--vdev=crypto_null0']
+    endif
+    if dpdk_conf.has('RTE_DMA_SKELETON')
+        test_args += ['--vdev=dma_skeleton0']
+    endif
+    if dpdk_conf.has('RTE_EVENT_SKELETON')
+        test_args += ['--vdev=event_skeleton0']
+    endif
+    if dpdk_conf.has('RTE_NET_NULL')
+        test_args += ['--vdev=net_null0']
+    endif
+    if dpdk_conf.has('RTE_RAW_SKELETON')
+        test_args += ['--vdev=rawdev_skeleton0']
+    endif
+    test_args += ['-a', '0000:00:00.0']
+    test('telemetry_all', find_program('test_telemetry.sh'),
+            args: test_args,
+            timeout : timeout_seconds_fast,
+            is_parallel : false,
+            suite : 'fast-tests')
+endif
+
 foreach arg : perf_test_names
     test(arg, dpdk_test,
             env : ['DPDK_TEST=' + arg],
diff --git a/app/test/test_telemetry.sh b/app/test/test_telemetry.sh
new file mode 100755
index 0000000000..ca6abe266e
--- /dev/null
+++ b/app/test/test_telemetry.sh
@@ -0,0 +1,28 @@
+#!/bin/sh -e
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (c) 2022 Red Hat, Inc.
+
+which jq || {
+    echo "No jq available, skipping test."
+    exit 77
+}
+
+rootdir=$(readlink -f $(dirname $(readlink -f $0))/../..)
+tmpoutput=$(mktemp -t dpdk.test_telemetry.XXXXXX)
+trap "cat $tmpoutput; rm -f $tmpoutput" EXIT
+
+call_all_telemetry() {
+    telemetry_script=$rootdir/usertools/dpdk-telemetry.py
+    echo >$tmpoutput
+    echo "Telemetry commands log:" >>$tmpoutput
+    for cmd in $(echo / | $telemetry_script | jq -r '.["/"][]')
+    do
+        for input in $cmd $cmd,0 $cmd,z
+        do
+            echo Calling $input >> $tmpoutput
+            echo $input | $telemetry_script >> $tmpoutput 2>&1
+        done
+    done
+}
+
+(sleep 1 && call_all_telemetry && echo quit) | $@
-- 
2.36.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] app/test: invoke all telemetry commands
  2022-07-29  9:54 [PATCH] app/test: invoke all telemetry commands David Marchand
@ 2022-07-29 10:20 ` Bruce Richardson
  2022-07-29 11:13   ` David Marchand
  2022-07-29 11:53   ` David Marchand
  2022-07-29 12:42 ` [PATCH v2 1/2] app/test: load drivers using build directory David Marchand
  1 sibling, 2 replies; 13+ messages in thread
From: Bruce Richardson @ 2022-07-29 10:20 UTC (permalink / raw)
  To: David Marchand
  Cc: dev, Chengwen Feng, Aaron Conole, Michael Santana, Ciara Power

On Fri, Jul 29, 2022 at 11:54:00AM +0200, David Marchand wrote:
> Try and call all possible telemetry commands.
> Each commands is tested with no argument, 0 (for command that accepts
> a single integer like for a port identifier) and z (to catch commands
> not properly validating input).
> Fake cryptodev, dmadev, ethdev, eventdev and rawdev devices are created
> using dummy drivers.
> 
> Output of the commands is not checked, the point of this test is mainly
> to catch simple issues and leaks (when coupled with ASan in the CI).
> 
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> Acked-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
>  .github/workflows/build.yml |  2 +-
>  app/test/meson.build        | 35 ++++++++++++++++++++++++++++++++++-
>  app/test/test_telemetry.sh  | 28 ++++++++++++++++++++++++++++
>  3 files changed, 63 insertions(+), 2 deletions(-)
>  create mode 100755 app/test/test_telemetry.sh
> 
> diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
> index 6f04e7071c..bf17d2b278 100644
> --- a/.github/workflows/build.yml
> +++ b/.github/workflows/build.yml
> @@ -140,7 +140,7 @@ jobs:
>        run: sudo apt install -y crossbuild-essential-riscv64
>      - name: Install test tools packages
>        if: env.AARCH64 != 'true' || env.PPC64LE != 'true' || env.RISCV64 != 'true' || env.RUN_TESTS == 'true'
> -      run: sudo apt install -y gdb
> +      run: sudo apt install -y gdb jq
>      - name: Install doc generation packages
>        if: env.BUILD_DOCS == 'true'
>        run: sudo apt install -y doxygen graphviz python3-sphinx
> diff --git a/app/test/meson.build b/app/test/meson.build
> index 431c5bd318..e60fc64a37 100644
> --- a/app/test/meson.build
> +++ b/app/test/meson.build
> @@ -473,12 +473,14 @@ message('hugepage availability: @0@'.format(has_hugepage))
>  timeout_seconds = 600
>  timeout_seconds_fast = 10
>  
> +test_no_huge_args = ['--no-huge', '-m', '2048']
> +
>  foreach arg : fast_tests
>      test_args = []
>      run_test = true
>      if not has_hugepage
>          if arg[1]
> -            test_args += ['--no-huge', '-m', '2048']
> +            test_args += test_no_huge_args
>          else
>              run_test = false
>          endif
> @@ -520,6 +522,37 @@ foreach arg : fast_tests
>      endif
>  endforeach
>  
> +if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY')
> +    test_args = [dpdk_test]
> +    test_args += test_no_huge_args
> +    if get_option('default_library') == 'shared'
> +        foreach drv:dpdk_drivers
> +            test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
> +        endforeach

Rather than looping for each driver and building a huge cmdline, we should
just be able to pass in the path to the drivers directory, and have DPDK
auto-load all .so files there. Passing in "meson.project_build_root() +
'/drivers'" should probably work. If we want a more correct way to get the
drivers build directory, we can call meson.current_build_dir() when
processing the drivers and save off that value to be reused here.

/Bruce

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] app/test: invoke all telemetry commands
  2022-07-29 10:20 ` Bruce Richardson
@ 2022-07-29 11:13   ` David Marchand
  2022-07-29 11:28     ` Bruce Richardson
  2022-07-29 11:53   ` David Marchand
  1 sibling, 1 reply; 13+ messages in thread
From: David Marchand @ 2022-07-29 11:13 UTC (permalink / raw)
  To: Bruce Richardson
  Cc: dev, Chengwen Feng, Aaron Conole, Michael Santana, Ciara Power

On Fri, Jul 29, 2022 at 12:20 PM Bruce Richardson
<bruce.richardson@intel.com> wrote:
> > +if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY')
> > +    test_args = [dpdk_test]
> > +    test_args += test_no_huge_args
> > +    if get_option('default_library') == 'shared'
> > +        foreach drv:dpdk_drivers
> > +            test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
> > +        endforeach
>
> Rather than looping for each driver and building a huge cmdline, we should
> just be able to pass in the path to the drivers directory, and have DPDK
> auto-load all .so files there. Passing in "meson.project_build_root() +
> '/drivers'" should probably work. If we want a more correct way to get the
> drivers build directory, we can call meson.current_build_dir() when
> processing the drivers and save off that value to be reused here.

I copied this loop from an existing block added with 207b1c813f39
("test: fix build without ring PMD").
On the need for this loop at the time... I think it was to avoid
loading non .so stuff from a build directory.
And you probably handled this with 49b536fc3060 ("eal: load only
shared libs from driver plugin directories").

I'll try your suggestion and, if it works, I'll update the other existing test.


-- 
David Marchand


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] app/test: invoke all telemetry commands
  2022-07-29 11:13   ` David Marchand
@ 2022-07-29 11:28     ` Bruce Richardson
  0 siblings, 0 replies; 13+ messages in thread
From: Bruce Richardson @ 2022-07-29 11:28 UTC (permalink / raw)
  To: David Marchand
  Cc: dev, Chengwen Feng, Aaron Conole, Michael Santana, Ciara Power

On Fri, Jul 29, 2022 at 01:13:49PM +0200, David Marchand wrote:
> On Fri, Jul 29, 2022 at 12:20 PM Bruce Richardson
> <bruce.richardson@intel.com> wrote:
> > > +if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY')
> > > +    test_args = [dpdk_test]
> > > +    test_args += test_no_huge_args
> > > +    if get_option('default_library') == 'shared'
> > > +        foreach drv:dpdk_drivers
> > > +            test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
> > > +        endforeach
> >
> > Rather than looping for each driver and building a huge cmdline, we should
> > just be able to pass in the path to the drivers directory, and have DPDK
> > auto-load all .so files there. Passing in "meson.project_build_root() +
> > '/drivers'" should probably work. If we want a more correct way to get the
> > drivers build directory, we can call meson.current_build_dir() when
> > processing the drivers and save off that value to be reused here.
> 
> I copied this loop from an existing block added with 207b1c813f39
> ("test: fix build without ring PMD").
> On the need for this loop at the time... I think it was to avoid
> loading non .so stuff from a build directory.
> And you probably handled this with 49b536fc3060 ("eal: load only
> shared libs from driver plugin directories").
> 
> I'll try your suggestion and, if it works, I'll update the other existing test.
> 
Many thanks. If it doesn't work and needs some investigation, let me know
and maybe I can take a look at it for a bit.

/Bruce

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] app/test: invoke all telemetry commands
  2022-07-29 10:20 ` Bruce Richardson
  2022-07-29 11:13   ` David Marchand
@ 2022-07-29 11:53   ` David Marchand
  2022-07-29 13:27     ` Bruce Richardson
  1 sibling, 1 reply; 13+ messages in thread
From: David Marchand @ 2022-07-29 11:53 UTC (permalink / raw)
  To: Bruce Richardson
  Cc: dev, Chengwen Feng, Aaron Conole, Michael Santana, Ciara Power

On Fri, Jul 29, 2022 at 12:20 PM Bruce Richardson
<bruce.richardson@intel.com> wrote:
>
> On Fri, Jul 29, 2022 at 11:54:00AM +0200, David Marchand wrote:
> > Try and call all possible telemetry commands.
> > Each commands is tested with no argument, 0 (for command that accepts
> > a single integer like for a port identifier) and z (to catch commands
> > not properly validating input).
> > Fake cryptodev, dmadev, ethdev, eventdev and rawdev devices are created
> > using dummy drivers.
> >
> > Output of the commands is not checked, the point of this test is mainly
> > to catch simple issues and leaks (when coupled with ASan in the CI).
> >
> > Signed-off-by: David Marchand <david.marchand@redhat.com>
> > Acked-by: Chengwen Feng <fengchengwen@huawei.com>
> > ---
> >  .github/workflows/build.yml |  2 +-
> >  app/test/meson.build        | 35 ++++++++++++++++++++++++++++++++++-
> >  app/test/test_telemetry.sh  | 28 ++++++++++++++++++++++++++++
> >  3 files changed, 63 insertions(+), 2 deletions(-)
> >  create mode 100755 app/test/test_telemetry.sh
> >
> > diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
> > index 6f04e7071c..bf17d2b278 100644
> > --- a/.github/workflows/build.yml
> > +++ b/.github/workflows/build.yml
> > @@ -140,7 +140,7 @@ jobs:
> >        run: sudo apt install -y crossbuild-essential-riscv64
> >      - name: Install test tools packages
> >        if: env.AARCH64 != 'true' || env.PPC64LE != 'true' || env.RISCV64 != 'true' || env.RUN_TESTS == 'true'
> > -      run: sudo apt install -y gdb
> > +      run: sudo apt install -y gdb jq
> >      - name: Install doc generation packages
> >        if: env.BUILD_DOCS == 'true'
> >        run: sudo apt install -y doxygen graphviz python3-sphinx
> > diff --git a/app/test/meson.build b/app/test/meson.build
> > index 431c5bd318..e60fc64a37 100644
> > --- a/app/test/meson.build
> > +++ b/app/test/meson.build
> > @@ -473,12 +473,14 @@ message('hugepage availability: @0@'.format(has_hugepage))
> >  timeout_seconds = 600
> >  timeout_seconds_fast = 10
> >
> > +test_no_huge_args = ['--no-huge', '-m', '2048']
> > +
> >  foreach arg : fast_tests
> >      test_args = []
> >      run_test = true
> >      if not has_hugepage
> >          if arg[1]
> > -            test_args += ['--no-huge', '-m', '2048']
> > +            test_args += test_no_huge_args
> >          else
> >              run_test = false
> >          endif
> > @@ -520,6 +522,37 @@ foreach arg : fast_tests
> >      endif
> >  endforeach
> >
> > +if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY')
> > +    test_args = [dpdk_test]
> > +    test_args += test_no_huge_args
> > +    if get_option('default_library') == 'shared'
> > +        foreach drv:dpdk_drivers
> > +            test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
> > +        endforeach
>
> Rather than looping for each driver and building a huge cmdline, we should
> just be able to pass in the path to the drivers directory, and have DPDK
> auto-load all .so files there. Passing in "meson.project_build_root() +
> '/drivers'" should probably work. If we want a more correct way to get the
> drivers build directory, we can call meson.current_build_dir() when
> processing the drivers and save off that value to be reused here.

Or simply resolve this with a:
test_args += ['-d', fs.parent(dpdk_drivers[0].full_path())]

But the problem is that the fs meson module comes with version 0.53 afaics.
Any elegant alternative idea?


-- 
David Marchand


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 1/2] app/test: load drivers using build directory
  2022-07-29  9:54 [PATCH] app/test: invoke all telemetry commands David Marchand
  2022-07-29 10:20 ` Bruce Richardson
@ 2022-07-29 12:42 ` David Marchand
  2022-07-29 12:42   ` [PATCH v2 2/2] app/test: invoke all telemetry commands David Marchand
  2022-07-29 13:28   ` [PATCH v2 1/2] app/test: load drivers using build directory Bruce Richardson
  1 sibling, 2 replies; 13+ messages in thread
From: David Marchand @ 2022-07-29 12:42 UTC (permalink / raw)
  To: dev; +Cc: Bruce Richardson

Since commit 49b536fc3060 ("eal: load only shared libs from driver ...),
we can specify a build directory to the -d option.

Suggested-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 app/test/meson.build | 4 +---
 drivers/meson.build  | 2 ++
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/test/meson.build b/app/test/meson.build
index 431c5bd318..861dd92ebd 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -492,9 +492,7 @@ foreach arg : fast_tests
 
     if (get_option('default_library') == 'shared' and
         arg[0] == 'event_eth_tx_adapter_autotest')
-        foreach drv:dpdk_drivers
-            test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
-        endforeach
+        test_args += ['-d', dpdk_drivers_build_dir]
     endif
     if is_linux
         test_args += ['--file-prefix=@0@'.format(arg[0])]
diff --git a/drivers/meson.build b/drivers/meson.build
index b22c2adda7..376a64f4da 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -52,6 +52,8 @@ if cc.has_argument('-Wno-format-truncation')
     default_cflags += '-Wno-format-truncation'
 endif
 
+dpdk_drivers_build_dir = meson.current_build_dir()
+
 foreach subpath:subdirs
     drivers = []
     std_deps = []
-- 
2.36.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 2/2] app/test: invoke all telemetry commands
  2022-07-29 12:42 ` [PATCH v2 1/2] app/test: load drivers using build directory David Marchand
@ 2022-07-29 12:42   ` David Marchand
  2022-07-29 18:04     ` Aaron Conole
  2022-08-16 16:20     ` Power, Ciara
  2022-07-29 13:28   ` [PATCH v2 1/2] app/test: load drivers using build directory Bruce Richardson
  1 sibling, 2 replies; 13+ messages in thread
From: David Marchand @ 2022-07-29 12:42 UTC (permalink / raw)
  To: dev; +Cc: Chengwen Feng, Aaron Conole, Michael Santana, Ciara Power

Try and call all possible telemetry commands.
Each commands is tested with no argument, 0 (for command that accepts
a single integer like for a port identifier) and z (to catch commands
not properly validating input).
Fake cryptodev, dmadev, ethdev, eventdev and rawdev devices are created
using dummy drivers.

Output of the commands is not checked, the point of this test is mainly
to catch simple issues and leaks (when coupled with ASan in the CI).

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
---
 .github/workflows/build.yml |  2 +-
 app/test/meson.build        | 33 ++++++++++++++++++++++++++++++++-
 app/test/test_telemetry.sh  | 28 ++++++++++++++++++++++++++++
 3 files changed, 61 insertions(+), 2 deletions(-)
 create mode 100755 app/test/test_telemetry.sh

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 6f04e7071c..bf17d2b278 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -140,7 +140,7 @@ jobs:
       run: sudo apt install -y crossbuild-essential-riscv64
     - name: Install test tools packages
       if: env.AARCH64 != 'true' || env.PPC64LE != 'true' || env.RISCV64 != 'true' || env.RUN_TESTS == 'true'
-      run: sudo apt install -y gdb
+      run: sudo apt install -y gdb jq
     - name: Install doc generation packages
       if: env.BUILD_DOCS == 'true'
       run: sudo apt install -y doxygen graphviz python3-sphinx
diff --git a/app/test/meson.build b/app/test/meson.build
index 861dd92ebd..bf1d81f84a 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -473,12 +473,14 @@ message('hugepage availability: @0@'.format(has_hugepage))
 timeout_seconds = 600
 timeout_seconds_fast = 10
 
+test_no_huge_args = ['--no-huge', '-m', '2048']
+
 foreach arg : fast_tests
     test_args = []
     run_test = true
     if not has_hugepage
         if arg[1]
-            test_args += ['--no-huge', '-m', '2048']
+            test_args += test_no_huge_args
         else
             run_test = false
         endif
@@ -518,6 +520,35 @@ foreach arg : fast_tests
     endif
 endforeach
 
+if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY')
+    test_args = [dpdk_test]
+    test_args += test_no_huge_args
+    if get_option('default_library') == 'shared'
+        test_args += ['-d', dpdk_drivers_build_dir]
+    endif
+    if dpdk_conf.has('RTE_CRYPTO_NULL')
+        test_args += ['--vdev=crypto_null0']
+    endif
+    if dpdk_conf.has('RTE_DMA_SKELETON')
+        test_args += ['--vdev=dma_skeleton0']
+    endif
+    if dpdk_conf.has('RTE_EVENT_SKELETON')
+        test_args += ['--vdev=event_skeleton0']
+    endif
+    if dpdk_conf.has('RTE_NET_NULL')
+        test_args += ['--vdev=net_null0']
+    endif
+    if dpdk_conf.has('RTE_RAW_SKELETON')
+        test_args += ['--vdev=rawdev_skeleton0']
+    endif
+    test_args += ['-a', '0000:00:00.0']
+    test('telemetry_all', find_program('test_telemetry.sh'),
+            args: test_args,
+            timeout : timeout_seconds_fast,
+            is_parallel : false,
+            suite : 'fast-tests')
+endif
+
 foreach arg : perf_test_names
     test(arg, dpdk_test,
             env : ['DPDK_TEST=' + arg],
diff --git a/app/test/test_telemetry.sh b/app/test/test_telemetry.sh
new file mode 100755
index 0000000000..ca6abe266e
--- /dev/null
+++ b/app/test/test_telemetry.sh
@@ -0,0 +1,28 @@
+#!/bin/sh -e
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (c) 2022 Red Hat, Inc.
+
+which jq || {
+    echo "No jq available, skipping test."
+    exit 77
+}
+
+rootdir=$(readlink -f $(dirname $(readlink -f $0))/../..)
+tmpoutput=$(mktemp -t dpdk.test_telemetry.XXXXXX)
+trap "cat $tmpoutput; rm -f $tmpoutput" EXIT
+
+call_all_telemetry() {
+    telemetry_script=$rootdir/usertools/dpdk-telemetry.py
+    echo >$tmpoutput
+    echo "Telemetry commands log:" >>$tmpoutput
+    for cmd in $(echo / | $telemetry_script | jq -r '.["/"][]')
+    do
+        for input in $cmd $cmd,0 $cmd,z
+        do
+            echo Calling $input >> $tmpoutput
+            echo $input | $telemetry_script >> $tmpoutput 2>&1
+        done
+    done
+}
+
+(sleep 1 && call_all_telemetry && echo quit) | $@
-- 
2.36.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] app/test: invoke all telemetry commands
  2022-07-29 11:53   ` David Marchand
@ 2022-07-29 13:27     ` Bruce Richardson
  2022-07-29 13:42       ` David Marchand
  0 siblings, 1 reply; 13+ messages in thread
From: Bruce Richardson @ 2022-07-29 13:27 UTC (permalink / raw)
  To: David Marchand
  Cc: dev, Chengwen Feng, Aaron Conole, Michael Santana, Ciara Power

On Fri, Jul 29, 2022 at 01:53:04PM +0200, David Marchand wrote:
> On Fri, Jul 29, 2022 at 12:20 PM Bruce Richardson
> <bruce.richardson@intel.com> wrote:
> >
> > On Fri, Jul 29, 2022 at 11:54:00AM +0200, David Marchand wrote:
> > > Try and call all possible telemetry commands.
> > > Each commands is tested with no argument, 0 (for command that accepts
> > > a single integer like for a port identifier) and z (to catch commands
> > > not properly validating input).
> > > Fake cryptodev, dmadev, ethdev, eventdev and rawdev devices are created
> > > using dummy drivers.
> > >
> > > Output of the commands is not checked, the point of this test is mainly
> > > to catch simple issues and leaks (when coupled with ASan in the CI).
> > >
> > > Signed-off-by: David Marchand <david.marchand@redhat.com>
> > > Acked-by: Chengwen Feng <fengchengwen@huawei.com>
> > > ---
> > >  .github/workflows/build.yml |  2 +-
> > >  app/test/meson.build        | 35 ++++++++++++++++++++++++++++++++++-
> > >  app/test/test_telemetry.sh  | 28 ++++++++++++++++++++++++++++
> > >  3 files changed, 63 insertions(+), 2 deletions(-)
> > >  create mode 100755 app/test/test_telemetry.sh
> > >
> > > diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
> > > index 6f04e7071c..bf17d2b278 100644
> > > --- a/.github/workflows/build.yml
> > > +++ b/.github/workflows/build.yml
> > > @@ -140,7 +140,7 @@ jobs:
> > >        run: sudo apt install -y crossbuild-essential-riscv64
> > >      - name: Install test tools packages
> > >        if: env.AARCH64 != 'true' || env.PPC64LE != 'true' || env.RISCV64 != 'true' || env.RUN_TESTS == 'true'
> > > -      run: sudo apt install -y gdb
> > > +      run: sudo apt install -y gdb jq
> > >      - name: Install doc generation packages
> > >        if: env.BUILD_DOCS == 'true'
> > >        run: sudo apt install -y doxygen graphviz python3-sphinx
> > > diff --git a/app/test/meson.build b/app/test/meson.build
> > > index 431c5bd318..e60fc64a37 100644
> > > --- a/app/test/meson.build
> > > +++ b/app/test/meson.build
> > > @@ -473,12 +473,14 @@ message('hugepage availability: @0@'.format(has_hugepage))
> > >  timeout_seconds = 600
> > >  timeout_seconds_fast = 10
> > >
> > > +test_no_huge_args = ['--no-huge', '-m', '2048']
> > > +
> > >  foreach arg : fast_tests
> > >      test_args = []
> > >      run_test = true
> > >      if not has_hugepage
> > >          if arg[1]
> > > -            test_args += ['--no-huge', '-m', '2048']
> > > +            test_args += test_no_huge_args
> > >          else
> > >              run_test = false
> > >          endif
> > > @@ -520,6 +522,37 @@ foreach arg : fast_tests
> > >      endif
> > >  endforeach
> > >
> > > +if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY')
> > > +    test_args = [dpdk_test]
> > > +    test_args += test_no_huge_args
> > > +    if get_option('default_library') == 'shared'
> > > +        foreach drv:dpdk_drivers
> > > +            test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
> > > +        endforeach
> >
> > Rather than looping for each driver and building a huge cmdline, we should
> > just be able to pass in the path to the drivers directory, and have DPDK
> > auto-load all .so files there. Passing in "meson.project_build_root() +
> > '/drivers'" should probably work. If we want a more correct way to get the
> > drivers build directory, we can call meson.current_build_dir() when
> > processing the drivers and save off that value to be reused here.
> 
> Or simply resolve this with a:
> test_args += ['-d', fs.parent(dpdk_drivers[0].full_path())]
> 
> But the problem is that the fs meson module comes with version 0.53 afaics.
> Any elegant alternative idea?
>
I think the approach you have taken in the v2 is best.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/2] app/test: load drivers using build directory
  2022-07-29 12:42 ` [PATCH v2 1/2] app/test: load drivers using build directory David Marchand
  2022-07-29 12:42   ` [PATCH v2 2/2] app/test: invoke all telemetry commands David Marchand
@ 2022-07-29 13:28   ` Bruce Richardson
  1 sibling, 0 replies; 13+ messages in thread
From: Bruce Richardson @ 2022-07-29 13:28 UTC (permalink / raw)
  To: David Marchand; +Cc: dev

On Fri, Jul 29, 2022 at 02:42:55PM +0200, David Marchand wrote:
> Since commit 49b536fc3060 ("eal: load only shared libs from driver ...),
> we can specify a build directory to the -d option.
> 
> Suggested-by: Bruce Richardson <bruce.richardson@intel.com>
> Signed-off-by: David Marchand <david.marchand@redhat.com>

Acked-by: Bruce Richardson <bruce.richardson@intel.com>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] app/test: invoke all telemetry commands
  2022-07-29 13:27     ` Bruce Richardson
@ 2022-07-29 13:42       ` David Marchand
  0 siblings, 0 replies; 13+ messages in thread
From: David Marchand @ 2022-07-29 13:42 UTC (permalink / raw)
  To: Bruce Richardson
  Cc: dev, Chengwen Feng, Aaron Conole, Michael Santana, Ciara Power

On Fri, Jul 29, 2022 at 3:27 PM Bruce Richardson
<bruce.richardson@intel.com> wrote:
> > > Rather than looping for each driver and building a huge cmdline, we should
> > > just be able to pass in the path to the drivers directory, and have DPDK
> > > auto-load all .so files there. Passing in "meson.project_build_root() +
> > > '/drivers'" should probably work. If we want a more correct way to get the
> > > drivers build directory, we can call meson.current_build_dir() when
> > > processing the drivers and save off that value to be reused here.
> >
> > Or simply resolve this with a:
> > test_args += ['-d', fs.parent(dpdk_drivers[0].full_path())]
> >
> > But the problem is that the fs meson module comes with version 0.53 afaics.
> > Any elegant alternative idea?
> >
> I think the approach you have taken in the v2 is best.

I'm happy that you like your own suggestion ;-).
Joke aside, thanks Bruce.


-- 
David Marchand


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 2/2] app/test: invoke all telemetry commands
  2022-07-29 12:42   ` [PATCH v2 2/2] app/test: invoke all telemetry commands David Marchand
@ 2022-07-29 18:04     ` Aaron Conole
  2022-08-16 16:20     ` Power, Ciara
  1 sibling, 0 replies; 13+ messages in thread
From: Aaron Conole @ 2022-07-29 18:04 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, Chengwen Feng, Michael Santana, Ciara Power

David Marchand <david.marchand@redhat.com> writes:

> Try and call all possible telemetry commands.
> Each commands is tested with no argument, 0 (for command that accepts
> a single integer like for a port identifier) and z (to catch commands
> not properly validating input).
> Fake cryptodev, dmadev, ethdev, eventdev and rawdev devices are created
> using dummy drivers.
>
> Output of the commands is not checked, the point of this test is mainly
> to catch simple issues and leaks (when coupled with ASan in the CI).
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> Acked-by: Chengwen Feng <fengchengwen@huawei.com>
> ---

Acked-by: Aaron Conole <aconole@redhat.com>


^ permalink raw reply	[flat|nested] 13+ messages in thread

* RE: [PATCH v2 2/2] app/test: invoke all telemetry commands
  2022-07-29 12:42   ` [PATCH v2 2/2] app/test: invoke all telemetry commands David Marchand
  2022-07-29 18:04     ` Aaron Conole
@ 2022-08-16 16:20     ` Power, Ciara
  2022-08-26  9:42       ` David Marchand
  1 sibling, 1 reply; 13+ messages in thread
From: Power, Ciara @ 2022-08-16 16:20 UTC (permalink / raw)
  To: David Marchand, dev; +Cc: Chengwen Feng, Aaron Conole, Michael Santana



> -----Original Message-----
> From: David Marchand <david.marchand@redhat.com>
> Sent: Friday 29 July 2022 13:43
> To: dev@dpdk.org
> Cc: Chengwen Feng <fengchengwen@huawei.com>; Aaron Conole
> <aconole@redhat.com>; Michael Santana <maicolgabriel@hotmail.com>;
> Power, Ciara <ciara.power@intel.com>
> Subject: [PATCH v2 2/2] app/test: invoke all telemetry commands
> 
> Try and call all possible telemetry commands.
> Each commands is tested with no argument, 0 (for command that accepts a
> single integer like for a port identifier) and z (to catch commands not properly
> validating input).
> Fake cryptodev, dmadev, ethdev, eventdev and rawdev devices are created
> using dummy drivers.
> 
> Output of the commands is not checked, the point of this test is mainly to catch
> simple issues and leaks (when coupled with ASan in the CI).
> 
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> Acked-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
Good idea, thanks!
Acked-by: Ciara Power <ciara.power@intel.com>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 2/2] app/test: invoke all telemetry commands
  2022-08-16 16:20     ` Power, Ciara
@ 2022-08-26  9:42       ` David Marchand
  0 siblings, 0 replies; 13+ messages in thread
From: David Marchand @ 2022-08-26  9:42 UTC (permalink / raw)
  To: David Marchand
  Cc: dev, Chengwen Feng, Aaron Conole, Michael Santana, Power, Ciara,
	Bruce Richardson

On Tue, Aug 16, 2022 at 6:20 PM Power, Ciara <ciara.power@intel.com> wrote:
> > Try and call all possible telemetry commands.
> > Each commands is tested with no argument, 0 (for command that accepts a
> > single integer like for a port identifier) and z (to catch commands not properly
> > validating input).
> > Fake cryptodev, dmadev, ethdev, eventdev and rawdev devices are created
> > using dummy drivers.
> >
> > Output of the commands is not checked, the point of this test is mainly to catch
> > simple issues and leaks (when coupled with ASan in the CI).
> >
> > Signed-off-by: David Marchand <david.marchand@redhat.com>
> > Acked-by: Chengwen Feng <fengchengwen@huawei.com>
Acked-by: Aaron Conole <aconole@redhat.com>
> Acked-by: Ciara Power <ciara.power@intel.com>

Series applied, thanks.


-- 
David Marchand


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2022-08-26  9:42 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-29  9:54 [PATCH] app/test: invoke all telemetry commands David Marchand
2022-07-29 10:20 ` Bruce Richardson
2022-07-29 11:13   ` David Marchand
2022-07-29 11:28     ` Bruce Richardson
2022-07-29 11:53   ` David Marchand
2022-07-29 13:27     ` Bruce Richardson
2022-07-29 13:42       ` David Marchand
2022-07-29 12:42 ` [PATCH v2 1/2] app/test: load drivers using build directory David Marchand
2022-07-29 12:42   ` [PATCH v2 2/2] app/test: invoke all telemetry commands David Marchand
2022-07-29 18:04     ` Aaron Conole
2022-08-16 16:20     ` Power, Ciara
2022-08-26  9:42       ` David Marchand
2022-07-29 13:28   ` [PATCH v2 1/2] app/test: load drivers using build directory Bruce Richardson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).