| #!/usr/bin/env python3 |
| """Run the Mbed TLS demo scripts. |
| """ |
| import argparse |
| import glob |
| import subprocess |
| import sys |
| |
| def run_demo(demo, quiet=False): |
| """Run the specified demo script. Return True if it succeeds.""" |
| args = {} |
| if quiet: |
| args['stdout'] = subprocess.DEVNULL |
| args['stderr'] = subprocess.DEVNULL |
| returncode = subprocess.call([demo], **args) |
| return returncode == 0 |
| |
| def run_demos(demos, quiet=False): |
| """Run the specified demos and print summary information about failures. |
| |
| Return True if all demos passed and False if a demo fails. |
| """ |
| failures = [] |
| for demo in demos: |
| if not quiet: |
| print('#### {} ####'.format(demo)) |
| success = run_demo(demo, quiet=quiet) |
| if not success: |
| failures.append(demo) |
| if not quiet: |
| print('{}: FAIL'.format(demo)) |
| if quiet: |
| print('{}: {}'.format(demo, 'PASS' if success else 'FAIL')) |
| else: |
| print('') |
| successes = len(demos) - len(failures) |
| print('{}/{} demos passed'.format(successes, len(demos))) |
| if failures and not quiet: |
| print('Failures:', *failures) |
| return not failures |
| |
| def run_all_demos(quiet=False): |
| """Run all the available demos. |
| |
| Return True if all demos passed and False if a demo fails. |
| """ |
| all_demos = glob.glob('programs/*/*_demo.sh') |
| if not all_demos: |
| # Keep the message on one line. pylint: disable=line-too-long |
| raise Exception('No demos found. run_demos needs to operate from the Mbed TLS toplevel directory.') |
| return run_demos(all_demos, quiet=quiet) |
| |
| def main(): |
| parser = argparse.ArgumentParser(description=__doc__) |
| parser.add_argument('--quiet', '-q', |
| action='store_true', |
| help="suppress the output of demos") |
| options = parser.parse_args() |
| success = run_all_demos(quiet=options.quiet) |
| sys.exit(0 if success else 1) |
| |
| if __name__ == '__main__': |
| main() |