OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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() |
OLD | NEW |