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

Side by Side Diff: tests/git_cl_test.py

Issue 2395113002: git cl try-results: refactor Rietveld + add tests. (Closed)
Patch Set: 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 os 8 import os
9 import StringIO 9 import StringIO
10 import stat 10 import stat
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 def read(self): 90 def read(self):
91 return ("CODE_REVIEW_SERVER: gerrit.chromium.org\n" + 91 return ("CODE_REVIEW_SERVER: gerrit.chromium.org\n" +
92 "GERRIT_HOST: True\n") 92 "GERRIT_HOST: True\n")
93 93
94 94
95 class AuthenticatorMock(object): 95 class AuthenticatorMock(object):
96 def __init__(self, *_args): 96 def __init__(self, *_args):
97 pass 97 pass
98 def has_cached_credentials(self): 98 def has_cached_credentials(self):
99 return True 99 return True
100 def authorize(self, http):
101 return http
100 102
101 103
102 def CookiesAuthenticatorMockFactory(hosts_with_creds=None, same_cookie=False): 104 def CookiesAuthenticatorMockFactory(hosts_with_creds=None, same_cookie=False):
103 """Use to mock Gerrit/Git credentials from ~/.netrc or ~/.gitcookies. 105 """Use to mock Gerrit/Git credentials from ~/.netrc or ~/.gitcookies.
104 106
105 Usage: 107 Usage:
106 >>> self.mock(git_cl.gerrit_util, "CookiesAuthenticator", 108 >>> self.mock(git_cl.gerrit_util, "CookiesAuthenticator",
107 CookiesAuthenticatorMockFactory({'host1': 'cookie1'})) 109 CookiesAuthenticatorMockFactory({'host1': 'cookie1'}))
108 110
109 OR 111 OR
(...skipping 1738 matching lines...) Expand 10 before | Expand all | Expand 10 after
1848 ((['DoGetTrySlaves'], ), None), 1850 ((['DoGetTrySlaves'], ), None),
1849 ((['SetCQState', git_cl._CQState.DRY_RUN], ), None), 1851 ((['SetCQState', git_cl._CQState.DRY_RUN], ), None),
1850 ] 1852 ]
1851 out = StringIO.StringIO() 1853 out = StringIO.StringIO()
1852 self.mock(git_cl.sys, 'stdout', out) 1854 self.mock(git_cl.sys, 'stdout', out)
1853 self.assertEqual(0, git_cl.main(['try'])) 1855 self.assertEqual(0, git_cl.main(['try']))
1854 self.assertEqual( 1856 self.assertEqual(
1855 out.getvalue(), 1857 out.getvalue(),
1856 'scheduled CQ Dry Run on https://codereview.chromium.org/123\n') 1858 'scheduled CQ Dry Run on https://codereview.chromium.org/123\n')
1857 1859
1858 def test_write_try_results_json(self):
tandrii(chromium) 2016/10/06 13:21:10 this isn't changed, just moved + builds below made
1859 builds = {
1860 '9000': {
1861 'id': '9000',
1862 'status': 'STARTED',
1863 'url': 'http://build.cr.org/p/x.y/builders/my-builder/builds/2',
1864 'result_details_json': '{"properties": {}}',
1865 'bucket': 'master.x.y',
1866 'created_by': 'user:someone@chromium.org',
1867 'created_ts': '147200002222000',
1868 'parameters_json': '{"builder_name": "my-builder", "category": ""}',
1869 },
1870 '8000': {
1871 'id': '8000',
1872 'status': 'COMPLETED',
1873 'result': 'FAILURE',
1874 'failure_reason': 'BUILD_FAILURE',
1875 'url': 'http://build.cr.org/p/x.y/builders/my-builder/builds/1',
1876 'result_details_json': '{"properties": {}}',
1877 'bucket': 'master.x.y',
1878 'created_by': 'user:someone@chromium.org',
1879 'created_ts': '147200001111000',
1880 'parameters_json': '{"builder_name": "my-builder", "category": ""}',
1881 },
1882 }
1883 expected_output = [
1884 {
1885 'buildbucket_id': '8000',
1886 'bucket': 'master.x.y',
1887 'builder_name': 'my-builder',
1888 'status': 'COMPLETED',
1889 'result': 'FAILURE',
1890 'failure_reason': 'BUILD_FAILURE',
1891 'url': 'http://build.cr.org/p/x.y/builders/my-builder/builds/1',
1892 },
1893 {
1894 'buildbucket_id': '9000',
1895 'bucket': 'master.x.y',
1896 'builder_name': 'my-builder',
1897 'status': 'STARTED',
1898 'result': None,
1899 'failure_reason': None,
1900 'url': 'http://build.cr.org/p/x.y/builders/my-builder/builds/2',
1901 }
1902 ]
1903 self.calls = [(('write_json', 'output.json', expected_output), '')]
1904 git_cl.write_try_results_json('output.json', builds)
1905
1906 def _common_GerritCommitMsgHookCheck(self): 1860 def _common_GerritCommitMsgHookCheck(self):
1907 self.mock(git_cl.sys, 'stdout', StringIO.StringIO()) 1861 self.mock(git_cl.sys, 'stdout', StringIO.StringIO())
1908 self.mock(git_cl.os.path, 'abspath', 1862 self.mock(git_cl.os.path, 'abspath',
1909 lambda path: self._mocked_call(['abspath', path])) 1863 lambda path: self._mocked_call(['abspath', path]))
1910 self.mock(git_cl.os.path, 'exists', 1864 self.mock(git_cl.os.path, 'exists',
1911 lambda path: self._mocked_call(['exists', path])) 1865 lambda path: self._mocked_call(['exists', path]))
1912 self.mock(git_cl.gclient_utils, 'FileRead', 1866 self.mock(git_cl.gclient_utils, 'FileRead',
1913 lambda path: self._mocked_call(['FileRead', path])) 1867 lambda path: self._mocked_call(['FileRead', path]))
1914 self.mock(git_cl.gclient_utils, 'rm_file_or_tree', 1868 self.mock(git_cl.gclient_utils, 'rm_file_or_tree',
1915 lambda path: self._mocked_call(['rm_file_or_tree', path])) 1869 lambda path: self._mocked_call(['rm_file_or_tree', path]))
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1960 cl._codereview_impl._GetChangeDetail = lambda _: { 1914 cl._codereview_impl._GetChangeDetail = lambda _: {
1961 'labels': {}, 1915 'labels': {},
1962 'current_revision': 'deadbeaf', 1916 'current_revision': 'deadbeaf',
1963 } 1917 }
1964 cl._codereview_impl.SubmitIssue = lambda wait_for_merge: None 1918 cl._codereview_impl.SubmitIssue = lambda wait_for_merge: None
1965 out = StringIO.StringIO() 1919 out = StringIO.StringIO()
1966 self.mock(sys, 'stdout', out) 1920 self.mock(sys, 'stdout', out)
1967 self.assertEqual(0, cl.CMDLand(force=True, bypass_hooks=True, verbose=True)) 1921 self.assertEqual(0, cl.CMDLand(force=True, bypass_hooks=True, verbose=True))
1968 self.assertRegexpMatches(out.getvalue(), 'Issue.*123 has been submitted') 1922 self.assertRegexpMatches(out.getvalue(), 'Issue.*123 has been submitted')
1969 1923
1924 BUILDBUCKET_BUILDS_MAP = {
1925 '9000': {
1926 'id': '9000',
1927 'status': 'STARTED',
1928 'url': 'http://build.cr.org/p/x.y/builders/my-builder/builds/2',
1929 'result_details_json': '{"properties": {}}',
1930 'bucket': 'master.x.y',
1931 'created_by': 'user:someone@chromium.org',
1932 'created_ts': '147200002222000',
1933 'parameters_json': '{"builder_name": "my-builder", "category": ""}',
1934 },
1935 '8000': {
1936 'id': '8000',
1937 'status': 'COMPLETED',
1938 'result': 'FAILURE',
1939 'failure_reason': 'BUILD_FAILURE',
1940 'url': 'http://build.cr.org/p/x.y/builders/my-builder/builds/1',
1941 'result_details_json': '{"properties": {}}',
1942 'bucket': 'master.x.y',
1943 'created_by': 'user:someone@chromium.org',
1944 'created_ts': '147200001111000',
1945 'parameters_json': '{"builder_name": "my-builder", "category": ""}',
1946 },
1947 }
1948
1949 def test_write_try_results_json(self):
tandrii(chromium) 2016/10/06 13:21:10 same as before.
1950 expected_output = [
1951 {
1952 'buildbucket_id': '8000',
1953 'bucket': 'master.x.y',
1954 'builder_name': 'my-builder',
1955 'status': 'COMPLETED',
1956 'result': 'FAILURE',
1957 'failure_reason': 'BUILD_FAILURE',
1958 'url': 'http://build.cr.org/p/x.y/builders/my-builder/builds/1',
1959 },
1960 {
1961 'buildbucket_id': '9000',
1962 'bucket': 'master.x.y',
1963 'builder_name': 'my-builder',
1964 'status': 'STARTED',
1965 'result': None,
1966 'failure_reason': None,
1967 'url': 'http://build.cr.org/p/x.y/builders/my-builder/builds/2',
1968 }
1969 ]
1970 self.calls = [(('write_json', 'output.json', expected_output), '')]
1971 git_cl.write_try_results_json('output.json', self.BUILDBUCKET_BUILDS_MAP)
1972
1973 def _setup_fetch_try_jobs_rietveld(self, *request_results):
tandrii(chromium) 2016/10/06 13:21:10 this and below is actually new code -- adding test
1974 out = StringIO.StringIO()
1975 self.mock(sys, 'stdout', out)
1976 self.mock(git_cl.Changelist, 'GetMostRecentPatchset', lambda *args: 20001)
1977 self.mock(git_cl.auth, 'get_authenticator_for_host', lambda host, _cfg:
1978 self._mocked_call(['get_authenticator_for_host', host]))
1979 self.mock(git_cl, '_buildbucket_retry', lambda *_, **__:
1980 self._mocked_call(['_buildbucket_retry']))
1981 self.calls += [
1982 ((['git', 'symbolic-ref', 'HEAD'],), 'feature'),
1983 ((['git', 'config', 'branch.feature.rietveldissue'],), '1'),
1984 ((['git', 'config', 'rietveld.autoupdate'],), CERR1),
1985 ((['git', 'config', 'rietveld.server'],), 'codereview.example.com'),
1986 ((['git', 'config', 'branch.feature.rietveldpatchset'],), '20001'),
1987 ((['git', 'config', 'branch.feature.rietveldserver'],),
1988 'codereview.example.com'),
1989 ((['get_authenticator_for_host', 'codereview.example.com'],),
1990 AuthenticatorMock()),
1991 ] + [((['_buildbucket_retry'],), r) for r in request_results]
1992
1993 def test_fetch_try_jobs_none_rietveld(self):
1994 self._setup_fetch_try_jobs_rietveld({})
1995 self.assertEqual(0, git_cl.main(['try-results']))
1996 self.assertRegexpMatches(sys.stdout.getvalue(), 'No try jobs')
1997
1998 def test_fetch_try_jobs_some_rietveld(self):
1999 self._setup_fetch_try_jobs_rietveld({
2000 'builds': self.BUILDBUCKET_BUILDS_MAP.values(),
2001 })
2002 self.assertEqual(0, git_cl.main(['try-results']))
2003 self.assertRegexpMatches(sys.stdout.getvalue(), 'Failures:')
2004 self.assertRegexpMatches(sys.stdout.getvalue(), 'Started:')
2005 self.assertRegexpMatches(sys.stdout.getvalue(), '2 try jobs')
2006
1970 2007
1971 if __name__ == '__main__': 2008 if __name__ == '__main__':
1972 git_cl.logging.basicConfig( 2009 git_cl.logging.basicConfig(
1973 level=git_cl.logging.DEBUG if '-v' in sys.argv else git_cl.logging.ERROR) 2010 level=git_cl.logging.DEBUG if '-v' in sys.argv else git_cl.logging.ERROR)
1974 unittest.main() 2011 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