test: detect number of cores with meson
authorAaron Conole <aconole@redhat.com>
Fri, 12 Apr 2019 16:21:41 +0000 (12:21 -0400)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 17 Apr 2019 11:57:56 +0000 (13:57 +0200)
The arguments being passed will cause failures on laptops that have,
for instance, 2 cores only.  Most of the tests don't require more
than a single core.  Some require multiple cores (but those tests
should be modified to 'SKIP' when the correct number of cores
aren't available).

The unit test results shouldn't be impacted by this change, but it
allows for a future enhancement to pass flags such as '--no-huge'.

Also include a fix to a reported issue with running on FreeBSD.

Signed-off-by: Aaron Conole <aconole@redhat.com>
Reviewed-by: David Marchand <david.marchand@redhat.com>
Acked-by: Luca Boccassi <bluca@debian.org>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
app/test/meson.build

index 867cc58..5e056eb 100644 (file)
@@ -344,17 +344,43 @@ if get_option('tests')
        timeout_seconds = 600
        timeout_seconds_fast = 10
 
+       # Retrieve the number of CPU cores, defaulting to 4.
+       num_cores = '0-3'
+       if host_machine.system() == 'linux'
+               num_cores = run_command('cat',
+                                       '/sys/devices/system/cpu/present'
+                                      ).stdout().strip()
+       elif host_machine.system() == 'freebsd'
+               snum_cores = run_command('/sbin/sysctl', '-n',
+                                        'hw.ncpu').stdout().strip()
+               inum_cores = snum_cores.to_int() - 1
+                num_cores = '0-@0@'.format(inum_cores)
+       endif
+
+       num_cores_arg = '-l ' + num_cores
+
+       test_args = [num_cores_arg, '-n 4']
        foreach arg : fast_parallel_test_names
-               test(arg, dpdk_test,
-                       env : ['DPDK_TEST=' + arg],
-                       args : ['-c f','-n 4', '--file-prefix=@0@'.format(arg)],
+               if host_machine.system() == 'linux'
+                       test(arg, dpdk_test,
+                                 env : ['DPDK_TEST=' + arg],
+                                 args : test_args +
+                                        ['--file-prefix=@0@'.format(arg)],
+                       timeout : timeout_seconds_fast,
+                       suite : 'fast-tests')
+               else
+                       test(arg, dpdk_test,
+                               env : ['DPDK_TEST=' + arg],
+                               args : test_args,
                        timeout : timeout_seconds_fast,
                        suite : 'fast-tests')
+               endif
        endforeach
 
        foreach arg : fast_non_parallel_test_names
                test(arg, dpdk_test,
                        env : ['DPDK_TEST=' + arg],
+                       args : test_args,
                        timeout : timeout_seconds_fast,
                        is_parallel : false,
                        suite : 'fast-tests')
@@ -363,6 +389,7 @@ if get_option('tests')
        foreach arg : perf_test_names
                test(arg, dpdk_test,
                env : ['DPDK_TEST=' + arg],
+               args : test_args,
                timeout : timeout_seconds,
                is_parallel : false,
                suite : 'perf-tests')
@@ -371,6 +398,7 @@ if get_option('tests')
        foreach arg : driver_test_names
                test(arg, dpdk_test,
                        env : ['DPDK_TEST=' + arg],
+                       args : test_args,
                        timeout : timeout_seconds,
                        is_parallel : false,
                        suite : 'driver-tests')
@@ -379,6 +407,7 @@ if get_option('tests')
        foreach arg : dump_test_names
                test(arg, dpdk_test,
                        env : ['DPDK_TEST=' + arg],
+                       args : test_args,
                        timeout : timeout_seconds,
                        is_parallel : false,
                        suite : 'debug-tests')