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