| #!/usr/bin/python |
| |
| import os, sys |
| import unittest_suite |
| from autotest_lib.client.common_lib import utils |
| |
| |
| root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) |
| |
| |
| invalid_dirs = ['client/tests/', 'client/site_tests/', 'tko/migrations/', |
| 'server/tests/', 'server/site_tests/', 'server/self-test/', |
| 'contrib/', 'utils/', 'ui/', 'frontend/migrations', |
| 'frontend/afe/simplejson/', 'metrics/', 'old_cli/', |
| 'client/common_lib/test_utils/', 'client/profilers/', |
| 'site_packages'] |
| # append site specific invalid_dirs list, if any |
| invalid_dirs.extend(utils.import_site_symbol( |
| __file__, 'autotest_lib.utils.site_coverage_suite', 'invalid_dirs', [])) |
| |
| |
| invalid_files = ['unittest_suite.py', 'coverage_suite.py', '__init__.py', |
| 'common.py'] |
| # append site specific invalid_files list, if any |
| invalid_files.extend(utils.import_site_symbol( |
| __file__, 'autotest_lib.utils.site_coverage_suite', 'invalid_files', [])) |
| |
| |
| def is_valid_directory(dirpath): |
| dirpath += '/' |
| for invalid_dir in invalid_dirs: |
| if dirpath.startswith(os.path.join(root, invalid_dir)): |
| return False |
| |
| return True |
| |
| |
| def is_test_filename(filename): |
| return (filename.endswith('_unittest.py') or filename.endswith('_test.py')) |
| |
| |
| def is_valid_filename(f): |
| # has to be a .py file |
| if not f.endswith('.py'): |
| return False |
| |
| # but there are exceptions |
| if is_test_filename(f): |
| return False |
| elif f in invalid_files: |
| return False |
| else: |
| return True |
| |
| |
| def run_unittests(prog, dirname, files): |
| for f in files: |
| if is_test_filename(f): |
| testfile = os.path.abspath(os.path.join(dirname, f)) |
| cmd = "%s -x %s" % (prog, testfile) |
| utils.system_output(cmd, ignore_status=True, timeout=100) |
| |
| |
| def main(): |
| coverage = os.path.join(root, "contrib/coverage.py") |
| |
| # remove preceeding coverage data |
| cmd = "%s -e" % (coverage) |
| os.system(cmd) |
| |
| # I know this looks weird but is required for accurate results |
| cmd = "cd %s && find . -name '*.pyc' | xargs rm" % root |
| os.system(cmd) |
| |
| # now walk through directory grabbing list of files |
| if len(sys.argv) == 2: |
| start = os.path.join(root, sys.argv[1]) |
| else: |
| start = root |
| |
| # run unittests through coverage analysis |
| os.path.walk(start, run_unittests, coverage) |
| |
| module_strings = [] |
| for dirpath, dirnames, files in os.walk(start): |
| if is_valid_directory(dirpath): |
| for f in files: |
| if is_valid_filename(f): |
| temp = os.path.join(dirpath, f) |
| module_strings.append(temp) |
| |
| # analyze files |
| cmd = "%s -r -m %s" % (coverage, " ".join(module_strings)) |
| os.system(cmd) |
| |
| |
| if __name__ == "__main__": |
| main() |