Gilles Peskine | 2c8bbce | 2019-06-14 18:23:03 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
| 2 | """Run the Mbed TLS demo scripts. |
| 3 | """ |
Gilles Peskine | 369f190 | 2020-04-26 22:51:05 +0200 | [diff] [blame^] | 4 | import argparse |
Gilles Peskine | 2c8bbce | 2019-06-14 18:23:03 +0200 | [diff] [blame] | 5 | import glob |
| 6 | import subprocess |
| 7 | import sys |
| 8 | |
Gilles Peskine | 369f190 | 2020-04-26 22:51:05 +0200 | [diff] [blame^] | 9 | def run_demo(demo, quiet=False): |
Gilles Peskine | 2c8bbce | 2019-06-14 18:23:03 +0200 | [diff] [blame] | 10 | """Run the specified demo script. Return True if it succeeds.""" |
Gilles Peskine | 369f190 | 2020-04-26 22:51:05 +0200 | [diff] [blame^] | 11 | args = {} |
| 12 | if quiet: |
| 13 | args['stdout'] = subprocess.DEVNULL |
| 14 | args['stderr'] = subprocess.DEVNULL |
| 15 | returncode = subprocess.call([demo], **args) |
Gilles Peskine | 2c8bbce | 2019-06-14 18:23:03 +0200 | [diff] [blame] | 16 | return returncode == 0 |
| 17 | |
Gilles Peskine | 369f190 | 2020-04-26 22:51:05 +0200 | [diff] [blame^] | 18 | def run_demos(demos, quiet=False): |
Gilles Peskine | 2c8bbce | 2019-06-14 18:23:03 +0200 | [diff] [blame] | 19 | """Run the specified demos and print summary information about failures. |
| 20 | |
| 21 | Return True if all demos passed and False if a demo fails. |
| 22 | """ |
| 23 | failures = [] |
| 24 | for demo in demos: |
Gilles Peskine | 369f190 | 2020-04-26 22:51:05 +0200 | [diff] [blame^] | 25 | if not quiet: |
| 26 | print('#### {} ####'.format(demo)) |
| 27 | success = run_demo(demo, quiet=quiet) |
Gilles Peskine | e721827 | 2020-04-26 22:33:48 +0200 | [diff] [blame] | 28 | if not success: |
Gilles Peskine | 2c8bbce | 2019-06-14 18:23:03 +0200 | [diff] [blame] | 29 | failures.append(demo) |
Gilles Peskine | 369f190 | 2020-04-26 22:51:05 +0200 | [diff] [blame^] | 30 | if not quiet: |
| 31 | print('{}: FAIL'.format(demo)) |
| 32 | if not quiet: |
| 33 | print('') |
Gilles Peskine | 2c8bbce | 2019-06-14 18:23:03 +0200 | [diff] [blame] | 34 | successes = len(demos) - len(failures) |
| 35 | print('{}/{} demos passed'.format(successes, len(demos))) |
| 36 | if failures: |
| 37 | print('Failures:', *failures) |
| 38 | return not failures |
| 39 | |
Gilles Peskine | 369f190 | 2020-04-26 22:51:05 +0200 | [diff] [blame^] | 40 | def run_all_demos(quiet=False): |
Gilles Peskine | 2c8bbce | 2019-06-14 18:23:03 +0200 | [diff] [blame] | 41 | """Run all the available demos. |
| 42 | |
| 43 | Return True if all demos passed and False if a demo fails. |
| 44 | """ |
| 45 | all_demos = glob.glob('programs/*/*_demo.sh') |
Gilles Peskine | 369f190 | 2020-04-26 22:51:05 +0200 | [diff] [blame^] | 46 | return run_demos(all_demos, quiet=quiet) |
Gilles Peskine | 2c8bbce | 2019-06-14 18:23:03 +0200 | [diff] [blame] | 47 | |
Gilles Peskine | e721827 | 2020-04-26 22:33:48 +0200 | [diff] [blame] | 48 | def main(): |
Gilles Peskine | 369f190 | 2020-04-26 22:51:05 +0200 | [diff] [blame^] | 49 | parser = argparse.ArgumentParser(description=__doc__) |
| 50 | parser.add_argument('--quiet', '-q', |
| 51 | action='store_true', |
| 52 | help="suppress the output of demos") |
| 53 | options = parser.parse_args() |
| 54 | success = run_all_demos(quiet=options.quiet) |
Gilles Peskine | e721827 | 2020-04-26 22:33:48 +0200 | [diff] [blame] | 55 | sys.exit(0 if success else 1) |
| 56 | |
Gilles Peskine | 2c8bbce | 2019-06-14 18:23:03 +0200 | [diff] [blame] | 57 | if __name__ == '__main__': |
Gilles Peskine | e721827 | 2020-04-26 22:33:48 +0200 | [diff] [blame] | 58 | main() |