mirror of
https://github.com/saymrwulf/uhd.git
synced 2026-05-16 21:10:10 +00:00
subprocess call in python3+ return stderr and stdout object is byte object instead of text. This caused many issue with parsing the ouput in devtest. These are not an issue in python2. This change will make devtest more python3 compatible. Signed-off-by: Trung.Tran<trung.tran@ettus.com>
136 lines
5.3 KiB
Python
Executable file
136 lines
5.3 KiB
Python
Executable file
#!/usr/bin/env python
|
|
#
|
|
# 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', default=None, 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', default=None, help='Build dir (where examples/ and utils/ are)')
|
|
parser.add_argument('--build-type', default='Release')
|
|
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(
|
|
[
|
|
"python", "-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())
|
|
|