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

Side by Side Diff: tests/git_cl_test.py

Issue 2438433004: git cl try-results: add --wait-till-finished option. (Closed)
Patch Set: Tests. Created 4 years, 2 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
« git_cl.py ('K') | « git_cl.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 git_cl.py.""" 6 """Unit tests for git_cl.py."""
7 7
8 import copy
8 import json 9 import json
9 import os 10 import os
10 import StringIO 11 import StringIO
11 import sys 12 import sys
12 import unittest 13 import unittest
13 import urlparse 14 import urlparse
14 15
15 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 16 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
16 17
17 from testing_support.auto_stub import TestCase 18 from testing_support.auto_stub import TestCase
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 self.mock(subprocess2, 'check_output', self._mocked_call) 259 self.mock(subprocess2, 'check_output', self._mocked_call)
259 self.mock(subprocess2, 'communicate', 260 self.mock(subprocess2, 'communicate',
260 lambda *a, **kw: ([self._mocked_call(*a, **kw), ''], 0)) 261 lambda *a, **kw: ([self._mocked_call(*a, **kw), ''], 0))
261 self.mock(git_cl.gclient_utils, 'CheckCallAndFilter', self._mocked_call) 262 self.mock(git_cl.gclient_utils, 'CheckCallAndFilter', self._mocked_call)
262 self.mock(git_common, 'is_dirty_git_tree', lambda x: False) 263 self.mock(git_common, 'is_dirty_git_tree', lambda x: False)
263 self.mock(git_common, 'get_or_create_merge_base', 264 self.mock(git_common, 'get_or_create_merge_base',
264 lambda *a: ( 265 lambda *a: (
265 self._mocked_call(['get_or_create_merge_base']+list(a)))) 266 self._mocked_call(['get_or_create_merge_base']+list(a))))
266 self.mock(git_cl, 'BranchExists', lambda _: True) 267 self.mock(git_cl, 'BranchExists', lambda _: True)
267 self.mock(git_cl, 'FindCodereviewSettingsFile', lambda: '') 268 self.mock(git_cl, 'FindCodereviewSettingsFile', lambda: '')
269 self.mock(git_cl, 'time_sleep',
270 lambda seconds: self._mocked_call(['time_sleep', seconds]))
271 self.mock(git_cl, 'time_time', lambda: self._mocked_call(['time_time']))
268 self.mock(git_cl, 'ask_for_data', self._mocked_call) 272 self.mock(git_cl, 'ask_for_data', self._mocked_call)
269 self.mock(git_cl, 'write_json', lambda path, contents: 273 self.mock(git_cl, 'write_json', lambda path, contents:
270 self._mocked_call('write_json', path, contents)) 274 self._mocked_call('write_json', path, contents))
271 self.mock(git_cl.presubmit_support, 'DoPresubmitChecks', PresubmitMock) 275 self.mock(git_cl.presubmit_support, 'DoPresubmitChecks', PresubmitMock)
272 self.mock(git_cl.rietveld, 'Rietveld', RietveldMock) 276 self.mock(git_cl.rietveld, 'Rietveld', RietveldMock)
273 self.mock(git_cl.rietveld, 'CachingRietveld', RietveldMock) 277 self.mock(git_cl.rietveld, 'CachingRietveld', RietveldMock)
274 self.mock(git_cl.upload, 'RealMain', self.fail) 278 self.mock(git_cl.upload, 'RealMain', self.fail)
275 self.mock(git_cl.watchlists, 'Watchlists', WatchlistsMock) 279 self.mock(git_cl.watchlists, 'Watchlists', WatchlistsMock)
276 self.mock(git_cl.auth, 'get_authenticator_for_host', AuthenticatorMock) 280 self.mock(git_cl.auth, 'get_authenticator_for_host', AuthenticatorMock)
277 self.mock(git_cl.gerrit_util.GceAuthenticator, 'is_gce', 281 self.mock(git_cl.gerrit_util.GceAuthenticator, 'is_gce',
(...skipping 1801 matching lines...) Expand 10 before | Expand all | Expand 10 after
2079 self._mocked_call(['_buildbucket_retry'])) 2083 self._mocked_call(['_buildbucket_retry']))
2080 2084
2081 def _setup_fetch_try_jobs_rietveld(self, *request_results): 2085 def _setup_fetch_try_jobs_rietveld(self, *request_results):
2082 self._setup_fetch_try_jobs(most_recent_patchset=20001) 2086 self._setup_fetch_try_jobs(most_recent_patchset=20001)
2083 self.calls += [ 2087 self.calls += [
2084 ((['git', 'symbolic-ref', 'HEAD'],), 'feature'), 2088 ((['git', 'symbolic-ref', 'HEAD'],), 'feature'),
2085 ((['git', 'config', 'branch.feature.rietveldissue'],), '1'), 2089 ((['git', 'config', 'branch.feature.rietveldissue'],), '1'),
2086 ((['git', 'config', 'rietveld.autoupdate'],), CERR1), 2090 ((['git', 'config', 'rietveld.autoupdate'],), CERR1),
2087 ((['git', 'config', 'rietveld.server'],), 'codereview.example.com'), 2091 ((['git', 'config', 'rietveld.server'],), 'codereview.example.com'),
2088 ((['git', 'config', 'branch.feature.rietveldpatchset'],), '20001'), 2092 ((['git', 'config', 'branch.feature.rietveldpatchset'],), '20001'),
2093 ((['time_time'],), 1000.0),
2089 ((['git', 'config', 'branch.feature.rietveldserver'],), 2094 ((['git', 'config', 'branch.feature.rietveldserver'],),
2090 'codereview.example.com'), 2095 'codereview.example.com'),
2091 ((['get_authenticator_for_host', 'codereview.example.com'],), 2096 ((['get_authenticator_for_host', 'codereview.example.com'],),
2092 AuthenticatorMock()), 2097 AuthenticatorMock()),
2093 ] + [((['_buildbucket_retry'],), r) for r in request_results] 2098 ] + [((['_buildbucket_retry'],), copy.deepcopy(r)) for r in request_results]
2094 2099
2095 def test_fetch_try_jobs_none_rietveld(self): 2100 def test_fetch_try_jobs_none_rietveld(self):
2096 self._setup_fetch_try_jobs_rietveld({}) 2101 self._setup_fetch_try_jobs_rietveld({})
2097 # Simulate that user isn't logged in. 2102 # Simulate that user isn't logged in.
2098 self.mock(AuthenticatorMock, 'has_cached_credentials', lambda _: False) 2103 self.mock(AuthenticatorMock, 'has_cached_credentials', lambda _: False)
2099 self.assertEqual(0, git_cl.main(['try-results'])) 2104 self.assertEqual(0, git_cl.main(['try-results']))
2100 self.assertRegexpMatches(sys.stdout.getvalue(), 2105 self.assertRegexpMatches(sys.stdout.getvalue(),
2101 'Warning: Some results might be missing') 2106 'Warning: Some results might be missing')
2102 self.assertRegexpMatches(sys.stdout.getvalue(), 'No try jobs') 2107 self.assertRegexpMatches(sys.stdout.getvalue(), 'No try jobs')
2103 2108
2104 def test_fetch_try_jobs_some_rietveld(self): 2109 def test_fetch_try_jobs_some_rietveld(self):
2105 self._setup_fetch_try_jobs_rietveld({ 2110 self._setup_fetch_try_jobs_rietveld({
2106 'builds': self.BUILDBUCKET_BUILDS_MAP.values(), 2111 'builds': self.BUILDBUCKET_BUILDS_MAP.values(),
2107 }) 2112 })
2108 self.assertEqual(0, git_cl.main(['try-results'])) 2113 self.assertEqual(0, git_cl.main(['try-results']))
2109 self.assertRegexpMatches(sys.stdout.getvalue(), '^Failures:') 2114 self.assertRegexpMatches(sys.stdout.getvalue(), '^Failures:')
2110 self.assertRegexpMatches(sys.stdout.getvalue(), 'Started:') 2115 self.assertRegexpMatches(sys.stdout.getvalue(), 'Started:')
2111 self.assertRegexpMatches(sys.stdout.getvalue(), '2 try jobs') 2116 self.assertRegexpMatches(sys.stdout.getvalue(), '2 try jobs')
2112 2117
2113 def _setup_fetch_try_jobs_gerrit(self, *request_results): 2118 def _setup_fetch_try_jobs_gerrit(self, *request_results):
2114 self._setup_fetch_try_jobs(most_recent_patchset=13) 2119 self._setup_fetch_try_jobs(most_recent_patchset=13)
2115 self.calls += [ 2120 self.calls += [
2116 ((['git', 'symbolic-ref', 'HEAD'],), 'feature'), 2121 ((['git', 'symbolic-ref', 'HEAD'],), 'feature'),
2117 ((['git', 'config', 'branch.feature.rietveldissue'],), CERR1), 2122 ((['git', 'config', 'branch.feature.rietveldissue'],), CERR1),
2118 ((['git', 'config', 'branch.feature.gerritissue'],), '1'), 2123 ((['git', 'config', 'branch.feature.gerritissue'],), '1'),
2119 # Simulate that Gerrit has more patchsets than local. 2124 # Simulate that Gerrit has more patchsets than local.
2120 ((['git', 'config', 'branch.feature.gerritpatchset'],), '12'), 2125 ((['git', 'config', 'branch.feature.gerritpatchset'],), '12'),
2126 ((['time_time'],), 1000.0),
2121 ((['git', 'config', 'branch.feature.gerritserver'],), 2127 ((['git', 'config', 'branch.feature.gerritserver'],),
2122 'https://x-review.googlesource.com'), 2128 'https://x-review.googlesource.com'),
2123 ((['get_authenticator_for_host', 'x-review.googlesource.com'],), 2129 ((['get_authenticator_for_host', 'x-review.googlesource.com'],),
2124 AuthenticatorMock()), 2130 AuthenticatorMock()),
2125 ] + [((['_buildbucket_retry'],), r) for r in request_results] 2131 ] + [((['_buildbucket_retry'],), copy.deepcopy(r)) for r in request_results]
2126 2132
2127 def test_fetch_try_jobs_none_gerrit(self): 2133 def test_fetch_try_jobs_none_gerrit(self):
2128 self._setup_fetch_try_jobs_gerrit({}) 2134 self._setup_fetch_try_jobs_gerrit({})
2129 self.assertEqual(0, git_cl.main(['try-results'])) 2135 self.assertEqual(0, git_cl.main(['try-results']))
2130 self.assertRegexpMatches( 2136 self.assertRegexpMatches(
2131 sys.stdout.getvalue(), 2137 sys.stdout.getvalue(),
2132 r'Warning: Codereview server has newer patchsets \(13\)') 2138 r'Warning: Codereview server has newer patchsets \(13\)')
2133 self.assertRegexpMatches(sys.stdout.getvalue(), 'No try jobs') 2139 self.assertRegexpMatches(sys.stdout.getvalue(), 'No try jobs')
2134 2140
2135 def test_fetch_try_jobs_some_gerrit(self): 2141 def test_fetch_try_jobs_some_gerrit(self):
2136 self._setup_fetch_try_jobs_gerrit({ 2142 self._setup_fetch_try_jobs_gerrit({
2137 'builds': self.BUILDBUCKET_BUILDS_MAP.values(), 2143 'builds': self.BUILDBUCKET_BUILDS_MAP.values(),
2138 }) 2144 })
2139 # Explicit --patchset means actual local patchset doesn't matter. 2145 # Explicit --patchset means actual local patchset doesn't matter.
2140 self.calls.remove( 2146 self.calls.remove(
2141 ((['git', 'config', 'branch.feature.gerritpatchset'],), '12')) 2147 ((['git', 'config', 'branch.feature.gerritpatchset'],), '12'))
2142 self.assertEqual(0, git_cl.main(['try-results', '--patchset', '5'])) 2148 self.assertEqual(0, git_cl.main(['try-results', '--patchset', '5']))
2143 2149
2144 # ... and doesn't result in warning. 2150 # ... and doesn't result in warning.
2145 self.assertNotRegexpMatches(sys.stdout.getvalue(), 'Warning') 2151 self.assertNotRegexpMatches(sys.stdout.getvalue(), 'Warning')
2146 self.assertRegexpMatches(sys.stdout.getvalue(), '^Failures:') 2152 self.assertRegexpMatches(sys.stdout.getvalue(), '^Failures:')
2147 self.assertRegexpMatches(sys.stdout.getvalue(), 'Started:') 2153 self.assertRegexpMatches(sys.stdout.getvalue(), 'Started:')
2148 self.assertRegexpMatches(sys.stdout.getvalue(), '2 try jobs') 2154 self.assertRegexpMatches(sys.stdout.getvalue(), '2 try jobs')
2149 2155
2156 def test_fetch_try_jobs_some_gerrit_wait(self):
2157 # Sort jobs by ID for determinism.
2158 some_incomplete = copy.deepcopy([
2159 b for _, b in sorted(self.BUILDBUCKET_BUILDS_MAP.iteritems())])
2160 self.assertEqual(some_incomplete[0]['id'], '8000')
2161 self.assertEqual(some_incomplete[0]['status'], 'COMPLETED')
2162 self.assertEqual(some_incomplete[1]['id'], '9000')
2163 self.assertEqual(some_incomplete[1]['status'], 'STARTED')
2164 all_complete = copy.deepcopy(some_incomplete)
2165 all_complete[1]['status'] = 'COMPLETED'
2166
2167 self._setup_fetch_try_jobs_gerrit({'builds': some_incomplete})
2168 self.calls += [
2169 ((['time_time'],), 1010.0),
2170 ((['time_sleep', 10],), None),
2171 ((['get_authenticator_for_host', 'x-review.googlesource.com'],),
2172 AuthenticatorMock()),
2173 ((['_buildbucket_retry'],), {'builds': all_complete}),
2174 ]
2175 self.assertEqual(0, git_cl.main(['try-results', '-w']))
2176
2177 def test_fetch_try_jobs_gerrit_wait_timeout(self):
2178 self._setup_fetch_try_jobs_gerrit({
2179 'builds': self.BUILDBUCKET_BUILDS_MAP.values(), # Not all complete.
2180 })
2181 self.calls += [
2182 ((['time_time'],), 1000.0 + 60 * 60 + 1), # Simulate running for too long.
2183 ]
2184 self.assertEqual(3, git_cl.main(['try-results', '-w']))
2185
2150 2186
2151 if __name__ == '__main__': 2187 if __name__ == '__main__':
2152 git_cl.logging.basicConfig( 2188 git_cl.logging.basicConfig(
2153 level=git_cl.logging.DEBUG if '-v' in sys.argv else git_cl.logging.ERROR) 2189 level=git_cl.logging.DEBUG if '-v' in sys.argv else git_cl.logging.ERROR)
2154 unittest.main() 2190 unittest.main()
OLDNEW
« git_cl.py ('K') | « git_cl.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698