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

Side by Side Diff: tools/push-to-trunk/test_scripts.py

Issue 77453009: Make auto-roll testable. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebase. Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « tools/push-to-trunk/common_includes.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 2013 the V8 project authors. All rights reserved. 2 # Copyright 2013 the V8 project authors. All rights reserved.
3 # Redistribution and use in source and binary forms, with or without 3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are 4 # modification, are permitted provided that the following conditions are
5 # met: 5 # met:
6 # 6 #
7 # * Redistributions of source code must retain the above copyright 7 # * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer. 8 # notice, this list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above 9 # * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following 10 # copyright notice, this list of conditions and the following
(...skipping 16 matching lines...) Expand all
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 28
29 import os 29 import os
30 import tempfile 30 import tempfile
31 import unittest 31 import unittest
32 32
33 import common_includes 33 import common_includes
34 from common_includes import * 34 from common_includes import *
35 import push_to_trunk 35 import push_to_trunk
36 from push_to_trunk import * 36 from push_to_trunk import *
37 import auto_roll
37 38
38 39
39 TEST_CONFIG = { 40 TEST_CONFIG = {
40 BRANCHNAME: "test-prepare-push", 41 BRANCHNAME: "test-prepare-push",
41 TRUNKBRANCH: "test-trunk-push", 42 TRUNKBRANCH: "test-trunk-push",
42 PERSISTFILE_BASENAME: "/tmp/test-v8-push-to-trunk-tempfile", 43 PERSISTFILE_BASENAME: "/tmp/test-v8-push-to-trunk-tempfile",
43 TEMP_BRANCH: "test-prepare-push-temporary-branch-created-by-script", 44 TEMP_BRANCH: "test-prepare-push-temporary-branch-created-by-script",
44 DOT_GIT_LOCATION: None, 45 DOT_GIT_LOCATION: None,
45 VERSION_FILE: None, 46 VERSION_FILE: None,
46 CHANGELOG_FILE: None, 47 CHANGELOG_FILE: None,
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 "BUG=1234567890\n")) 172 "BUG=1234567890\n"))
172 # -----------------00--------10--------20--------30-------- 173 # -----------------00--------10--------20--------30--------
173 self.assertEquals(" (Chromium issues 234, 1234567890" 174 self.assertEquals(" (Chromium issues 234, 1234567890"
174 ", 12345678901234567,\n" 175 ", 12345678901234567,\n"
175 " 1234567890123456789)\n", 176 " 1234567890123456789)\n",
176 MakeChangeLogBugReference("BUG=234\n" 177 MakeChangeLogBugReference("BUG=234\n"
177 "BUG=12345678901234567\n" 178 "BUG=12345678901234567\n"
178 "BUG=1234567890123456789\n" 179 "BUG=1234567890123456789\n"
179 "BUG=1234567890\n")) 180 "BUG=1234567890\n"))
180 181
182
183 class SimpleMock(object):
184 def __init__(self, name):
185 self._name = name
186 self._recipe = []
187 self._index = -1
188
189 def Expect(self, recipe):
190 self._recipe = recipe
191
192 def Call(self, *args):
193 self._index += 1
194 try:
195 expected_call = self._recipe[self._index]
196 except IndexError:
197 raise Exception("Calling %s %s" % (name, " ".join(args)))
198
199 # Pack expectations without arguments into a list.
200 if not isinstance(expected_call, list):
201 expected_call = [expected_call]
202
203 # The number of arguments in the expectation must match the actual
204 # arguments.
205 if len(args) > len(expected_call):
206 raise Exception("When calling %s with arguments, the expectations "
207 "must consist of at least as many arguments.")
208
209 # Compare expected and actual arguments.
210 for (expected_arg, actual_arg) in zip(expected_call, args):
211 if expected_arg != actual_arg:
212 raise Exception("Expected: %s - Actual: %s"
213 % (expected_arg, actual_arg))
214
215 # The expectation list contains a mandatory return value and an optional
216 # callback for checking the context at the time of the call.
217 if len(expected_call) == len(args) + 2:
218 expected_call[len(args) + 1]()
219 return expected_call[len(args)]
220
221 def AssertFinished(self):
222 if self._index < len(self._recipe) -1:
223 raise Exception("Called %s too seldom: %d vs. %d"
224 % (self._name, self._index, len(self._recipe)))
225
226
181 class ScriptTest(unittest.TestCase): 227 class ScriptTest(unittest.TestCase):
182 def MakeEmptyTempFile(self): 228 def MakeEmptyTempFile(self):
183 handle, name = tempfile.mkstemp() 229 handle, name = tempfile.mkstemp()
184 os.close(handle) 230 os.close(handle)
185 self._tmp_files.append(name) 231 self._tmp_files.append(name)
186 return name 232 return name
187 233
188 def MakeTempVersionFile(self): 234 def MakeTempVersionFile(self):
189 name = self.MakeEmptyTempFile() 235 name = self.MakeEmptyTempFile()
190 with open(name, "w") as f: 236 with open(name, "w") as f:
(...skipping 10 matching lines...) Expand all
201 def MakeStep(self, step_class=Step, state=None): 247 def MakeStep(self, step_class=Step, state=None):
202 state = state or {} 248 state = state or {}
203 step = step_class() 249 step = step_class()
204 step.SetConfig(TEST_CONFIG) 250 step.SetConfig(TEST_CONFIG)
205 step.SetState(state) 251 step.SetState(state)
206 step.SetNumber(0) 252 step.SetNumber(0)
207 step.SetSideEffectHandler(self) 253 step.SetSideEffectHandler(self)
208 return step 254 return step
209 255
210 def GitMock(self, cmd, args="", pipe=True): 256 def GitMock(self, cmd, args="", pipe=True):
211 self._git_index += 1 257 return self._git_mock.Call(args)
212 try:
213 git_invocation = self._git_recipe[self._git_index]
214 except IndexError:
215 raise Exception("Calling git %s" % args)
216 if git_invocation[0] != args:
217 raise Exception("Expected: %s - Actual: %s" % (git_invocation[0], args))
218 if len(git_invocation) == 3:
219 # Run optional function checking the context during this git command.
220 git_invocation[2]()
221 return git_invocation[1]
222 258
223 def LogMock(self, cmd, args=""): 259 def LogMock(self, cmd, args=""):
224 print "Log: %s %s" % (cmd, args) 260 print "Log: %s %s" % (cmd, args)
225 261
226 MOCKS = { 262 MOCKS = {
227 "git": GitMock, 263 "git": GitMock,
228 "vi": LogMock, 264 "vi": LogMock,
229 } 265 }
230 266
231 def Command(self, cmd, args="", prefix="", pipe=True): 267 def Command(self, cmd, args="", prefix="", pipe=True):
232 return ScriptTest.MOCKS[cmd](self, cmd, args) 268 return ScriptTest.MOCKS[cmd](self, cmd, args)
233 269
234 def ReadLine(self): 270 def ReadLine(self):
235 self._rl_index += 1 271 return self._rl_mock.Call()
236 try: 272
237 return self._rl_recipe[self._rl_index] 273 def ReadURL(self, url):
238 except IndexError: 274 return self._url_mock.Call(url)
239 raise Exception("Calling readline too often") 275
276 def ExpectGit(self, *args):
277 """Convenience wrapper."""
278 self._git_mock.Expect(*args)
279
280 def ExpectReadline(self, *args):
281 """Convenience wrapper."""
282 self._rl_mock.Expect(*args)
283
284 def ExpectReadURL(self, *args):
285 """Convenience wrapper."""
286 self._url_mock.Expect(*args)
240 287
241 def setUp(self): 288 def setUp(self):
242 self._git_recipe = [] 289 self._git_mock = SimpleMock("git")
243 self._git_index = -1 290 self._rl_mock = SimpleMock("readline")
244 self._rl_recipe = [] 291 self._url_mock = SimpleMock("readurl")
245 self._rl_index = -1
246 self._tmp_files = [] 292 self._tmp_files = []
247 293
248 def tearDown(self): 294 def tearDown(self):
249 Command("rm", "-rf %s*" % TEST_CONFIG[PERSISTFILE_BASENAME]) 295 Command("rm", "-rf %s*" % TEST_CONFIG[PERSISTFILE_BASENAME])
250 296
251 # Clean up temps. Doesn't work automatically. 297 # Clean up temps. Doesn't work automatically.
252 for name in self._tmp_files: 298 for name in self._tmp_files:
253 if os.path.exists(name): 299 if os.path.exists(name):
254 os.remove(name) 300 os.remove(name)
255 301
256 if self._git_index < len(self._git_recipe) -1: 302 self._git_mock.AssertFinished()
257 raise Exception("Called git too seldom: %d vs. %d" % 303 self._rl_mock.AssertFinished()
258 (self._git_index, len(self._git_recipe))) 304 self._url_mock.AssertFinished()
259 if self._rl_index < len(self._rl_recipe) -1:
260 raise Exception("Too little input: %d vs. %d" %
261 (self._rl_index, len(self._rl_recipe)))
262 305
263 def testPersistRestore(self): 306 def testPersistRestore(self):
264 self.MakeStep().Persist("test1", "") 307 self.MakeStep().Persist("test1", "")
265 self.assertEquals("", self.MakeStep().Restore("test1")) 308 self.assertEquals("", self.MakeStep().Restore("test1"))
266 self.MakeStep().Persist("test2", "AB123") 309 self.MakeStep().Persist("test2", "AB123")
267 self.assertEquals("AB123", self.MakeStep().Restore("test2")) 310 self.assertEquals("AB123", self.MakeStep().Restore("test2"))
268 311
269 def testGitOrig(self): 312 def testGitOrig(self):
270 self.assertTrue(Command("git", "--version").startswith("git version")) 313 self.assertTrue(Command("git", "--version").startswith("git version"))
271 314
272 def testGitMock(self): 315 def testGitMock(self):
273 self._git_recipe = [["--version", "git version 1.2.3"], ["dummy", ""]] 316 self.ExpectGit([["--version", "git version 1.2.3"], ["dummy", ""]])
274 self.assertEquals("git version 1.2.3", self.MakeStep().Git("--version")) 317 self.assertEquals("git version 1.2.3", self.MakeStep().Git("--version"))
275 self.assertEquals("", self.MakeStep().Git("dummy")) 318 self.assertEquals("", self.MakeStep().Git("dummy"))
276 319
277 def testCommonPrepareDefault(self): 320 def testCommonPrepareDefault(self):
278 self._git_recipe = [ 321 self.ExpectGit([
279 ["status -s -uno", ""], 322 ["status -s -uno", ""],
280 ["status -s -b -uno", "## some_branch"], 323 ["status -s -b -uno", "## some_branch"],
281 ["svn fetch", ""], 324 ["svn fetch", ""],
282 ["branch", " branch1\n* %s" % TEST_CONFIG[TEMP_BRANCH]], 325 ["branch", " branch1\n* %s" % TEST_CONFIG[TEMP_BRANCH]],
283 ["branch -D %s" % TEST_CONFIG[TEMP_BRANCH], ""], 326 ["branch -D %s" % TEST_CONFIG[TEMP_BRANCH], ""],
284 ["checkout -b %s" % TEST_CONFIG[TEMP_BRANCH], ""], 327 ["checkout -b %s" % TEST_CONFIG[TEMP_BRANCH], ""],
285 ["branch", ""], 328 ["branch", ""],
286 ] 329 ])
287 self._rl_recipe = ["Y"] 330 self.ExpectReadline(["Y"])
288 self.MakeStep().CommonPrepare() 331 self.MakeStep().CommonPrepare()
289 self.MakeStep().PrepareBranch() 332 self.MakeStep().PrepareBranch()
290 self.assertEquals("some_branch", self.MakeStep().Restore("current_branch")) 333 self.assertEquals("some_branch", self.MakeStep().Restore("current_branch"))
291 334
292 def testCommonPrepareNoConfirm(self): 335 def testCommonPrepareNoConfirm(self):
293 self._git_recipe = [ 336 self.ExpectGit([
294 ["status -s -uno", ""], 337 ["status -s -uno", ""],
295 ["status -s -b -uno", "## some_branch"], 338 ["status -s -b -uno", "## some_branch"],
296 ["svn fetch", ""], 339 ["svn fetch", ""],
297 ["branch", " branch1\n* %s" % TEST_CONFIG[TEMP_BRANCH]], 340 ["branch", " branch1\n* %s" % TEST_CONFIG[TEMP_BRANCH]],
298 ] 341 ])
299 self._rl_recipe = ["n"] 342 self.ExpectReadline(["n"])
300 self.MakeStep().CommonPrepare() 343 self.MakeStep().CommonPrepare()
301 self.assertRaises(Exception, self.MakeStep().PrepareBranch) 344 self.assertRaises(Exception, self.MakeStep().PrepareBranch)
302 self.assertEquals("some_branch", self.MakeStep().Restore("current_branch")) 345 self.assertEquals("some_branch", self.MakeStep().Restore("current_branch"))
303 346
304 def testCommonPrepareDeleteBranchFailure(self): 347 def testCommonPrepareDeleteBranchFailure(self):
305 self._git_recipe = [ 348 self.ExpectGit([
306 ["status -s -uno", ""], 349 ["status -s -uno", ""],
307 ["status -s -b -uno", "## some_branch"], 350 ["status -s -b -uno", "## some_branch"],
308 ["svn fetch", ""], 351 ["svn fetch", ""],
309 ["branch", " branch1\n* %s" % TEST_CONFIG[TEMP_BRANCH]], 352 ["branch", " branch1\n* %s" % TEST_CONFIG[TEMP_BRANCH]],
310 ["branch -D %s" % TEST_CONFIG[TEMP_BRANCH], None], 353 ["branch -D %s" % TEST_CONFIG[TEMP_BRANCH], None],
311 ] 354 ])
312 self._rl_recipe = ["Y"] 355 self.ExpectReadline(["Y"])
313 self.MakeStep().CommonPrepare() 356 self.MakeStep().CommonPrepare()
314 self.assertRaises(Exception, self.MakeStep().PrepareBranch) 357 self.assertRaises(Exception, self.MakeStep().PrepareBranch)
315 self.assertEquals("some_branch", self.MakeStep().Restore("current_branch")) 358 self.assertEquals("some_branch", self.MakeStep().Restore("current_branch"))
316 359
317 def testInitialEnvironmentChecks(self): 360 def testInitialEnvironmentChecks(self):
318 TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile() 361 TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile()
319 os.environ["EDITOR"] = "vi" 362 os.environ["EDITOR"] = "vi"
320 self.MakeStep().InitialEnvironmentChecks() 363 self.MakeStep().InitialEnvironmentChecks()
321 364
322 def testReadAndPersistVersion(self): 365 def testReadAndPersistVersion(self):
(...skipping 27 matching lines...) Expand all
350 393
351 self.assertEqual("//\n#define BUILD_NUMBER 3\n", 394 self.assertEqual("//\n#define BUILD_NUMBER 3\n",
352 MSub(r"(?<=#define BUILD_NUMBER)(?P<space>\s+)\d*$", 395 MSub(r"(?<=#define BUILD_NUMBER)(?P<space>\s+)\d*$",
353 r"\g<space>3", 396 r"\g<space>3",
354 "//\n#define BUILD_NUMBER 321\n")) 397 "//\n#define BUILD_NUMBER 321\n"))
355 398
356 def testPrepareChangeLog(self): 399 def testPrepareChangeLog(self):
357 TEST_CONFIG[VERSION_FILE] = self.MakeTempVersionFile() 400 TEST_CONFIG[VERSION_FILE] = self.MakeTempVersionFile()
358 TEST_CONFIG[CHANGELOG_ENTRY_FILE] = self.MakeEmptyTempFile() 401 TEST_CONFIG[CHANGELOG_ENTRY_FILE] = self.MakeEmptyTempFile()
359 402
360 self._git_recipe = [ 403 self.ExpectGit([
361 ["log 1234..HEAD --format=%H", "rev1\nrev2\nrev3"], 404 ["log 1234..HEAD --format=%H", "rev1\nrev2\nrev3"],
362 ["log -1 rev1 --format=\"%w(80,8,8)%s\"", " Title text 1"], 405 ["log -1 rev1 --format=\"%w(80,8,8)%s\"", " Title text 1"],
363 ["log -1 rev1 --format=\"%B\"", "Title\n\nBUG=\nLOG=y\n"], 406 ["log -1 rev1 --format=\"%B\"", "Title\n\nBUG=\nLOG=y\n"],
364 ["log -1 rev1 --format=\"%w(80,8,8)(%an)\"", 407 ["log -1 rev1 --format=\"%w(80,8,8)(%an)\"",
365 " author1@chromium.org"], 408 " author1@chromium.org"],
366 ["log -1 rev2 --format=\"%w(80,8,8)%s\"", " Title text 2"], 409 ["log -1 rev2 --format=\"%w(80,8,8)%s\"", " Title text 2"],
367 ["log -1 rev2 --format=\"%B\"", "Title\n\nBUG=123\nLOG= \n"], 410 ["log -1 rev2 --format=\"%B\"", "Title\n\nBUG=123\nLOG= \n"],
368 ["log -1 rev2 --format=\"%w(80,8,8)(%an)\"", 411 ["log -1 rev2 --format=\"%w(80,8,8)(%an)\"",
369 " author2@chromium.org"], 412 " author2@chromium.org"],
370 ["log -1 rev3 --format=\"%w(80,8,8)%s\"", " Title text 3"], 413 ["log -1 rev3 --format=\"%w(80,8,8)%s\"", " Title text 3"],
371 ["log -1 rev3 --format=\"%B\"", "Title\n\nBUG=321\nLOG=true\n"], 414 ["log -1 rev3 --format=\"%B\"", "Title\n\nBUG=321\nLOG=true\n"],
372 ["log -1 rev3 --format=\"%w(80,8,8)(%an)\"", 415 ["log -1 rev3 --format=\"%w(80,8,8)(%an)\"",
373 " author3@chromium.org"], 416 " author3@chromium.org"],
374 ] 417 ])
375 418
376 self.MakeStep().Persist("last_push", "1234") 419 self.MakeStep().Persist("last_push", "1234")
377 self.MakeStep(PrepareChangeLog).Run() 420 self.MakeStep(PrepareChangeLog).Run()
378 421
379 actual_cl = FileToText(TEST_CONFIG[CHANGELOG_ENTRY_FILE]) 422 actual_cl = FileToText(TEST_CONFIG[CHANGELOG_ENTRY_FILE])
380 423
381 # TODO(machenbach): Mock out call to date() in order to make a fixed 424 # TODO(machenbach): Mock out call to date() in order to make a fixed
382 # comparison here instead of a regexp match. 425 # comparison here instead of a regexp match.
383 expected_cl = """\\d+\\-\\d+\\-\\d+: Version 3\\.22\\.5 426 expected_cl = """\\d+\\-\\d+\\-\\d+: Version 3\\.22\\.5
384 427
(...skipping 27 matching lines...) Expand all
412 self.assertEquals("5", self.MakeStep().Restore("build")) 455 self.assertEquals("5", self.MakeStep().Restore("build"))
413 self.assertEquals("0", self.MakeStep().Restore("patch")) 456 self.assertEquals("0", self.MakeStep().Restore("patch"))
414 457
415 def testEditChangeLog(self): 458 def testEditChangeLog(self):
416 TEST_CONFIG[CHANGELOG_ENTRY_FILE] = self.MakeEmptyTempFile() 459 TEST_CONFIG[CHANGELOG_ENTRY_FILE] = self.MakeEmptyTempFile()
417 TEST_CONFIG[CHANGELOG_FILE] = self.MakeEmptyTempFile() 460 TEST_CONFIG[CHANGELOG_FILE] = self.MakeEmptyTempFile()
418 TextToFile(" Original CL", TEST_CONFIG[CHANGELOG_FILE]) 461 TextToFile(" Original CL", TEST_CONFIG[CHANGELOG_FILE])
419 TextToFile(" New \n\tLines \n", TEST_CONFIG[CHANGELOG_ENTRY_FILE]) 462 TextToFile(" New \n\tLines \n", TEST_CONFIG[CHANGELOG_ENTRY_FILE])
420 os.environ["EDITOR"] = "vi" 463 os.environ["EDITOR"] = "vi"
421 464
422 self._rl_recipe = [ 465 self.ExpectReadline([
423 "", # Open editor. 466 "", # Open editor.
424 ] 467 ])
425 468
426 self.MakeStep(EditChangeLog).Run() 469 self.MakeStep(EditChangeLog).Run()
427 470
428 self.assertEquals(" New\n Lines\n\n\n Original CL", 471 self.assertEquals(" New\n Lines\n\n\n Original CL",
429 FileToText(TEST_CONFIG[CHANGELOG_FILE])) 472 FileToText(TEST_CONFIG[CHANGELOG_FILE]))
430 473
431 def testIncrementVersion(self): 474 def testIncrementVersion(self):
432 TEST_CONFIG[VERSION_FILE] = self.MakeTempVersionFile() 475 TEST_CONFIG[VERSION_FILE] = self.MakeTempVersionFile()
433 self.MakeStep().Persist("build", "5") 476 self.MakeStep().Persist("build", "5")
434 477
435 self._rl_recipe = [ 478 self.ExpectReadline([
436 "Y", # Increment build number. 479 "Y", # Increment build number.
437 ] 480 ])
438 481
439 self.MakeStep(IncrementVersion).Run() 482 self.MakeStep(IncrementVersion).Run()
440 483
441 self.assertEquals("3", self.MakeStep().Restore("new_major")) 484 self.assertEquals("3", self.MakeStep().Restore("new_major"))
442 self.assertEquals("22", self.MakeStep().Restore("new_minor")) 485 self.assertEquals("22", self.MakeStep().Restore("new_minor"))
443 self.assertEquals("6", self.MakeStep().Restore("new_build")) 486 self.assertEquals("6", self.MakeStep().Restore("new_build"))
444 self.assertEquals("0", self.MakeStep().Restore("new_patch")) 487 self.assertEquals("0", self.MakeStep().Restore("new_patch"))
445 488
446 def testLastChangeLogEntries(self): 489 def testLastChangeLogEntries(self):
447 TEST_CONFIG[CHANGELOG_FILE] = self.MakeEmptyTempFile() 490 TEST_CONFIG[CHANGELOG_FILE] = self.MakeEmptyTempFile()
(...skipping 15 matching lines...) Expand all
463 TEST_CONFIG[CHANGELOG_ENTRY_FILE] = self.MakeEmptyTempFile() 506 TEST_CONFIG[CHANGELOG_ENTRY_FILE] = self.MakeEmptyTempFile()
464 with open(TEST_CONFIG[CHANGELOG_ENTRY_FILE], "w") as f: 507 with open(TEST_CONFIG[CHANGELOG_ENTRY_FILE], "w") as f:
465 f.write("1999-11-11: Version 3.22.5\n") 508 f.write("1999-11-11: Version 3.22.5\n")
466 f.write("\n") 509 f.write("\n")
467 f.write(" Log text 1.\n") 510 f.write(" Log text 1.\n")
468 f.write(" Chromium issue 12345\n") 511 f.write(" Chromium issue 12345\n")
469 f.write("\n") 512 f.write("\n")
470 f.write(" Performance and stability improvements on all " 513 f.write(" Performance and stability improvements on all "
471 "platforms.\n") 514 "platforms.\n")
472 515
473 self._git_recipe = [ 516 self.ExpectGit([
474 ["diff svn/trunk hash1", "patch content"], 517 ["diff svn/trunk hash1", "patch content"],
475 ] 518 ])
476 519
477 self.MakeStep().Persist("prepare_commit_hash", "hash1") 520 self.MakeStep().Persist("prepare_commit_hash", "hash1")
478 self.MakeStep().Persist("date", "1999-11-11") 521 self.MakeStep().Persist("date", "1999-11-11")
479 522
480 self.MakeStep(SquashCommits).Run() 523 self.MakeStep(SquashCommits).Run()
481 524
482 msg = FileToText(TEST_CONFIG[COMMITMSG_FILE]) 525 msg = FileToText(TEST_CONFIG[COMMITMSG_FILE])
483 self.assertTrue(re.search(r"Version 3\.22\.5", msg)) 526 self.assertTrue(re.search(r"Version 3\.22\.5", msg))
484 self.assertTrue(re.search(r"Performance and stability", msg)) 527 self.assertTrue(re.search(r"Performance and stability", msg))
485 self.assertTrue(re.search(r"Log text 1\. Chromium issue 12345", msg)) 528 self.assertTrue(re.search(r"Log text 1\. Chromium issue 12345", msg))
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 self.assertTrue(re.search(r"Version 3.22.5", commit)) 564 self.assertTrue(re.search(r"Version 3.22.5", commit))
522 self.assertTrue(re.search(r"Log text 1. \(issue 321\)", commit)) 565 self.assertTrue(re.search(r"Log text 1. \(issue 321\)", commit))
523 version = FileToText(TEST_CONFIG[VERSION_FILE]) 566 version = FileToText(TEST_CONFIG[VERSION_FILE])
524 self.assertTrue(re.search(r"#define MINOR_VERSION\s+22", version)) 567 self.assertTrue(re.search(r"#define MINOR_VERSION\s+22", version))
525 self.assertTrue(re.search(r"#define BUILD_NUMBER\s+5", version)) 568 self.assertTrue(re.search(r"#define BUILD_NUMBER\s+5", version))
526 self.assertFalse(re.search(r"#define BUILD_NUMBER\s+6", version)) 569 self.assertFalse(re.search(r"#define BUILD_NUMBER\s+6", version))
527 self.assertTrue(re.search(r"#define PATCH_LEVEL\s+0", version)) 570 self.assertTrue(re.search(r"#define PATCH_LEVEL\s+0", version))
528 self.assertTrue(re.search(r"#define IS_CANDIDATE_VERSION\s+0", version)) 571 self.assertTrue(re.search(r"#define IS_CANDIDATE_VERSION\s+0", version))
529 572
530 force_flag = " -f" if force else "" 573 force_flag = " -f" if force else ""
531 self._git_recipe = [ 574 self.ExpectGit([
532 ["status -s -uno", ""], 575 ["status -s -uno", ""],
533 ["status -s -b -uno", "## some_branch\n"], 576 ["status -s -b -uno", "## some_branch\n"],
534 ["svn fetch", ""], 577 ["svn fetch", ""],
535 ["branch", " branch1\n* branch2\n"], 578 ["branch", " branch1\n* branch2\n"],
536 ["checkout -b %s" % TEST_CONFIG[TEMP_BRANCH], ""], 579 ["checkout -b %s" % TEST_CONFIG[TEMP_BRANCH], ""],
537 ["branch", " branch1\n* branch2\n"], 580 ["branch", " branch1\n* branch2\n"],
538 ["branch", " branch1\n* branch2\n"], 581 ["branch", " branch1\n* branch2\n"],
539 ["checkout -b %s svn/bleeding_edge" % TEST_CONFIG[BRANCHNAME], ""], 582 ["checkout -b %s svn/bleeding_edge" % TEST_CONFIG[BRANCHNAME], ""],
540 ["log -1 --format=%H ChangeLog", "1234\n"], 583 ["log -1 --format=%H ChangeLog", "1234\n"],
541 ["log -1 1234", "Last push ouput\n"], 584 ["log -1 1234", "Last push ouput\n"],
(...skipping 26 matching lines...) Expand all
568 ["pull", ""], 611 ["pull", ""],
569 ["checkout -b v8-roll-123456", ""], 612 ["checkout -b v8-roll-123456", ""],
570 [("commit -am \"Update V8 to version 3.22.5.\n\n" 613 [("commit -am \"Update V8 to version 3.22.5.\n\n"
571 "TBR=reviewer@chromium.org\""), 614 "TBR=reviewer@chromium.org\""),
572 ""], 615 ""],
573 ["cl upload --send-mail%s" % force_flag, ""], 616 ["cl upload --send-mail%s" % force_flag, ""],
574 ["checkout -f some_branch", ""], 617 ["checkout -f some_branch", ""],
575 ["branch -D %s" % TEST_CONFIG[TEMP_BRANCH], ""], 618 ["branch -D %s" % TEST_CONFIG[TEMP_BRANCH], ""],
576 ["branch -D %s" % TEST_CONFIG[BRANCHNAME], ""], 619 ["branch -D %s" % TEST_CONFIG[BRANCHNAME], ""],
577 ["branch -D %s" % TEST_CONFIG[TRUNKBRANCH], ""], 620 ["branch -D %s" % TEST_CONFIG[TRUNKBRANCH], ""],
578 ] 621 ])
579 self._rl_recipe = [ 622 self.ExpectReadline([
580 "Y", # Confirm last push. 623 "Y", # Confirm last push.
581 "", # Open editor. 624 "", # Open editor.
582 "Y", # Increment build number. 625 "Y", # Increment build number.
583 "reviewer@chromium.org", # V8 reviewer. 626 "reviewer@chromium.org", # V8 reviewer.
584 "LGTX", # Enter LGTM for V8 CL (wrong). 627 "LGTX", # Enter LGTM for V8 CL (wrong).
585 "LGTM", # Enter LGTM for V8 CL. 628 "LGTM", # Enter LGTM for V8 CL.
586 "Y", # Sanity check. 629 "Y", # Sanity check.
587 "reviewer@chromium.org", # Chromium reviewer. 630 "reviewer@chromium.org", # Chromium reviewer.
588 ] 631 ])
589 if force: 632 if force:
590 # TODO(machenbach): The lgtm for the prepare push is just temporary. 633 # TODO(machenbach): The lgtm for the prepare push is just temporary.
591 # There should be no user input in "force" mode. 634 # There should be no user input in "force" mode.
592 self._rl_recipe = [ 635 self.ExpectReadline([
593 "LGTM", # Enter LGTM for V8 CL. 636 "LGTM", # Enter LGTM for V8 CL.
594 ] 637 ])
595 638
596 class Options( object ): 639 class Options( object ):
597 pass 640 pass
598 641
599 options = Options() 642 options = Options()
600 options.s = 0 643 options.s = 0
601 options.l = None 644 options.l = None
602 options.f = force 645 options.f = force
603 options.r = "reviewer@chromium.org" if force else None 646 options.r = "reviewer@chromium.org" if force else None
604 options.c = TEST_CONFIG[CHROMIUM] 647 options.c = TEST_CONFIG[CHROMIUM]
(...skipping 10 matching lines...) Expand all
615 658
616 # Note: The version file is on build number 5 again in the end of this test 659 # Note: The version file is on build number 5 again in the end of this test
617 # since the git command that merges to the bleeding edge branch is mocked 660 # since the git command that merges to the bleeding edge branch is mocked
618 # out. 661 # out.
619 662
620 def testPushToTrunk(self): 663 def testPushToTrunk(self):
621 self._PushToTrunk() 664 self._PushToTrunk()
622 665
623 def testPushToTrunkForced(self): 666 def testPushToTrunkForced(self):
624 self._PushToTrunk(force=True) 667 self._PushToTrunk(force=True)
668
669 def testAutoRoll(self):
670 TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile()
671
672 # TODO(machenbach): Get rid of the editor check in automatic mode.
673 os.environ["EDITOR"] = "vi"
674
675 self.ExpectReadURL([
676 ["https://v8-status.appspot.com/lkgr", "100"],
677 ])
678
679 self.ExpectGit([
680 ["status -s -uno", ""],
681 ["status -s -b -uno", "## some_branch\n"],
682 ["svn fetch", ""],
683 ["svn log -1 --oneline", "r101 | Text"],
684 ])
685
686 # TODO(machenbach): Make a convenience wrapper for this.
687 class Options( object ):
688 pass
689
690 options = Options()
691 options.s = 0
692
693 auto_roll.RunAutoRoll(TEST_CONFIG, options, self)
694
695 self.assertEquals("100", self.MakeStep().Restore("lkgr"))
696 self.assertEquals("101", self.MakeStep().Restore("latest"))
OLDNEW
« no previous file with comments | « tools/push-to-trunk/common_includes.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698