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

Side by Side Diff: tests/gcl_unittest.py

Issue 118355: Added patchset persistence in gcl, this is necessary to implement a presubmit queue. (Closed)
Patch Set: Take 2 Created 11 years, 6 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
« no previous file with comments | « presubmit_support.py ('k') | tests/presubmit_unittest.py » ('j') | 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/python 1 #!/usr/bin/python
2 # Copyright (c) 2009 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2009 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 gcl.py.""" 6 """Unit tests for gcl.py."""
7 7
8 import unittest 8 import unittest
9 9
10 # Local imports 10 # Local imports
(...skipping 30 matching lines...) Expand all
41 def testMembersChanged(self): 41 def testMembersChanged(self):
42 members = [ 42 members = [
43 'CODEREVIEW_SETTINGS', 'CODEREVIEW_SETTINGS_FILE', 'CPP_EXTENSIONS', 43 'CODEREVIEW_SETTINGS', 'CODEREVIEW_SETTINGS_FILE', 'CPP_EXTENSIONS',
44 'Change', 'ChangeInfo', 'Changes', 'Commit', 'DoPresubmitChecks', 44 'Change', 'ChangeInfo', 'Changes', 'Commit', 'DoPresubmitChecks',
45 'ErrorExit', 'FILES_CACHE', 'GenerateChangeName', 'GenerateDiff', 45 'ErrorExit', 'FILES_CACHE', 'GenerateChangeName', 'GenerateDiff',
46 'GetCacheDir', 'GetCachedFile', 'GetChangesDir', 'GetCLs', 46 'GetCacheDir', 'GetCachedFile', 'GetChangesDir', 'GetCLs',
47 'GetChangelistInfoFile', 'GetCodeReviewSetting', 'GetEditor', 47 'GetChangelistInfoFile', 'GetCodeReviewSetting', 'GetEditor',
48 'GetFilesNotInCL', 'GetInfoDir', 'GetIssueDescription', 48 'GetFilesNotInCL', 'GetInfoDir', 'GetIssueDescription',
49 'GetModifiedFiles', 'GetRepositoryRoot', 49 'GetModifiedFiles', 'GetRepositoryRoot',
50 'GetSVNFileProperty', 'Help', 'IGNORE_PATHS', 'IsSVNMoved', 50 'GetSVNFileProperty', 'Help', 'IGNORE_PATHS', 'IsSVNMoved',
51 'Lint', 'LoadChangelistInfo', 'LoadChangelistInfoForMultiple', 51 'Lint', 'LoadChangelistInfoForMultiple',
52 'MISSING_TEST_MSG', 'Opened', 'PresubmitCL', 'ReadFile', 52 'MISSING_TEST_MSG', 'Opened', 'PresubmitCL', 'ReadFile',
53 'REPOSITORY_ROOT', 'RunShell', 53 'REPOSITORY_ROOT', 'RunShell',
54 'RunShellWithReturnCode', 'SEPARATOR', 'SendToRietveld', 'TryChange', 54 'RunShellWithReturnCode', 'SendToRietveld', 'TryChange',
55 'UnknownFiles', 'UploadCL', 'Warn', 'WriteFile', 55 'UnknownFiles', 'UploadCL', 'Warn', 'WriteFile',
56 'gclient', 'getpass', 'main', 'os', 'random', 're', 56 'gclient', 'getpass', 'main', 'os', 'random', 're',
57 'shutil', 'string', 'subprocess', 'sys', 'tempfile', 57 'shutil', 'string', 'subprocess', 'sys', 'tempfile',
58 'upload', 'urllib2', 'xml', 58 'upload', 'urllib2', 'xml',
59 ] 59 ]
60 # If this test fails, you should add the relevant test. 60 # If this test fails, you should add the relevant test.
61 self.compareMembers(gcl, members) 61 self.compareMembers(gcl, members)
62 62
63 63
64 def testHelp(self): 64 def testHelp(self):
(...skipping 23 matching lines...) Expand all
88 gcl.os.getcwd().AndReturn(root_path) 88 gcl.os.getcwd().AndReturn(root_path)
89 results2 = { "Repository Root": "A different root" } 89 results2 = { "Repository Root": "A different root" }
90 gcl.gclient.CaptureSVNInfo( 90 gcl.gclient.CaptureSVNInfo(
91 gcl.os.path.dirname(root_path), 91 gcl.os.path.dirname(root_path),
92 print_error=False).AndReturn(results2) 92 print_error=False).AndReturn(results2)
93 self.mox.ReplayAll() 93 self.mox.ReplayAll()
94 self.assertEquals(gcl.GetRepositoryRoot(), root_path) 94 self.assertEquals(gcl.GetRepositoryRoot(), root_path)
95 95
96 96
97 class ChangeInfoUnittest(GclTestsBase): 97 class ChangeInfoUnittest(GclTestsBase):
98 def setUp(self):
99 GclTestsBase.setUp(self)
100 self.mox.StubOutWithMock(gcl, 'GetChangelistInfoFile')
101 self.mox.StubOutWithMock(gcl.os.path, 'exists')
102 self.mox.StubOutWithMock(gcl, 'ReadFile')
103 self.mox.StubOutWithMock(gcl, 'WriteFile')
104
98 def testChangeInfoMembers(self): 105 def testChangeInfoMembers(self):
99 members = [ 106 members = [
100 'CloseIssue', 'Delete', 'FileList', 'MissingTests', 'Save', 107 'CloseIssue', 'Delete', 'FileList', 'Load', 'MissingTests', 'Save',
101 'UpdateRietveldDescription', 'description', 'files', 'issue', 'name', 108 'UpdateRietveldDescription', 'description', 'files', 'issue', 'name',
102 'patch' 109 'patch', 'patchset',
103 ] 110 ]
104 # If this test fails, you should add the relevant test. 111 # If this test fails, you should add the relevant test.
105 self.compareMembers(gcl.ChangeInfo(), members) 112 self.compareMembers(gcl.ChangeInfo('', 0, 0, '', None), members)
106 113
107 def testChangeInfoBase(self): 114 def testChangeInfoBase(self):
108 files = [('M', 'foo'), ('A', 'bar')] 115 files = [('M', 'foo'), ('A', 'bar')]
109 o = gcl.ChangeInfo('name2', 'issue2', 'description2', files) 116 self.mox.ReplayAll()
117 o = gcl.ChangeInfo('name2', '42', '53', 'description2', files)
110 self.assertEquals(o.name, 'name2') 118 self.assertEquals(o.name, 'name2')
111 self.assertEquals(o.issue, 'issue2') 119 self.assertEquals(o.issue, 42)
120 self.assertEquals(o.patchset, 53)
112 self.assertEquals(o.description, 'description2') 121 self.assertEquals(o.description, 'description2')
113 self.assertEquals(o.files, files) 122 self.assertEquals(o.files, files)
114 self.assertEquals(o.patch, None) 123 self.assertEquals(o.patch, None)
115 self.assertEquals(o.FileList(), ['foo', 'bar']) 124 self.assertEquals(o.FileList(), ['foo', 'bar'])
116 125
126 def testLoadWithIssue(self):
127 description = ["This is some description.", "force an extra separator."]
128 gcl.GetChangelistInfoFile('bleh').AndReturn('bleeeh')
129 gcl.os.path.exists('bleeeh').AndReturn(True)
130 gcl.ReadFile('bleeeh').AndReturn(
131 gcl.ChangeInfo._SEPARATOR.join(["42,53", "G b.cc"] + description))
132 self.mox.ReplayAll()
133
134 change_info = gcl.ChangeInfo.Load('bleh', True, False)
135 self.assertEquals(change_info.name, 'bleh')
136 self.assertEquals(change_info.issue, 42)
137 self.assertEquals(change_info.patchset, 53)
138 self.assertEquals(change_info.description,
139 gcl.ChangeInfo._SEPARATOR.join(description))
140 self.assertEquals(change_info.files, [('G ', 'b.cc')])
141
142 def testLoadEmpty(self):
143 gcl.GetChangelistInfoFile('bleh').AndReturn('bleeeh')
144 gcl.os.path.exists('bleeeh').AndReturn(True)
145 gcl.ReadFile('bleeeh').AndReturn(
146 gcl.ChangeInfo._SEPARATOR.join(["", "", ""]))
147 self.mox.ReplayAll()
148
149 change_info = gcl.ChangeInfo.Load('bleh', True, False)
150 self.assertEquals(change_info.name, 'bleh')
151 self.assertEquals(change_info.issue, 0)
152 self.assertEquals(change_info.patchset, 0)
153 self.assertEquals(change_info.description, "")
154 self.assertEquals(change_info.files, [])
155
156 def testSaveEmpty(self):
157 gcl.GetChangelistInfoFile('').AndReturn('foo')
158 gcl.WriteFile('foo', gcl.ChangeInfo._SEPARATOR.join(['0, 0', '', '']))
159 self.mox.ReplayAll()
160 change_info = gcl.ChangeInfo('', 0, 0, '', None)
161 change_info.Save()
162
117 163
118 class UploadCLUnittest(GclTestsBase): 164 class UploadCLUnittest(GclTestsBase):
119 def setUp(self): 165 def setUp(self):
120 GclTestsBase.setUp(self) 166 GclTestsBase.setUp(self)
121 self.mox.StubOutWithMock(gcl.os, 'chdir') 167 self.mox.StubOutWithMock(gcl.os, 'chdir')
122 self.mox.StubOutWithMock(gcl.os, 'close') 168 self.mox.StubOutWithMock(gcl.os, 'close')
123 self.mox.StubOutWithMock(gcl.os, 'remove') 169 self.mox.StubOutWithMock(gcl.os, 'remove')
124 self.mox.StubOutWithMock(gcl.os, 'write') 170 self.mox.StubOutWithMock(gcl.os, 'write')
125 self.mox.StubOutWithMock(gcl, 'tempfile') 171 self.mox.StubOutWithMock(gcl, 'tempfile')
126 self.mox.StubOutWithMock(gcl.upload, 'RealMain') 172 self.mox.StubOutWithMock(gcl.upload, 'RealMain')
127 self.mox.StubOutWithMock(gcl, 'DoPresubmitChecks') 173 self.mox.StubOutWithMock(gcl, 'DoPresubmitChecks')
128 self.mox.StubOutWithMock(gcl, 'GenerateDiff') 174 self.mox.StubOutWithMock(gcl, 'GenerateDiff')
129 self.mox.StubOutWithMock(gcl, 'GetCodeReviewSetting') 175 self.mox.StubOutWithMock(gcl, 'GetCodeReviewSetting')
130 self.mox.StubOutWithMock(gcl, 'GetRepositoryRoot') 176 self.mox.StubOutWithMock(gcl, 'GetRepositoryRoot')
131 self.mox.StubOutWithMock(gcl, 'SendToRietveld') 177 self.mox.StubOutWithMock(gcl, 'SendToRietveld')
132 self.mox.StubOutWithMock(gcl, 'TryChange') 178 self.mox.StubOutWithMock(gcl, 'TryChange')
133 179
134 def testNew(self): 180 def testNew(self):
135 change_info = gcl.ChangeInfo('naame', 'iissue', 'deescription', 181 change_info = gcl.ChangeInfo('naame', 1, 0, 'deescription',
136 ['aa', 'bb']) 182 ['aa', 'bb'])
137 change_info.Save = self.mox.CreateMockAnything() 183 self.mox.StubOutWithMock(change_info, 'Save')
138 args = ['--foo=bar'] 184 args = ['--foo=bar']
139 change_info.Save() 185 change_info.Save()
140 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) 186 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True)
141 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') 187 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server')
142 gcl.os.getcwd().AndReturn('somewhere') 188 gcl.os.getcwd().AndReturn('somewhere')
143 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) 189 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None))
144 gcl.GenerateDiff(change_info.FileList()) 190 gcl.GenerateDiff(change_info.FileList())
145 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--foo=bar', 191 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--foo=bar',
146 "--message=''", '--issue=iissue'], change_info.patch).AndReturn(("1", 192 "--message=''", '--issue=1'], change_info.patch).AndReturn(("1",
147 "2")) 193 "2"))
148 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) 194 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5)
149 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') 195 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True')
150 gcl.TryChange(change_info, 196 gcl.TryChange(change_info, [], swallow_exception=True)
151 ['--issue', '1', '--patchset', '2'],
152 swallow_exception=True)
153 gcl.os.chdir('somewhere') 197 gcl.os.chdir('somewhere')
154 self.mox.ReplayAll() 198 self.mox.ReplayAll()
155 gcl.UploadCL(change_info, args) 199 gcl.UploadCL(change_info, args)
156 200
157 def testServerOverride(self): 201 def testServerOverride(self):
158 change_info = gcl.ChangeInfo('naame', '', 'deescription', 202 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription',
159 ['aa', 'bb']) 203 ['aa', 'bb'])
160 change_info.Save = self.mox.CreateMockAnything() 204 change_info.Save = self.mox.CreateMockAnything()
161 args = ['--server=a'] 205 args = ['--server=a']
162 change_info.Save() 206 change_info.Save()
163 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) 207 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True)
164 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') 208 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server')
165 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) 209 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile'))
166 gcl.os.write(42, change_info.description) 210 gcl.os.write(42, change_info.description)
167 gcl.os.close(42) 211 gcl.os.close(42)
168 gcl.GetCodeReviewSetting('CC_LIST') 212 gcl.GetCodeReviewSetting('CC_LIST')
169 gcl.os.getcwd().AndReturn('somewhere') 213 gcl.os.getcwd().AndReturn('somewhere')
170 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) 214 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None))
171 gcl.GenerateDiff(change_info.FileList()) 215 gcl.GenerateDiff(change_info.FileList())
172 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--server=a', 216 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--server=a',
173 "--description_file=descfile", 217 "--description_file=descfile",
174 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) 218 "--message=deescription"], change_info.patch).AndReturn(("1", "2"))
175 gcl.os.remove('descfile') 219 gcl.os.remove('descfile')
176 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) 220 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5)
177 gcl.os.chdir('somewhere') 221 gcl.os.chdir('somewhere')
178 self.mox.ReplayAll() 222 self.mox.ReplayAll()
179 gcl.UploadCL(change_info, args) 223 gcl.UploadCL(change_info, args)
180 224
181 def testNoTry(self): 225 def testNoTry(self):
182 change_info = gcl.ChangeInfo('naame', '', 'deescription', 226 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription',
183 ['aa', 'bb']) 227 ['aa', 'bb'])
184 change_info.Save = self.mox.CreateMockAnything() 228 change_info.Save = self.mox.CreateMockAnything()
185 args = ['--no-try'] 229 args = ['--no-try']
186 change_info.Save() 230 change_info.Save()
187 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) 231 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True)
188 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') 232 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server')
189 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) 233 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile'))
190 gcl.os.write(42, change_info.description) 234 gcl.os.write(42, change_info.description)
191 gcl.os.close(42) 235 gcl.os.close(42)
192 gcl.GetCodeReviewSetting('CC_LIST') 236 gcl.GetCodeReviewSetting('CC_LIST')
193 gcl.os.getcwd().AndReturn('somewhere') 237 gcl.os.getcwd().AndReturn('somewhere')
194 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) 238 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None))
195 gcl.GenerateDiff(change_info.FileList()) 239 gcl.GenerateDiff(change_info.FileList())
196 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', 240 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server',
197 "--description_file=descfile", 241 "--description_file=descfile",
198 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) 242 "--message=deescription"], change_info.patch).AndReturn(("1", "2"))
199 gcl.os.remove('descfile') 243 gcl.os.remove('descfile')
200 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) 244 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5)
201 gcl.os.chdir('somewhere') 245 gcl.os.chdir('somewhere')
202 self.mox.ReplayAll() 246 self.mox.ReplayAll()
203 gcl.UploadCL(change_info, args) 247 gcl.UploadCL(change_info, args)
204 248
205 def testNormal(self): 249 def testNormal(self):
206 change_info = gcl.ChangeInfo('naame', '', 'deescription', 250 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription',
207 ['aa', 'bb']) 251 ['aa', 'bb'])
208 self.mox.StubOutWithMock(change_info, 'Save') 252 self.mox.StubOutWithMock(change_info, 'Save')
209 args = [] 253 args = []
210 change_info.Save() 254 change_info.Save()
211 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) 255 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True)
212 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') 256 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server')
213 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) 257 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile'))
214 gcl.os.write(42, change_info.description) 258 gcl.os.write(42, change_info.description)
215 gcl.os.close(42) 259 gcl.os.close(42)
216 gcl.GetCodeReviewSetting('CC_LIST') 260 gcl.GetCodeReviewSetting('CC_LIST')
217 gcl.os.getcwd().AndReturn('somewhere') 261 gcl.os.getcwd().AndReturn('somewhere')
218 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) 262 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None))
219 gcl.GenerateDiff(change_info.FileList()) 263 gcl.GenerateDiff(change_info.FileList())
220 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', 264 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server',
221 "--description_file=descfile", 265 "--description_file=descfile",
222 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) 266 "--message=deescription"], change_info.patch).AndReturn(("1", "2"))
223 gcl.os.remove('descfile') 267 gcl.os.remove('descfile')
224 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) 268 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5)
225 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') 269 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True')
226 gcl.TryChange(change_info, 270 gcl.TryChange(change_info, [], swallow_exception=True)
227 ['--issue', '1', '--patchset', '2'],
228 swallow_exception=True)
229 gcl.os.chdir('somewhere') 271 gcl.os.chdir('somewhere')
230 self.mox.ReplayAll() 272 self.mox.ReplayAll()
273
231 gcl.UploadCL(change_info, args) 274 gcl.UploadCL(change_info, args)
275 self.assertEquals(change_info.issue, 1)
276 self.assertEquals(change_info.patchset, 2)
232 277
233 278
234 if __name__ == '__main__': 279 if __name__ == '__main__':
235 unittest.main() 280 unittest.main()
OLDNEW
« no previous file with comments | « presubmit_support.py ('k') | tests/presubmit_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698