mirror of
https://github.com/saymrwulf/uhd.git
synced 2026-05-16 21:10:10 +00:00
Add unit testing framework to MPM which can be run by calling "make test". The testing is done using the built in unittest Python module. Tests can be run on a dev machine or on the USRP itself when compiling natively.
64 lines
1.8 KiB
Python
Executable file
64 lines
1.8 KiB
Python
Executable file
#
|
|
# Copyright 2019 Ettus Research, a National Instruments Brand
|
|
#
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
#
|
|
"""
|
|
USRP MPM Python Unit testing framework
|
|
"""
|
|
|
|
import unittest
|
|
import sys
|
|
from sys_utils_tests import TestNet
|
|
|
|
TESTS = {
|
|
'__all__': {TestNet},
|
|
'n3xx': set(),
|
|
}
|
|
|
|
def get_test_suite(device_name=''):
|
|
"""
|
|
Gets a test suite (collection of test cases) which is relevant for
|
|
the specified device.
|
|
"""
|
|
# A collection of test suites, generated by test loaders, which will
|
|
# be later combined
|
|
test_suite_list = []
|
|
test_loader = unittest.TestLoader()
|
|
|
|
# Combine generic and device specific tests
|
|
test_cases = TESTS.get('__all__') | TESTS.get(device_name, set())
|
|
for case in test_cases:
|
|
new_suite = test_loader.loadTestsFromTestCase(case)
|
|
for test in new_suite:
|
|
# Set up test case class for a specific device.
|
|
# Each test uses a different test case instance.
|
|
if (hasattr(test, 'set_device_name')) and (device_name != ''):
|
|
test.set_device_name(device_name)
|
|
test_suite_list.append(new_suite)
|
|
|
|
# Individual test suites are combined into a master test suite
|
|
test_suite = unittest.TestSuite(test_suite_list)
|
|
return test_suite
|
|
|
|
def run_tests(device_name=''):
|
|
"""
|
|
Executes the unit tests specified by the test suite.
|
|
This should be called from CMake.
|
|
"""
|
|
test_result = unittest.TestResult()
|
|
test_runner = unittest.TextTestRunner(verbosity=2)
|
|
test_result = test_runner.run(get_test_suite(device_name))
|
|
return test_result
|
|
|
|
def main():
|
|
if len(sys.argv) >= 2:
|
|
mpm_device_name = sys.argv[1]
|
|
else:
|
|
mpm_device_name = ''
|
|
|
|
if not run_tests(mpm_device_name).wasSuccessful():
|
|
sys.exit(-1)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|