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

Side by Side Diff: tests/presubmit_unittest.py

Issue 9621012: Show a list of directories missing OWNER reviewers on upload, and show directories rather than file… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: Created 8 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « tests/owners_unittest.py ('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 """Unit tests for presubmit_support.py and presubmit_canned_checks.py.""" 6 """Unit tests for presubmit_support.py and presubmit_canned_checks.py."""
7 7
8 # pylint: disable=E1101,E1103 8 # pylint: disable=E1101,E1103
9 9
10 import logging 10 import logging
(...skipping 2091 matching lines...) Expand 10 before | Expand all | Expand 10 after
2102 connection.close() 2102 connection.close()
2103 self.mox.ReplayAll() 2103 self.mox.ReplayAll()
2104 2104
2105 results = presubmit_canned_checks.CheckBuildbotPendingBuilds( 2105 results = presubmit_canned_checks.CheckBuildbotPendingBuilds(
2106 input_api, presubmit.OutputApi, 'uurl', 2, ('foo')) 2106 input_api, presubmit.OutputApi, 'uurl', 2, ('foo'))
2107 self.assertEquals(len(results), 1) 2107 self.assertEquals(len(results), 1)
2108 self.assertEquals(results[0].__class__, 2108 self.assertEquals(results[0].__class__,
2109 presubmit.OutputApi.PresubmitNotifyResult) 2109 presubmit.OutputApi.PresubmitNotifyResult)
2110 2110
2111 def AssertOwnersWorks(self, tbr=False, issue='1', approvers=None, 2111 def AssertOwnersWorks(self, tbr=False, issue='1', approvers=None,
2112 rietveld_response=None, uncovered_files=None, expected_output=''): 2112 reviewers=None, is_committing=True, rietveld_response=None,
2113 uncovered_dirs=None, expected_output=''):
2113 if approvers is None: 2114 if approvers is None:
2114 approvers = set() 2115 approvers = set()
2115 if uncovered_files is None: 2116 if reviewers is None:
2116 uncovered_files = set() 2117 reviewers = set()
2118 reviewers = reviewers.union(approvers)
2119 if uncovered_dirs is None:
2120 uncovered_dirs = set()
2117 2121
2118 change = self.mox.CreateMock(presubmit.Change) 2122 change = self.mox.CreateMock(presubmit.Change)
2119 change.issue = issue 2123 change.issue = issue
2120 affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile) 2124 affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile)
2121 input_api = self.MockInputApi(change, False) 2125 input_api = self.MockInputApi(change, False)
2122 fake_db = self.mox.CreateMock(owners.Database) 2126 fake_db = self.mox.CreateMock(owners.Database)
2123 fake_db.email_regexp = input_api.re.compile(owners.BASIC_EMAIL_REGEXP) 2127 fake_db.email_regexp = input_api.re.compile(owners.BASIC_EMAIL_REGEXP)
2124 input_api.owners_db = fake_db 2128 input_api.owners_db = fake_db
2125 input_api.is_committing = True 2129 input_api.is_committing = is_committing
2126 input_api.tbr = tbr 2130 input_api.tbr = tbr
2127 2131
2128 if not tbr and issue: 2132 if not is_committing or (not tbr and issue):
2129 affected_file.LocalPath().AndReturn('foo.cc') 2133 affected_file.LocalPath().AndReturn('foo/xyz.cc')
2130 change.AffectedFiles(file_filter=None).AndReturn([affected_file]) 2134 change.AffectedFiles(file_filter=None).AndReturn([affected_file])
2131 owner_email = 'john@example.com' 2135 owner_email = 'john@example.com'
2132 if not rietveld_response: 2136 if not rietveld_response:
2133 rietveld_response = { 2137 rietveld_response = {
2134 "owner_email": owner_email, 2138 "owner_email": owner_email,
2135 "messages": [ 2139 "messages": [
2136 {"sender": a, "text": "I approve", "approval": True} 2140 {"sender": a, "text": "I approve", "approval": True}
2137 for a in approvers 2141 for a in approvers
2138 ], 2142 ],
2143 "reviewers": reviewers
2139 } 2144 }
2140 input_api.rietveld.get_issue_properties( 2145
2141 int(input_api.change.issue), True).AndReturn(rietveld_response) 2146 if is_committing:
2142 fake_db.files_not_covered_by(set(['foo.cc']), 2147 people = approvers
2143 approvers.union(set([owner_email]))).AndReturn(uncovered_files) 2148 else:
2149 people = reviewers
2150
2151 if issue:
2152 input_api.rietveld.get_issue_properties(
2153 int(input_api.change.issue), True).AndReturn(rietveld_response)
2154 people.add(owner_email)
2155
2156 fake_db.directories_not_covered_by(set(['foo/xyz.cc']),
2157 people).AndReturn(uncovered_dirs)
2144 2158
2145 self.mox.ReplayAll() 2159 self.mox.ReplayAll()
2146 output = presubmit.PresubmitOutput() 2160 output = presubmit.PresubmitOutput()
2147 results = presubmit_canned_checks.CheckOwners(input_api, 2161 results = presubmit_canned_checks.CheckOwners(input_api,
2148 presubmit.OutputApi) 2162 presubmit.OutputApi)
2149 if results: 2163 if results:
2150 results[0].handle(output) 2164 results[0].handle(output)
2151 self.assertEquals(output.getvalue(), expected_output) 2165 self.assertEquals(output.getvalue(), expected_output)
2152 2166
2153 def testCannedCheckOwners_Approved(self): 2167 def testCannedCheckOwners_Approved(self):
2154 response = { 2168 response = {
2155 "owner_email": "john@example.com", 2169 "owner_email": "john@example.com",
2156 "messages": [ 2170 "messages": [
2157 { 2171 {
2158 "sender": "ben@example.com", "text": "foo", "approval": True, 2172 "sender": "ben@example.com", "text": "foo", "approval": True,
2159 }, 2173 },
2160 ], 2174 ],
2175 "reviewers": ["ben@example.com"],
2161 } 2176 }
2162 self.AssertOwnersWorks(approvers=set(['ben@example.com']), 2177 self.AssertOwnersWorks(approvers=set(['ben@example.com']),
2163 rietveld_response=response, 2178 rietveld_response=response,
2164 expected_output='') 2179 expected_output='')
2165 2180
2181 self.AssertOwnersWorks(approvers=set(['ben@example.com']),
2182 is_committing=False,
2183 rietveld_response=response,
2184 expected_output='')
2185
2166 def testCannedCheckOwners_NotApproved(self): 2186 def testCannedCheckOwners_NotApproved(self):
2167 response = { 2187 response = {
2168 "owner_email": "john@example.com", 2188 "owner_email": "john@example.com",
2169 "messages": [ 2189 "messages": [
2170 { 2190 {
2171 "sender": "ben@example.com", "text": "foo", "approval": False, 2191 "sender": "ben@example.com", "text": "foo", "approval": False,
2172 }, 2192 },
2173 ], 2193 ],
2194 "reviewers": ["ben@example.com"],
2174 } 2195 }
2175 self.AssertOwnersWorks( 2196 self.AssertOwnersWorks(
2176 approvers=set(), 2197 approvers=set(),
2198 reviewers=set(["ben@example.com"]),
2177 rietveld_response=response, 2199 rietveld_response=response,
2178 expected_output= 2200 expected_output=
2179 'Missing LGTM from someone other than john@example.com\n') 2201 'Missing LGTM from someone other than john@example.com\n')
2180 2202
2203 self.AssertOwnersWorks(
2204 approvers=set(),
2205 reviewers=set(["ben@example.com"]),
2206 is_committing=False,
2207 rietveld_response=response,
2208 expected_output='')
2209
2210 def testCannedCheckOwners_NoReviewers(self):
2211 response = {
2212 "owner_email": "john@example.com",
2213 "messages": [
2214 {
2215 "sender": "ben@example.com", "text": "foo", "approval": False,
2216 },
2217 ],
2218 "reviewers":[],
2219 }
2220 self.AssertOwnersWorks(
2221 approvers=set(),
2222 reviewers=set(),
2223 rietveld_response=response,
2224 expected_output=
2225 'Missing LGTM from someone other than john@example.com\n')
2226
2227 self.AssertOwnersWorks(
2228 approvers=set(),
2229 reviewers=set(),
2230 is_committing=False,
2231 rietveld_response=response,
2232 expected_output='')
2233
2181 def testCannedCheckOwners_NoIssue(self): 2234 def testCannedCheckOwners_NoIssue(self):
2182 self.AssertOwnersWorks(issue=None, 2235 self.AssertOwnersWorks(issue=None,
2183 expected_output="OWNERS check failed: this change has no Rietveld " 2236 expected_output="OWNERS check failed: this change has no Rietveld "
2184 "issue number, so we can't check it for approvals.\n") 2237 "issue number, so we can't check it for approvals.\n")
2185 2238
2239 self.AssertOwnersWorks(issue=None, is_committing=False,
2240 expected_output="")
2241
2186 def testCannedCheckOwners_NoLGTM(self): 2242 def testCannedCheckOwners_NoLGTM(self):
2187 self.AssertOwnersWorks(expected_output='Missing LGTM from someone ' 2243 self.AssertOwnersWorks(expected_output='Missing LGTM from someone '
2188 'other than john@example.com\n') 2244 'other than john@example.com\n')
2245 self.AssertOwnersWorks(is_committing=False, expected_output='')
2189 2246
2190 def testCannedCheckOwners_OnlyOwnerLGTM(self): 2247 def testCannedCheckOwners_OnlyOwnerLGTM(self):
2191 self.AssertOwnersWorks(approvers=set(['john@example.com']), 2248 self.AssertOwnersWorks(approvers=set(['john@example.com']),
2192 expected_output='Missing LGTM from someone ' 2249 expected_output='Missing LGTM from someone '
2193 'other than john@example.com\n') 2250 'other than john@example.com\n')
2251 self.AssertOwnersWorks(approvers=set(['john@example.com']),
2252 is_committing=False,
2253 expected_output='')
2194 2254
2195 def testCannedCheckOwners_TBR(self): 2255 def testCannedCheckOwners_TBR(self):
2196 self.AssertOwnersWorks(tbr=True, 2256 self.AssertOwnersWorks(tbr=True,
2197 expected_output='--tbr was specified, skipping OWNERS check\n') 2257 expected_output='--tbr was specified, skipping OWNERS check\n')
2198 2258 self.AssertOwnersWorks(tbr=True, is_committing=False, expected_output='')
2199 def testCannedCheckOwners_Upload(self):
2200 class FakeInputAPI(object):
2201 is_committing = False
2202
2203 results = presubmit_canned_checks.CheckOwners(FakeInputAPI(),
2204 presubmit.OutputApi)
2205 self.assertEqual(results, [])
2206 2259
2207 def testCannedCheckOwners_WithoutOwnerLGTM(self): 2260 def testCannedCheckOwners_WithoutOwnerLGTM(self):
2208 self.AssertOwnersWorks(uncovered_files=set(['foo.cc']), 2261 self.AssertOwnersWorks(uncovered_dirs=set(['foo']),
2209 expected_output='Missing LGTM from an OWNER for: foo.cc\n') 2262 expected_output='Missing LGTM from an OWNER for files in these '
2263 'directories:\n'
2264 ' foo\n')
2265 self.AssertOwnersWorks(uncovered_dirs=set(['foo']),
2266 is_committing=False,
2267 expected_output='Missing OWNER reviewers for files in these '
2268 'directories:\n'
2269 ' foo\n')
2210 2270
2211 def testCannedCheckOwners_WithLGTMs(self): 2271 def testCannedCheckOwners_WithLGTMs(self):
2212 self.AssertOwnersWorks(approvers=set(['ben@example.com']), 2272 self.AssertOwnersWorks(approvers=set(['ben@example.com']),
2213 uncovered_files=set()) 2273 uncovered_dirs=set())
2274 self.AssertOwnersWorks(approvers=set(['ben@example.com']),
2275 is_committing=False,
2276 uncovered_dirs=set())
2214 2277
2215 def testCannedRunUnitTests(self): 2278 def testCannedRunUnitTests(self):
2216 change = presubmit.Change( 2279 change = presubmit.Change(
2217 'foo1', 'description1', self.fake_root_dir, None, 0, 0, None) 2280 'foo1', 'description1', self.fake_root_dir, None, 0, 0, None)
2218 input_api = self.MockInputApi(change, False) 2281 input_api = self.MockInputApi(change, False)
2219 input_api.verbose = True 2282 input_api.verbose = True
2220 unit_tests = ['allo', 'bar.py'] 2283 unit_tests = ['allo', 'bar.py']
2221 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir) 2284 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir)
2222 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir) 2285 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir)
2223 input_api.subprocess.check_call( 2286 input_api.subprocess.check_call(
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2292 affected_file.LocalPath().AndReturn('hello.py') 2355 affected_file.LocalPath().AndReturn('hello.py')
2293 2356
2294 self.mox.ReplayAll() 2357 self.mox.ReplayAll()
2295 results = presubmit_canned_checks.PanProjectChecks( 2358 results = presubmit_canned_checks.PanProjectChecks(
2296 input_api, 2359 input_api,
2297 presubmit.OutputApi, 2360 presubmit.OutputApi,
2298 excluded_paths=None, 2361 excluded_paths=None,
2299 text_files=None, 2362 text_files=None,
2300 license_header=None, 2363 license_header=None,
2301 project_name=None, 2364 project_name=None,
2302 owners_check=True) 2365 owners_check=False)
2303 self.assertEqual(1, len(results)) 2366 self.assertEqual(1, len(results))
2304 self.assertEqual( 2367 self.assertEqual(
2305 'Found line ending with white spaces in:', results[0]._message) 2368 'Found line ending with white spaces in:', results[0]._message)
2306 self.checkstdout('') 2369 self.checkstdout('')
2307 2370
2308 2371
2309 if __name__ == '__main__': 2372 if __name__ == '__main__':
2310 import unittest 2373 import unittest
2311 unittest.main() 2374 unittest.main()
OLDNEW
« no previous file with comments | « tests/owners_unittest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698