OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright 2013 The Chromium Authors. All rights reserved. | 3 # Copyright 2013 The Chromium Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 """Runs all types of tests from one unified interface.""" | 7 """Runs all types of tests from one unified interface.""" |
8 | 8 |
9 import argparse | 9 import argparse |
10 import collections | 10 import collections |
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 logging.fatal(message) | 842 logging.fatal(message) |
843 sys.exit(constants.INFRA_EXIT_CODE) | 843 sys.exit(constants.INFRA_EXIT_CODE) |
844 | 844 |
845 if args.command not in _SUPPORTED_IN_PLATFORM_MODE: | 845 if args.command not in _SUPPORTED_IN_PLATFORM_MODE: |
846 infra_error('%s is not yet supported in platform mode' % args.command) | 846 infra_error('%s is not yet supported in platform mode' % args.command) |
847 | 847 |
848 with environment_factory.CreateEnvironment(args, infra_error) as env: | 848 with environment_factory.CreateEnvironment(args, infra_error) as env: |
849 with test_instance_factory.CreateTestInstance(args, infra_error) as test: | 849 with test_instance_factory.CreateTestInstance(args, infra_error) as test: |
850 with test_run_factory.CreateTestRun( | 850 with test_run_factory.CreateTestRun( |
851 args, env, test, infra_error) as test_run: | 851 args, env, test, infra_error) as test_run: |
852 results = [] | 852 all_raw_results = [] |
| 853 all_iteration_results = [] |
853 repetitions = (xrange(args.repeat + 1) if args.repeat >= 0 | 854 repetitions = (xrange(args.repeat + 1) if args.repeat >= 0 |
854 else itertools.count()) | 855 else itertools.count()) |
855 result_counts = collections.defaultdict( | 856 result_counts = collections.defaultdict( |
856 lambda: collections.defaultdict(int)) | 857 lambda: collections.defaultdict(int)) |
857 iteration_count = 0 | 858 iteration_count = 0 |
858 for _ in repetitions: | 859 for _ in repetitions: |
859 iteration_results = test_run.RunTests() | 860 raw_results = test_run.RunTests() |
860 if iteration_results is not None: | 861 if not raw_results: |
861 iteration_count += 1 | 862 continue |
862 results.append(iteration_results) | 863 |
863 for r in iteration_results.GetAll(): | 864 all_raw_results.extend(raw_results) |
864 result_counts[r.GetName()][r.GetType()] += 1 | 865 |
865 report_results.LogFull( | 866 iteration_results = base_test_result.TestRunResults() |
866 results=iteration_results, | 867 for r in reversed(raw_results): |
867 test_type=test.TestType(), | 868 iteration_results.AddTestRunResults(r) |
868 test_package=test_run.TestPackage(), | 869 all_iteration_results.append(iteration_results) |
869 annotation=getattr(args, 'annotations', None), | 870 |
870 flakiness_server=getattr(args, 'flakiness_dashboard_server', | 871 iteration_count += 1 |
871 None)) | 872 for r in iteration_results.GetAll(): |
872 if args.break_on_failure and not iteration_results.DidRunPass(): | 873 result_counts[r.GetName()][r.GetType()] += 1 |
873 break | 874 report_results.LogFull( |
| 875 results=iteration_results, |
| 876 test_type=test.TestType(), |
| 877 test_package=test_run.TestPackage(), |
| 878 annotation=getattr(args, 'annotations', None), |
| 879 flakiness_server=getattr(args, 'flakiness_dashboard_server', |
| 880 None)) |
| 881 if args.break_on_failure and not iteration_results.DidRunPass(): |
| 882 break |
874 | 883 |
875 if iteration_count > 1: | 884 if iteration_count > 1: |
876 # display summary results | 885 # display summary results |
877 # only display results for a test if at least one test did not pass | 886 # only display results for a test if at least one test did not pass |
878 all_pass = 0 | 887 all_pass = 0 |
879 tot_tests = 0 | 888 tot_tests = 0 |
880 for test_name in result_counts: | 889 for test_name in result_counts: |
881 tot_tests += 1 | 890 tot_tests += 1 |
882 if any(result_counts[test_name][x] for x in ( | 891 if any(result_counts[test_name][x] for x in ( |
883 base_test_result.ResultType.FAIL, | 892 base_test_result.ResultType.FAIL, |
884 base_test_result.ResultType.CRASH, | 893 base_test_result.ResultType.CRASH, |
885 base_test_result.ResultType.TIMEOUT, | 894 base_test_result.ResultType.TIMEOUT, |
886 base_test_result.ResultType.UNKNOWN)): | 895 base_test_result.ResultType.UNKNOWN)): |
887 logging.critical( | 896 logging.critical( |
888 '%s: %s', | 897 '%s: %s', |
889 test_name, | 898 test_name, |
890 ', '.join('%s %s' % (str(result_counts[test_name][i]), i) | 899 ', '.join('%s %s' % (str(result_counts[test_name][i]), i) |
891 for i in base_test_result.ResultType.GetTypes())) | 900 for i in base_test_result.ResultType.GetTypes())) |
892 else: | 901 else: |
893 all_pass += 1 | 902 all_pass += 1 |
894 | 903 |
895 logging.critical('%s of %s tests passed in all %s runs', | 904 logging.critical('%s of %s tests passed in all %s runs', |
896 str(all_pass), | 905 str(all_pass), |
897 str(tot_tests), | 906 str(tot_tests), |
898 str(iteration_count)) | 907 str(iteration_count)) |
899 | 908 |
900 if args.json_results_file: | 909 if args.json_results_file: |
901 json_results.GenerateJsonResultsFile( | 910 json_results.GenerateJsonResultsFile( |
902 results, args.json_results_file) | 911 all_raw_results, args.json_results_file) |
903 | 912 |
904 return (0 if all(r.DidRunPass() for r in results) | 913 return (0 if all(r.DidRunPass() for r in all_iteration_results) |
905 else constants.ERROR_EXIT_CODE) | 914 else constants.ERROR_EXIT_CODE) |
906 | 915 |
907 | 916 |
908 CommandConfigTuple = collections.namedtuple( | 917 CommandConfigTuple = collections.namedtuple( |
909 'CommandConfigTuple', | 918 'CommandConfigTuple', |
910 ['add_options_func', 'help_txt']) | 919 ['add_options_func', 'help_txt']) |
911 VALID_COMMANDS = { | 920 VALID_COMMANDS = { |
912 'gtest': CommandConfigTuple( | 921 'gtest': CommandConfigTuple( |
913 AddGTestOptions, | 922 AddGTestOptions, |
914 'googletest-based C++ tests'), | 923 'googletest-based C++ tests'), |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
963 if e.is_infra_error: | 972 if e.is_infra_error: |
964 return constants.INFRA_EXIT_CODE | 973 return constants.INFRA_EXIT_CODE |
965 return constants.ERROR_EXIT_CODE | 974 return constants.ERROR_EXIT_CODE |
966 except: # pylint: disable=W0702 | 975 except: # pylint: disable=W0702 |
967 logging.exception('Unrecognized error occurred.') | 976 logging.exception('Unrecognized error occurred.') |
968 return constants.ERROR_EXIT_CODE | 977 return constants.ERROR_EXIT_CODE |
969 | 978 |
970 | 979 |
971 if __name__ == '__main__': | 980 if __name__ == '__main__': |
972 sys.exit(main()) | 981 sys.exit(main()) |
OLD | NEW |