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") 30parser.add_argument("-T", "--timeout", 31 type=int, 32 help="Timeout in seconds", 33 default=600) 34parser.add_argument("-c", "--test-cases", 35 nargs="+", 36 help="Defines test cases to run. Run all if not specified") 37parser.add_argument("-v", "--test-vector", 38 nargs="+", 39 help="Specifies paths to the test vector files.", 40 default=[dpdk_path + 41 "/app/test-bbdev/test_vectors/bbdev_null.data"]) 42parser.add_argument("-n", "--num-ops", 43 type=int, 44 help="Number of operations to process on device.", 45 default=32) 46parser.add_argument("-b", "--burst-size", 47 nargs="+", 48 type=int, 49 help="Operations enqueue/dequeue burst size.", 50 default=[32]) 51parser.add_argument("-s", "--snr", 52 type=int, 53 help="SNR in dB for BLER tests", 54 default=0) 55parser.add_argument("-t", "--iter-max", 56 type=int, 57 help="Max iterations", 58 default=6) 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.snr: 80 params.extend(["-s", str(args.snr)]) 81 82if args.iter_max: 83 params.extend(["-t", str(args.iter_max)]) 84 85if args.num_ops: 86 params.extend(["-n", str(args.num_ops)]) 87 88if args.num_lcores: 89 params.extend(["-l", str(args.num_lcores)]) 90 91if args.test_cases: 92 params.extend(["-c"]) 93 params.extend([",".join(args.test_cases)]) 94 95if args.init_device: 96 params.extend(["-i"]) 97 98 99exit_status = 0 100for vector in args.test_vector: 101 for burst_size in args.burst_size: 102 call_params = params[:] 103 call_params.extend(["-v", vector]) 104 call_params.extend(["-b", str(burst_size)]) 105 params_string = " ".join(call_params) 106 107 print("Executing: {}".format(params_string)) 108 try: 109 output = subprocess.run(call_params, timeout=args.timeout, universal_newlines=True) 110 except subprocess.TimeoutExpired as e: 111 print("===========================================================") 112 print("Starting Test Suite : BBdev TimeOut Tests") 113 print("INFO: One of the tests timed out {}".format(e)) 114 print("INFO: Unexpected Error") 115 print("+ ------------------------------------------------------- +") 116 print("== test: timeout") 117 print("Unexpected Error") 118 print("TestCase [ 0] : timeout failed") 119 print(" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +") 120 print(" + Tests Failed : 1") 121 print(" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +") 122 exit_status = 1 123 if output.returncode < 0: 124 print("===========================================================") 125 print("Starting Test Suite : BBdev Exception Tests") 126 print("INFO: One of the tests returned {}".format(output.returncode)) 127 print("INFO: Unexpected Error") 128 print("+ ------------------------------------------------------- +") 129 print("== test: exception") 130 print("Unexpected Error") 131 print("TestCase [ 0] : exception failed") 132 print(" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +") 133 print(" + Tests Failed : 1") 134 print(" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +") 135 exit_status = 1 136sys.exit(exit_status) 137