run-test-suites.pl 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/usr/bin/perl
  2. # run-test-suites.pl
  3. #
  4. # This file is part of mbed TLS (https://tls.mbed.org)
  5. #
  6. # Copyright (c) 2015-2016, ARM Limited, All Rights Reserved
  7. #
  8. # Purpose
  9. #
  10. # Executes all the available test suites, and provides a basic summary of the
  11. # results.
  12. #
  13. # Usage: run-test-suites.pl [-v]
  14. #
  15. # Options :
  16. # -v|--verbose - Provide a pass/fail/skip breakdown per test suite and
  17. # in total
  18. #
  19. use warnings;
  20. use strict;
  21. use utf8;
  22. use open qw(:std utf8);
  23. use constant FALSE => 0;
  24. use constant TRUE => 1;
  25. my $verbose;
  26. my $switch = shift;
  27. if ( defined($switch) && ( $switch eq "-v" || $switch eq "--verbose" ) ) {
  28. $verbose = TRUE;
  29. }
  30. my @suites = grep { ! /\.(?:c|gcno|gcda|dSYM)$/ } glob 'test_suite_*';
  31. die "$0: no test suite found\n" unless @suites;
  32. # in case test suites are linked dynamically
  33. $ENV{'LD_LIBRARY_PATH'} = '../library';
  34. my $prefix = $^O eq "MSWin32" ? '' : './';
  35. my ($failed_suites, $total_tests_run, $failed, $suite_cases_passed,
  36. $suite_cases_failed, $suite_cases_skipped, $total_cases_passed,
  37. $total_cases_failed, $total_cases_skipped );
  38. for my $suite (@suites)
  39. {
  40. print "$suite ", "." x ( 72 - length($suite) - 2 - 4 ), " ";
  41. my $result = `$prefix$suite`;
  42. $suite_cases_passed = () = $result =~ /.. PASS/g;
  43. $suite_cases_failed = () = $result =~ /.. FAILED/g;
  44. $suite_cases_skipped = () = $result =~ /.. ----/g;
  45. if( $result =~ /PASSED/ ) {
  46. print "PASS\n";
  47. } else {
  48. $failed_suites++;
  49. print "FAIL\n";
  50. }
  51. my ($passed, $tests, $skipped) = $result =~ /([0-9]*) \/ ([0-9]*) tests.*?([0-9]*) skipped/;
  52. $total_tests_run += $tests - $skipped;
  53. if ( $verbose ) {
  54. print "(test cases passed:", $suite_cases_passed,
  55. " failed:", $suite_cases_failed,
  56. " skipped:", $suite_cases_skipped,
  57. " of total:", ($suite_cases_passed + $suite_cases_failed +
  58. $suite_cases_skipped),
  59. ")\n"
  60. }
  61. $total_cases_passed += $suite_cases_passed;
  62. $total_cases_failed += $suite_cases_failed;
  63. $total_cases_skipped += $suite_cases_skipped;
  64. }
  65. print "-" x 72, "\n";
  66. print $failed_suites ? "FAILED" : "PASSED";
  67. printf " (%d suites, %d tests run)\n", scalar @suites, $total_tests_run;
  68. if ( $verbose ) {
  69. print " test cases passed :", $total_cases_passed, "\n";
  70. print " failed :", $total_cases_failed, "\n";
  71. print " skipped :", $total_cases_skipped, "\n";
  72. print " of tests executed :", ( $total_cases_passed + $total_cases_failed ),
  73. "\n";
  74. print " of available tests :",
  75. ( $total_cases_passed + $total_cases_failed + $total_cases_skipped ),
  76. "\n"
  77. }
  78. exit( $failed_suites ? 1 : 0 );