Commit 45b2a589 authored by tandrii's avatar tandrii Committed by Commit bot

git cl try-results regression tests for Gerrit.

The flow looks like this:

  $ git cl status
  Branches associated with reviews:
    gerrit-4483 : https://chromium-review.googlesource.com/381231 (waiting)

  $ git cl try-results
  Warning: Codereview server has newer patchsets (2) than most recent
  upload from local checkout (None). Did a previous upload fail?
  By default, git cl try uses latest patchset from codereview,
  continuing using such patchset 2.

  Warning: Some results might be missing because You are not logged in.
  Please login first by running:
    depot-tools-auth login chromium-review.googlesource.com
  Started:
    Infra Linux Precise 32 Tester https://luci-milo.appspot.com/swarming/...
    Infra Linux Trusty 64 Tester  https://luci-milo.appspot.com/swarming/...
  Total: 2 try jobs

  $ depot-tools-auth login chromium-review.googlesource.com
   <<<auth in my browser>>>

  Logged in to chromium-review.googlesource.com as <some@email.com>

	To login with a different email run:
		depot-tools-auth login chromium-review.googlesource.com
	To logout and purge the authentication token run:
		depot-tools-auth logout chromium-review.googlesource.com

  $ git config branch.gerrit-4483.gerritpatchset 2
  $ git cl try-results
  Started:
    Infra Linux Precise 32 Tester https://luci-milo.appspot.com/swarming/...
    Infra Linux Trusty 64 Tester  https://luci-milo.appspot.com/swarming/...
    Infra Mac Tester              https://luci-milo.appspot.com/swarming/...
  Total: 3 try jobs

R=sergiyb@chromium.org,emso@chromium.org
BUG=599931
TEST=new unittests + end-to-end local.

Review-Url: https://codereview.chromium.org/2392463009
parent ae39f566
......@@ -4880,10 +4880,12 @@ def CMDtry_results(parser, args):
cl.GetIssue())
if patchset != cl.GetPatchset():
print('WARNING: Mismatch between local config and server. Did a previous '
'upload fail?\n'
'By default, git cl try uses latest patchset from codereview.\n'
'Continuing using patchset %s.\n' % patchset)
print('Warning: Codereview server has newer patchsets (%s) than most '
'recent upload from local checkout (%s). Did a previous upload '
'fail?\n'
'By default, git cl try uses latest patchset from codereview, '
'continuing to use patchset %s.\n' %
(patchset, cl.GetPatchset(), patchset))
try:
jobs = fetch_try_jobs(auth_config, cl, options.buildbucket_host, patchset)
except BuildbucketResponseException as ex:
......
......@@ -1987,14 +1987,18 @@ class TestGitCl(TestCase):
self.calls = [(('write_json', 'output.json', expected_output), '')]
git_cl.write_try_results_json('output.json', self.BUILDBUCKET_BUILDS_MAP)
def _setup_fetch_try_jobs_rietveld(self, *request_results):
def _setup_fetch_try_jobs(self, most_recent_patchset=20001):
out = StringIO.StringIO()
self.mock(sys, 'stdout', out)
self.mock(git_cl.Changelist, 'GetMostRecentPatchset', lambda *args: 20001)
self.mock(git_cl.Changelist, 'GetMostRecentPatchset',
lambda *args: most_recent_patchset)
self.mock(git_cl.auth, 'get_authenticator_for_host', lambda host, _cfg:
self._mocked_call(['get_authenticator_for_host', host]))
self.mock(git_cl, '_buildbucket_retry', lambda *_, **__:
self._mocked_call(['_buildbucket_retry']))
def _setup_fetch_try_jobs_rietveld(self, *request_results):
self._setup_fetch_try_jobs(most_recent_patchset=20001)
self.calls += [
((['git', 'symbolic-ref', 'HEAD'],), 'feature'),
((['git', 'config', 'branch.feature.rietveldissue'],), '1'),
......@@ -2009,7 +2013,11 @@ class TestGitCl(TestCase):
def test_fetch_try_jobs_none_rietveld(self):
self._setup_fetch_try_jobs_rietveld({})
# Simulate that user isn't logged in.
self.mock(AuthenticatorMock, 'has_cached_credentials', lambda _: False)
self.assertEqual(0, git_cl.main(['try-results']))
self.assertRegexpMatches(sys.stdout.getvalue(),
'Warning: Some results might be missing')
self.assertRegexpMatches(sys.stdout.getvalue(), 'No try jobs')
def test_fetch_try_jobs_some_rietveld(self):
......@@ -2017,7 +2025,44 @@ class TestGitCl(TestCase):
'builds': self.BUILDBUCKET_BUILDS_MAP.values(),
})
self.assertEqual(0, git_cl.main(['try-results']))
self.assertRegexpMatches(sys.stdout.getvalue(), 'Failures:')
self.assertRegexpMatches(sys.stdout.getvalue(), '^Failures:')
self.assertRegexpMatches(sys.stdout.getvalue(), 'Started:')
self.assertRegexpMatches(sys.stdout.getvalue(), '2 try jobs')
def _setup_fetch_try_jobs_gerrit(self, *request_results):
self._setup_fetch_try_jobs(most_recent_patchset=13)
self.calls += [
((['git', 'symbolic-ref', 'HEAD'],), 'feature'),
((['git', 'config', 'branch.feature.rietveldissue'],), CERR1),
((['git', 'config', 'branch.feature.gerritissue'],), '1'),
# Simulate that Gerrit has more patchsets than local.
((['git', 'config', 'branch.feature.gerritpatchset'],), '12'),
((['git', 'config', 'branch.feature.gerritserver'],),
'https://x-review.googlesource.com'),
((['get_authenticator_for_host', 'x-review.googlesource.com'],),
AuthenticatorMock()),
] + [((['_buildbucket_retry'],), r) for r in request_results]
def test_fetch_try_jobs_none_gerrit(self):
self._setup_fetch_try_jobs_gerrit({})
self.assertEqual(0, git_cl.main(['try-results']))
self.assertRegexpMatches(
sys.stdout.getvalue(),
r'Warning: Codereview server has newer patchsets \(13\)')
self.assertRegexpMatches(sys.stdout.getvalue(), 'No try jobs')
def test_fetch_try_jobs_some_gerrit(self):
self._setup_fetch_try_jobs_gerrit({
'builds': self.BUILDBUCKET_BUILDS_MAP.values(),
})
# Explicit --patchset means actual local patchset doesn't matter.
self.calls.remove(
((['git', 'config', 'branch.feature.gerritpatchset'],), '12'))
self.assertEqual(0, git_cl.main(['try-results', '--patchset', '5']))
# ... and doesn't result in warning.
self.assertNotRegexpMatches(sys.stdout.getvalue(), 'Warning')
self.assertRegexpMatches(sys.stdout.getvalue(), '^Failures:')
self.assertRegexpMatches(sys.stdout.getvalue(), 'Started:')
self.assertRegexpMatches(sys.stdout.getvalue(), '2 try jobs')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment