#!/usr/bin/env python3 import threading import os import common import lkmc.import_path class Main(common.TestCliFunction): def __init__(self): super().__init__( description='''\ https://github.com/cirosantilli/linux-kernel-module-cheat#test-gdb ''' ) self.add_argument( 'tests', nargs='*', help='''\ If given, run only the given tests. Otherwise, run all tests, found by searching for the Python test files. ''' ) def timed_main(self): run = lkmc.import_path.import_path_main('run') run_gdb = lkmc.import_path.import_path_main('run-gdb') if self.env['arch'] in self.env['crosstool_ng_supported_archs']: test_sources = [] if self.env['tests'] == []: source_paths = [] for filename in sorted(os.listdir(self.env['baremetal_source_dir'])): base, ext = os.path.splitext(filename) if ext in self.env['build_in_exts']: test_sources.append( os.path.join( self.env['baremetal_source_dir'], filename ) ) for root, dirnames, filenames in os.walk( os.path.join( self.env['baremetal_source_dir'], 'arch', self.env['arch'] ) ): for filename in filenames: base, ext = os.path.splitext(filename) if ext in self.env['build_in_exts']: test_sources.append(os.path.join(root, filename)) else: test_sources = self.env['tests'] for test_source_full in test_sources: base, ext = os.path.splitext(test_source_full) if os.path.exists(base + '.py'): test_source_base = os.path.relpath(base, self.env['root_dir']) common_args = self.get_common_args() common_args['baremetal'] = test_source_base + ext run_args = common_args.copy() run_args['gdb_wait'] = True run_args['background'] = True test_id_string = self.test_setup(run_args, test_source_base) run_thread = threading.Thread(target=lambda: run(**run_args)) run_thread.start() gdb_args = common_args.copy() gdb_args['test'] = True run_gdb(**gdb_args) run_thread.join() self.test_teardown(run, 0, test_id_string) if __name__ == '__main__': Main().cli()