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