1#!/usr/bin/env python3 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 18dpdk_path = "../.." 19dpdk_target = "build" 20 21parser = argparse.ArgumentParser( 22 description='BBdev Unit Test Application', 23 formatter_class=argparse.ArgumentDefaultsHelpFormatter) 24parser.add_argument("-p", "--testapp-path", 25 help="specifies path to the bbdev test app", 26 default=dpdk_path + "/" + dpdk_target + "/app/dpdk-test-bbdev") 27parser.add_argument("-e", "--eal-params", 28 help="EAL arguments which must be passed to the test app", 29 default="--vdev=baseband_null0 -a00:00.0") 30# Until deprecated in next release keep -t as an valid argument for timeout, then use -T 31parser.add_argument("-t", "--timeout", 32 type=int, 33 help="Timeout in seconds", 34 default=600) 35# This will become -t option for iter_max in next release 36parser.add_argument("--iter-max", 37 type=int, 38 help="Max iterations", 39 default=6) 40parser.add_argument("-c", "--test-cases", 41 nargs="+", 42 help="Defines test cases to run. Run all if not specified") 43parser.add_argument("-v", "--test-vector", 44 nargs="+", 45 help="Specifies paths to the test vector files.", 46 default=[dpdk_path + 47 "/app/test-bbdev/test_vectors/bbdev_null.data"]) 48parser.add_argument("-n", "--num-ops", 49 type=int, 50 help="Number of operations to process on device.", 51 default=32) 52parser.add_argument("-b", "--burst-size", 53 nargs="+", 54 type=int, 55 help="Operations enqueue/dequeue burst size.", 56 default=[32]) 57parser.add_argument("-s", "--snr", 58 type=int, 59 help="SNR in dB for BLER tests", 60 default=0) 61parser.add_argument("-l", "--num-lcores", 62 type=int, 63 help="Number of lcores to run.", 64 default=16) 65parser.add_argument("-i", "--init-device", 66 action='store_true', 67 help="Initialise PF device with default values.") 68 69args = parser.parse_args() 70 71if not os.path.exists(args.testapp_path): 72 print("No such file: " + args.testapp_path) 73 sys.exit(1) 74 75params = [args.testapp_path] 76if args.eal_params: 77 params.extend(shlex.split(args.eal_params)) 78 79params.extend(["--"]) 80 81if args.snr: 82 params.extend(["-s", str(args.snr)]) 83 84if args.iter_max: 85 params.extend(["-t", str(args.iter_max)]) 86 print("The argument for iter_max will be -t in next release") 87 88if args.timeout: 89 print("The argument for timeout will be -T in next release") 90 91if args.num_ops: 92 params.extend(["-n", str(args.num_ops)]) 93 94if args.num_lcores: 95 params.extend(["-l", str(args.num_lcores)]) 96 97if args.test_cases: 98 params.extend(["-c"]) 99 params.extend([",".join(args.test_cases)]) 100 101if args.init_device: 102 params.extend(["-i"]) 103 104 105exit_status = 0 106for vector in args.test_vector: 107 for burst_size in args.burst_size: 108 call_params = params[:] 109 call_params.extend(["-v", vector]) 110 call_params.extend(["-b", str(burst_size)]) 111 params_string = " ".join(call_params) 112 113 print("Executing: {}".format(params_string)) 114 try: 115 output = subprocess.run(call_params, timeout=args.timeout, universal_newlines=True) 116 except subprocess.TimeoutExpired as e: 117 print("Starting Test Suite : BBdev TimeOut Tests") 118 print("== test: timeout") 119 print("TestCase [ 0] : timeout passed") 120 print(" + Tests Failed : 1") 121 print("Unexpected Error") 122 if output.returncode < 0: 123 print("Starting Test Suite : BBdev Exception Tests") 124 print("== test: exception") 125 print("TestCase [ 0] : exception passed") 126 print(" + Tests Failed : 1") 127 print("Unexpected Error") 128sys.exit(exit_status) 129