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