OLD | NEW |
| (Empty) |
1 #!/usr/bin/python2.4 | |
2 # | |
3 # Copyright 2010 Google Inc. | |
4 # | |
5 # Licensed under the Apache License, Version 2.0 (the "License"); | |
6 # you may not use this file except in compliance with the License. | |
7 # You may obtain a copy of the License at | |
8 # | |
9 # http://www.apache.org/licenses/LICENSE-2.0 | |
10 # | |
11 # Unless required by applicable law or agreed to in writing, software | |
12 # distributed under the License is distributed on an "AS IS" BASIS, | |
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 # See the License for the specific language governing permissions and | |
15 # limitations under the License. | |
16 # ======================================================================== | |
17 | |
18 """Runs a set of unit tests and returns success only if they all succeed. | |
19 | |
20 This script assumes it is being run from the omaha directory. | |
21 | |
22 To run unit tests for Omaha's default set of test directories, just run the file | |
23 from the command line. | |
24 """ | |
25 | |
26 | |
27 import dircache | |
28 import os | |
29 | |
30 TEST_EXECUTABLE_RHS = '_unittest.exe' | |
31 | |
32 # Build paths that contain tests. | |
33 STAGING_PATH = 'scons-out\\dbg-win\\staging' | |
34 TESTS_PATH = 'scons-out\\dbg-win\\tests' | |
35 | |
36 | |
37 def RunTest(test_path): | |
38 """Runs a test and returns its exit code. | |
39 | |
40 Assumes the tests can be run from any directory. In other words, it does not | |
41 chdir. | |
42 | |
43 Args: | |
44 test_path: Path to test executables. | |
45 | |
46 Returns: | |
47 The exit code from the test process. | |
48 """ | |
49 | |
50 print '\nRunning %s . . .\n' % test_path | |
51 | |
52 # Put './' in front of the file name to avoid accidentally running a file with | |
53 # the same name in some other directory if test_path were just a file name. | |
54 return os.system(os.path.join('.', test_path)) | |
55 | |
56 | |
57 def RunTests(test_paths): | |
58 """Runs all tests specified by test_paths. | |
59 | |
60 Args: | |
61 test_paths: A list of paths to test executables. | |
62 | |
63 Returns: | |
64 0 if all tests are successful. | |
65 1 if some tests fail, or if there is an error. | |
66 """ | |
67 | |
68 if not test_paths or len(test_paths) < 1: | |
69 return 1 | |
70 | |
71 print 'Found the following tests to run:' | |
72 for test in test_paths: | |
73 print '\t%s' % test | |
74 | |
75 # Run all tests and remembers those that failed. | |
76 failed_tests = [t for t in test_paths if RunTest(t)] | |
77 | |
78 print '\n\n%s test executables were run.' % len(test_paths) | |
79 | |
80 failed_test_count = len(failed_tests) | |
81 if failed_test_count: | |
82 # Lists the executables that failed so the user can investigate them. | |
83 print 'FAILED!' | |
84 print 'The following %s tests failed:\n' % failed_test_count | |
85 for test in failed_tests: | |
86 print test | |
87 return 1 | |
88 else: | |
89 # No, there is none. | |
90 if test_paths: | |
91 print 'All of them PASSED!' | |
92 return 0 | |
93 | |
94 | |
95 def GetTestsInDirs(test_dirs): | |
96 """Returns a list of all unit test executables in test_dirs. | |
97 | |
98 Does not search subdirectories. | |
99 | |
100 Args: | |
101 test_dirs: A list of directories to search. | |
102 | |
103 Returns: | |
104 List of all unit tests. | |
105 """ | |
106 | |
107 tests = [] | |
108 | |
109 for test_dir in test_dirs: | |
110 # Use dircache.listdir so order is alphabetical and thus deterministic. | |
111 files = dircache.listdir(test_dir) | |
112 | |
113 for test_file in files: | |
114 if test_file.endswith(TEST_EXECUTABLE_RHS): | |
115 relative_path = os.path.join(test_dir, test_file) | |
116 if os.path.isfile(relative_path): | |
117 tests += [relative_path] | |
118 | |
119 return tests | |
120 | |
121 # Run a unit test when the module is run directly. | |
122 if __name__ == '__main__': | |
123 # List of paths that contain unit tests to run. | |
124 dirs_containing_tests = [STAGING_PATH, TESTS_PATH] | |
125 | |
126 tests_to_run = GetTestsInDirs(dirs_containing_tests) | |
127 | |
128 RunTests(tests_to_run) | |
OLD | NEW |