Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(435)

Side by Side Diff: run_unittests

Issue 777413002: Add new tests to presubmit, fix errors (Closed) Base URL: https://skia.googlesource.com/buildbot@master
Patch Set: "go vet" Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« go/gitinfo/gitinfo.go ('K') | « perf/go/vec/vec_test.go ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Runs all unit tests under this base directory.""" 6 """Runs all unit tests under this base directory."""
7 7
8 import os 8 import os
9 import subprocess 9 import subprocess
10 import sys 10 import sys
11 import unittest 11 import unittest
12 12
13 13
14 BUILDBOT_PATH = os.path.dirname(os.path.abspath(__file__)) 14 BUILDBOT_PATH = os.path.dirname(os.path.abspath(__file__))
15 15
16 16
17 GO_TESTS = [ 17 GO_DIRS = [
18 '.', 18 '.',
19 'perf', 19 'perf',
20 'monitoring', 20 'monitoring',
21 'golden', 21 'golden',
22 ] 22 ]
23 23
24 GO_TEST_FAILED = ( 24 GO_TEST_FAILED = (
25 '''====================================================================== 25 '''======================================================================
26 Go test failed: %s 26 Go test failed: %s
27 CWD: %s
27 ---------------------------------------------------------------------- 28 ----------------------------------------------------------------------
28 %s 29 %s
29 ---------------------------------------------------------------------- 30 ----------------------------------------------------------------------
30 ''') 31 ''')
31 32
32 NO_CRAWL_DIRS = [ 33 NO_CRAWL_DIRS = [
33 '.git', 34 '.git',
34 '.svn', 35 '.svn',
35 'autoroll_git', 36 'autoroll_git',
36 'common', 37 'common',
37 'git_poller_skia.git', 38 'git_poller_skia.git',
38 'third_party', 39 'third_party',
39 ] 40 ]
40 41
41 42
42 def FilterDirectory(dirpath, filenames): 43 def FilterDirectory(dirpath, filenames):
43 """ Determine whether to look for tests in the given directory. 44 """ Determine whether to look for tests in the given directory.
44 45
45 dirpath: string; path of the directory in question. 46 dirpath: string; path of the directory in question.
46 filenames: list of strings; the files in the directory. 47 filenames: list of strings; the files in the directory.
47 """ 48 """
48 if not dirpath or not filenames: 49 if not dirpath or not filenames:
49 return False 50 return False
50 for no_crawl_dir in NO_CRAWL_DIRS: 51 for no_crawl_dir in NO_CRAWL_DIRS:
51 if no_crawl_dir in dirpath: 52 if no_crawl_dir in dirpath:
52 return False 53 return False
53 return True 54 return True
54 55
55 56
56 def TestGo(testname): 57 def RunGoTest(cmd, cwd):
57 # TODO(borenet): Switch to 'make test' once we're sure the karma-based tests 58 p = subprocess.Popen(cmd, cwd=cwd,
58 # will run in headless mode.
59 p = subprocess.Popen(['make', 'testgo'], cwd=testname,
60 stderr=subprocess.STDOUT, 59 stderr=subprocess.STDOUT,
61 stdout=subprocess.PIPE) 60 stdout=subprocess.PIPE)
62 output = p.communicate()[0] 61 output = p.communicate()[0]
63 if p.returncode != 0: 62 if p.returncode != 0:
64 return GO_TEST_FAILED % (testname, output) 63 return [GO_TEST_FAILED % (' '.join(cmd), cwd, output)]
65 return None 64 return []
66 65
67 66
68 def GoImports(): 67 def GoTests(cwd):
68 # TODO(borenet): Switch to 'make test' once we're sure the karma-based tests
69 # will run in headless mode.
70 return RunGoTest(['make', 'testgo'], cwd)
71
72
73 def GoVet(cwd):
74 # We need to actually point to go packages. Find any directories in cwd
75 # which contain .go files and run "go vet" on them.
jcgregorio 2014/12/05 15:57:33 Doesn't this work? $ go vet ./...
borenet 2014/12/05 16:07:00 It sure does!
76 modules = []
77 go_path = os.path.join(cwd, 'go')
78 for item in os.listdir(go_path):
79 item_path = os.path.join(go_path, item)
80 if os.path.isdir(item_path):
81 for f in os.listdir(item_path):
82 file_path = os.path.join(item_path, f)
83 if os.path.isfile(file_path) and f.endswith('.go'):
84 modules.append(item_path)
85 break
86
87 errors = []
88 for m in modules:
89 errors.extend(RunGoTest(['go', 'vet'], m))
90 return errors
91
92
93 def GoImports(cwd):
94 cmd = ['goimports', '-l', 'go']
69 try: 95 try:
70 diff_files = subprocess.check_output(['goimports', '-l', '.'], 96 diff_files = subprocess.check_output(cmd, cwd=cwd,
71 stderr=subprocess.PIPE).splitlines() 97 stderr=subprocess.PIPE).splitlines()
72 except subprocess.CalledProcessError: 98 except subprocess.CalledProcessError:
73 return ('goimports failed to run! Is it installed? You may need to run: \n' 99 return [GO_TEST_FAILED % (
74 'go get http://code.google.com/p/go.tools/cmd/goimports') 100 ' '.join(cmd), cwd,
101 ('goimports failed to run! Is it installed? You may need to run:\n'
102 'go get http://code.google.com/p/go.tools/cmd/goimports'))]
75 103
76 if len(diff_files) > 0: 104 if len(diff_files) > 0:
77 return ('goimports found diffs in the following files: %s' % 105 return [GO_TEST_FAILED % (
78 ', '.join(diff_files)) 106 ' '.join(cmd), cwd,
79 return None 107 ('goimports found diffs in the following files: %s' %
108 ', '.join(diff_files)))]
109 return []
80 110
81 111
82 if __name__ == '__main__': 112 if __name__ == '__main__':
83 print 'Searching for tests.' 113 print 'Searching for tests.'
84 tests_to_run = [] 114 tests_to_run = []
85 115
86 for (dirpath, dirnames, filenames) in os.walk(BUILDBOT_PATH, topdown=True): 116 for (dirpath, dirnames, filenames) in os.walk(BUILDBOT_PATH, topdown=True):
87 dirnames[:] = [d for d in dirnames if not d in NO_CRAWL_DIRS] 117 dirnames[:] = [d for d in dirnames if not d in NO_CRAWL_DIRS]
88 test_modules = [os.path.join(dirpath, filename) for filename in filenames 118 test_modules = [os.path.join(dirpath, filename) for filename in filenames
89 if filename.endswith('_test.py')] 119 if filename.endswith('_test.py')]
90 if not test_modules: 120 if not test_modules:
91 continue 121 continue
92 tests_to_run.extend(test_modules) 122 tests_to_run.extend(test_modules)
93 123
94 builtin_tests = [GoImports] 124 go_tests = [GoTests,
125 GoImports,
126 GoVet]
95 127
96 num_tests = len(tests_to_run) + len(GO_TESTS) + len(builtin_tests) 128 num_tests = len(tests_to_run) + len(GO_DIRS) * len(go_tests)
97 print 'Found %d tests.' % num_tests 129 print 'Found %d tests.' % num_tests
98 errors = [] 130 errors = []
99 for test in tests_to_run: 131 for test in tests_to_run:
100 proc = subprocess.Popen(['python', test], stdout=subprocess.PIPE, 132 proc = subprocess.Popen(['python', test], stdout=subprocess.PIPE,
101 stderr=subprocess.STDOUT) 133 stderr=subprocess.STDOUT)
102 if proc.wait() != 0: 134 if proc.wait() != 0:
103 errors.append(proc.communicate()[0]) 135 errors.append(proc.communicate()[0])
104 136
105 for go_test in GO_TESTS: 137 for go_dir in GO_DIRS:
106 error = TestGo(go_test) 138 for test in go_tests:
107 if error: 139 errors.extend(test(go_dir))
108 errors.append(error)
109
110 for builtin_test in builtin_tests:
111 error = builtin_test()
112 if error:
113 errors.append(error)
114 140
115 if errors: 141 if errors:
116 for error in errors: 142 for error in errors:
117 print error 143 print error
118 print 'Failed %d of %d.' % (len(errors), num_tests)
119 sys.exit(1) 144 sys.exit(1)
120 else: 145 else:
121 print 'All tests succeeded.' 146 print 'All tests succeeded.'
OLDNEW
« go/gitinfo/gitinfo.go ('K') | « perf/go/vec/vec_test.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698