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

Side by Side Diff: go/test.py

Issue 1042633002: Add support for -tags to enable appengine testing. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: remove comma Created 5 years, 8 months 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
« no previous file with comments | « go/src/infra/gae/apps/helloworld/helloworld.infra_testing ('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 2014 The Chromium Authors. All rights reserved. 2 # Copyright 2014 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 Go unit tests verifying code coverage. 6 """Runs Go unit tests verifying code coverage.
7 7
8 Expects Go toolset to be in PATH, GOPATH and GOROOT correctly set. Use ./env.py 8 Expects Go toolset to be in PATH, GOPATH and GOROOT correctly set. Use ./env.py
9 to set them up. 9 to set them up.
10 10
(...skipping 16 matching lines...) Expand all
27 27
28 28
29 # infra/go/ 29 # infra/go/
30 INFRA_GO_DIR = os.path.dirname(os.path.abspath(__file__)) 30 INFRA_GO_DIR = os.path.dirname(os.path.abspath(__file__))
31 31
32 # Allowed keys in *.infra_testing dict. 32 # Allowed keys in *.infra_testing dict.
33 EXPECTED_INFO_KEYS = frozenset([ 33 EXPECTED_INFO_KEYS = frozenset([
34 'skip_testing', 34 'skip_testing',
35 'expected_coverage_min', 35 'expected_coverage_min',
36 'expected_coverage_max', 36 'expected_coverage_max',
37 'build_tags',
37 ]) 38 ])
38 39
39 40
40 # Return value of run_package_tests. 41 # Return value of run_package_tests.
41 TestResults = collections.namedtuple('TestResults', [ 42 TestResults = collections.namedtuple('TestResults', [
42 # Name of the package being tested. 43 # Name of the package being tested.
43 'package', 44 'package',
44 # True if all unit tests pass. 45 # True if all unit tests pass.
45 'tests_pass', 46 'tests_pass',
46 # Percentage of source code covered, or None if not available. 47 # Percentage of source code covered, or None if not available.
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 135
135 if package not in _package_info_cache: 136 if package not in _package_info_cache:
136 _package_info_cache[package] = do_read() 137 _package_info_cache[package] = do_read()
137 return _package_info_cache[package] 138 return _package_info_cache[package]
138 139
139 140
140 def should_skip(package): 141 def should_skip(package):
141 """True to skip package tests, reads 'skip_testing' from *.infra_testing.""" 142 """True to skip package tests, reads 'skip_testing' from *.infra_testing."""
142 return get_package_info(package).get('skip_testing', False) 143 return get_package_info(package).get('skip_testing', False)
143 144
145 def get_build_tags(package):
146 """True to skip package tests, reads 'skip_testing' from *.infra_testing."""
147 tags = get_package_info(package).get('build_tags', ())
148 if tags:
149 return '-tags='+(','.join(tags))
150 return None
144 151
145 def get_expected_coverage(package): 152 def get_expected_coverage(package):
146 """Returns allowed code coverage percentage as a pair (min, max).""" 153 """Returns allowed code coverage percentage as a pair (min, max)."""
147 info = get_package_info(package) 154 info = get_package_info(package)
148 min_cover = info.get('expected_coverage_min', 100.0) 155 min_cover = info.get('expected_coverage_min', 100.0)
149 max_cover = info.get('expected_coverage_max', 100.0) 156 max_cover = info.get('expected_coverage_max', 100.0)
150 if max_cover < min_cover: 157 if max_cover < min_cover:
151 max_cover = min_cover 158 max_cover = min_cover
152 return (min_cover, max_cover) 159 return (min_cover, max_cover)
153 160
(...skipping 15 matching lines...) Expand all
169 package: package name (e.g. infra/package). 176 package: package name (e.g. infra/package).
170 coverage_file: prefix for code coverage files (*.out and *.html). 177 coverage_file: prefix for code coverage files (*.out and *.html).
171 178
172 Returns: 179 Returns:
173 TestResults tuple. 180 TestResults tuple.
174 """ 181 """
175 assert os.path.isabs(coverage_file), coverage_file 182 assert os.path.isabs(coverage_file), coverage_file
176 183
177 # Ask go test to collect coverage to a file, to convert it to HTML later. 184 # Ask go test to collect coverage to a file, to convert it to HTML later.
178 cmd = ['go', 'test', package] 185 cmd = ['go', 'test', package]
186 build_tags = get_build_tags(package)
187 if build_tags:
188 cmd.append(build_tags)
179 makedirs(os.path.dirname(coverage_file)) 189 makedirs(os.path.dirname(coverage_file))
180 coverage_out = '%s.out' % coverage_file 190 coverage_out = '%s.out' % coverage_file
181 cmd.extend(['-coverprofile', coverage_out]) 191 cmd.extend(['-coverprofile', coverage_out])
182 192
183 # Run the test. 193 # Run the test.
184 proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 194 proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
185 out, err = proc.communicate() 195 out, err = proc.communicate()
186 if proc.returncode: 196 if proc.returncode:
187 return TestResults( 197 return TestResults(
188 package=package, 198 package=package,
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 elif len(args) == 1: 328 elif len(args) == 1:
319 package_root = args[0] 329 package_root = args[0]
320 else: 330 else:
321 print >> sys.stderr, sys.modules['__main__'].__doc__.strip() 331 print >> sys.stderr, sys.modules['__main__'].__doc__.strip()
322 return 1 332 return 1
323 return run_tests(package_root, os.path.join(INFRA_GO_DIR, 'coverage')) 333 return run_tests(package_root, os.path.join(INFRA_GO_DIR, 'coverage'))
324 334
325 335
326 if __name__ == '__main__': 336 if __name__ == '__main__':
327 sys.exit(main(sys.argv[1:])) 337 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « go/src/infra/gae/apps/helloworld/helloworld.infra_testing ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698