mirror of
https://github.com/saymrwulf/uhd.git
synced 2026-05-16 21:10:10 +00:00
Usually, devtest is run via make (or ninja), and will use the correct Python interpreter. When running directly on the command line, it is important to pick the right Python interpreter so it will work with the Python API. Here, we change the default interpreter from Python 2 to 3, because that's the more common version, and will be the only option for upcoming UHD 4.0 anyway.
137 lines
5.4 KiB
Python
Executable file
137 lines
5.4 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
#
|
|
# Copyright 2015-2016 Ettus Research LLC
|
|
# Copyright 2018 Ettus Research, a National Instruments Company
|
|
#
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
#
|
|
"""
|
|
Device test runner.
|
|
"""
|
|
|
|
from __future__ import print_function
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
import argparse
|
|
import logging
|
|
from usrp_probe import get_usrp_list
|
|
|
|
def setup_parser():
|
|
""" Set up argparser """
|
|
parser = argparse.ArgumentParser(description="Test utility for UHD/USRP.")
|
|
parser.add_argument('--devtest-pattern', '-p', default='*', help='e.g. b2xx')
|
|
parser.add_argument('--device-filter', '-f', required=True, help='b200, x300, ...')
|
|
parser.add_argument('--log-dir', '-l', default='.')
|
|
parser.add_argument('--src-dir', default='.',
|
|
help='Directory where the test sources are stored')
|
|
parser.add_argument('--build-dir', help='Build dir (where examples/ and utils/ are)')
|
|
parser.add_argument('--build-type', default='Release')
|
|
parser.add_argument('--python-interp', default=sys.executable)
|
|
return parser
|
|
|
|
def setup_env(args):
|
|
" Add build dir into lib + exe paths, depending on OS "
|
|
def setup_env_win(env, build_dir, build_type):
|
|
" Add build dir into paths (Windows)"
|
|
env['PATH'] = "{build_dir}/lib/{build_type};" + \
|
|
"{build_dir}/examples/{build_type};" + \
|
|
"{build_dir}/utils/{build_type};{path}".format(
|
|
build_dir=build_dir,
|
|
build_type=build_type,
|
|
path=env.get('PATH', ''))
|
|
env['LIBPATH'] = "{build_dir}/lib/{build_type};{path}".format(
|
|
build_dir=build_dir, build_type=build_type, path=env.get('LIBPATH', '')
|
|
)
|
|
env['LIB'] = "{build_dir}/lib/{build_type};{path}".format(
|
|
build_dir=build_dir, build_type=build_type, path=env.get('LIB', '')
|
|
)
|
|
env['PYTHONPATH'] = "{build_dir}/python".format(build_dir=build_dir)
|
|
return env
|
|
def setup_env_unix(env, build_dir):
|
|
" Add build dir into paths (Unices)"
|
|
env['PATH'] = "{build_dir}/examples:{build_dir}/utils:{path}".format(
|
|
build_dir=build_dir, path=env.get('PATH', '')
|
|
)
|
|
env['LD_LIBRARY_PATH'] = "{build_dir}/lib:{path}".format(
|
|
build_dir=build_dir, path=env.get('LD_LIBRARY_PATH', '')
|
|
)
|
|
env['PYTHONPATH'] = "{build_dir}/python".format(build_dir=build_dir)
|
|
return env
|
|
def setup_env_osx(env, build_dir):
|
|
" Add build dir into paths (OS X)"
|
|
env['PATH'] = "{build_dir}/examples:{build_dir}/utils:{path}".format(
|
|
build_dir=build_dir, path=env.get('PATH', '')
|
|
)
|
|
env['DYLD_LIBRARY_PATH'] = "{build_dir}/lib:{path}".format(
|
|
build_dir=build_dir, path=env.get('DYLD_LIBRARY_PATH', '')
|
|
)
|
|
env['PYTHONPATH'] = "{build_dir}/python".format(build_dir=build_dir)
|
|
return env
|
|
### Go
|
|
env = os.environ
|
|
if sys.platform.startswith('linux'):
|
|
env = setup_env_unix(env, args.build_dir)
|
|
elif sys.platform.startswith('win'):
|
|
env = setup_env_win(env, args.build_dir, args.build_type)
|
|
elif sys.platform.startswith('darwin'):
|
|
env = setup_env_osx(env, args.build_dir)
|
|
else:
|
|
print("Devtest not supported on this platform ({0})."
|
|
.format(sys.platform))
|
|
exit(1)
|
|
return env
|
|
|
|
def main():
|
|
" Go, go, go! "
|
|
args = setup_parser().parse_args()
|
|
env = setup_env(args)
|
|
devtest_pattern = "devtest_{p}.py".format(p=args.devtest_pattern)
|
|
uhd_args_list = get_usrp_list("type=" + args.device_filter, env)
|
|
if len(uhd_args_list) == 0:
|
|
print("No devices found. Exiting.")
|
|
exit(1)
|
|
tests_passed = True
|
|
for uhd_idx, uhd_info in enumerate(uhd_args_list):
|
|
print('--- Running all tests for device {dev} ({prod}, Serial: {ser}).'.format(
|
|
dev=uhd_idx,
|
|
prod=uhd_info.get('product', 'USRP'),
|
|
ser=uhd_info.get('serial')
|
|
))
|
|
print('--- This will take some time. Better grab a cup of tea.')
|
|
sys.stdout.flush()
|
|
args_str = uhd_info['args']
|
|
env['_UHD_TEST_ARGS_STR'] = args_str
|
|
logfile_name = "log{}.log".format(
|
|
args_str.replace('type=', '_').replace('serial=', '_').replace(',', '')
|
|
)
|
|
resultsfile_name = "results{}.log".format(
|
|
args_str.replace('type=', '_').replace('serial=', '_').replace(',', '')
|
|
)
|
|
env['_UHD_TEST_LOGFILE'] = os.path.join(args.log_dir, logfile_name)
|
|
env['_UHD_TEST_RESULTSFILE'] = os.path.join(args.log_dir, resultsfile_name)
|
|
env['_UHD_TEST_LOG_LEVEL'] = str(logging.INFO)
|
|
env['_UHD_TEST_PRINT_LEVEL'] = str(logging.WARNING)
|
|
env['_UHD_BUILD_DIR'] = str(args.build_dir)
|
|
env['_UHD_DEVTEST_SRC_DIR'] = str(args.src_dir)
|
|
proc = subprocess.Popen(
|
|
[
|
|
args.python_interp, "-m", "unittest", "discover", "-v",
|
|
"-s", args.src_dir,
|
|
"-p", devtest_pattern,
|
|
],
|
|
env=env,
|
|
stdin=subprocess.PIPE,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.STDOUT,
|
|
universal_newlines=True
|
|
)
|
|
print(proc.communicate()[0])
|
|
sys.stdout.flush()
|
|
if proc.returncode != 0:
|
|
tests_passed = False
|
|
print('--- Done testing all attached devices.')
|
|
return tests_passed
|
|
|
|
if __name__ == "__main__":
|
|
exit(not main())
|