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