xref: /dpdk/app/test-bbdev/test-bbdev.py (revision c3fabbe957a7f1357184f4fd41711fc4afa770e7)
1#!/usr/bin/env python
2
3# SPDX-License-Identifier: BSD-3-Clause
4# Copyright(c) 2017 Intel Corporation
5
6from __future__ import print_function
7import sys
8import os
9import argparse
10import subprocess
11import shlex
12
13from threading import Timer
14
15def kill(process):
16    print("ERROR: Test app timed out")
17    process.kill()
18
19if "RTE_SDK" in os.environ:
20    dpdk_path = os.environ["RTE_SDK"]
21else:
22    dpdk_path = "../.."
23
24if "RTE_TARGET" in os.environ:
25    dpdk_target = os.environ["RTE_TARGET"]
26else:
27    dpdk_target = "x86_64-native-linux-gcc"
28
29parser = argparse.ArgumentParser(
30                    description='BBdev Unit Test Application',
31                    formatter_class=argparse.ArgumentDefaultsHelpFormatter)
32parser.add_argument("-p", "--testapp-path",
33                    help="specifies path to the bbdev test app",
34                    default=dpdk_path + "/" + dpdk_target + "/app/testbbdev")
35parser.add_argument("-e", "--eal-params",
36                    help="EAL arguments which are passed to the test app",
37                    default="--vdev=baseband_null0")
38parser.add_argument("-t", "--timeout",
39                    type=int,
40                    help="Timeout in seconds",
41                    default=300)
42parser.add_argument("-c", "--test-cases",
43                    nargs="+",
44                    help="Defines test cases to run. Run all if not specified")
45parser.add_argument("-v", "--test-vector",
46                    nargs="+",
47                    help="Specifies paths to the test vector files.",
48                    default=[dpdk_path +
49                    "/app/test-bbdev/test_vectors/bbdev_null.data"])
50parser.add_argument("-n", "--num-ops",
51                    type=int,
52                    help="Number of operations to process on device.",
53                    default=32)
54parser.add_argument("-b", "--burst-size",
55                    nargs="+",
56                    type=int,
57                    help="Operations enqueue/dequeue burst size.",
58                    default=[32])
59parser.add_argument("-l", "--num-lcores",
60                    type=int,
61                    help="Number of lcores to run.",
62                    default=16)
63parser.add_argument("-i", "--init-device",
64                    action='store_true',
65                    help="Initialise PF device with default values.")
66
67args = parser.parse_args()
68
69if not os.path.exists(args.testapp_path):
70    print("No such file: " + args.testapp_path)
71    sys.exit(1)
72
73params = [args.testapp_path]
74if args.eal_params:
75    params.extend(shlex.split(args.eal_params))
76
77params.extend(["--"])
78
79if args.num_ops:
80    params.extend(["-n", str(args.num_ops)])
81
82if args.num_lcores:
83    params.extend(["-l", str(args.num_lcores)])
84
85if args.test_cases:
86    params.extend(["-c"])
87    params.extend([",".join(args.test_cases)])
88
89if args.init_device:
90    params.extend(["-i"])
91
92
93exit_status = 0
94for vector in args.test_vector:
95    for burst_size in args.burst_size:
96        call_params = params[:]
97        call_params.extend(["-v", vector])
98        call_params.extend(["-b", str(burst_size)])
99        params_string = " ".join(call_params)
100
101        print("Executing: {}".format(params_string))
102        app_proc = subprocess.Popen(call_params)
103        if args.timeout > 0:
104            timer = Timer(args.timeout, kill, [app_proc])
105            timer.start()
106
107        try:
108            app_proc.communicate()
109        except:
110            print("Error: failed to execute: {}".format(params_string))
111        finally:
112            timer.cancel()
113
114        if app_proc.returncode != 0:
115            exit_status = 1
116            print("ERROR TestCase failed. Failed test for vector {}. Return code: {}".format(
117                vector, app_proc.returncode))
118
119sys.exit(exit_status)
120