| OLD | NEW |
| 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 14 matching lines...) Expand all Loading... |
| 25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 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 traceback | 31 import traceback |
| 32 import unittest | 32 import unittest |
| 33 | 33 |
| 34 import auto_roll | 34 import auto_roll |
| 35 from auto_roll import AutoRollOptions | |
| 36 from auto_roll import CheckLastPush | 35 from auto_roll import CheckLastPush |
| 37 from auto_roll import FetchLatestRevision | 36 from auto_roll import FetchLatestRevision |
| 38 from auto_roll import SETTINGS_LOCATION | 37 from auto_roll import SETTINGS_LOCATION |
| 39 import common_includes | 38 import common_includes |
| 40 from common_includes import * | 39 from common_includes import * |
| 41 import merge_to_branch | 40 import merge_to_branch |
| 42 from merge_to_branch import * | 41 from merge_to_branch import * |
| 43 import push_to_trunk | 42 import push_to_trunk |
| 44 from push_to_trunk import * | 43 from push_to_trunk import * |
| 45 | 44 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 57 COMMITMSG_FILE: "/tmp/test-v8-push-to-trunk-tempfile-commitmsg", | 56 COMMITMSG_FILE: "/tmp/test-v8-push-to-trunk-tempfile-commitmsg", |
| 58 CHROMIUM: "/tmp/test-v8-push-to-trunk-tempfile-chromium", | 57 CHROMIUM: "/tmp/test-v8-push-to-trunk-tempfile-chromium", |
| 59 DEPS_FILE: "/tmp/test-v8-push-to-trunk-tempfile-chromium/DEPS", | 58 DEPS_FILE: "/tmp/test-v8-push-to-trunk-tempfile-chromium/DEPS", |
| 60 SETTINGS_LOCATION: None, | 59 SETTINGS_LOCATION: None, |
| 61 ALREADY_MERGING_SENTINEL_FILE: | 60 ALREADY_MERGING_SENTINEL_FILE: |
| 62 "/tmp/test-merge-to-branch-tempfile-already-merging", | 61 "/tmp/test-merge-to-branch-tempfile-already-merging", |
| 63 COMMIT_HASHES_FILE: "/tmp/test-merge-to-branch-tempfile-PATCH_COMMIT_HASHES", | 62 COMMIT_HASHES_FILE: "/tmp/test-merge-to-branch-tempfile-PATCH_COMMIT_HASHES", |
| 64 TEMPORARY_PATCH_FILE: "/tmp/test-merge-to-branch-tempfile-temporary-patch", | 63 TEMPORARY_PATCH_FILE: "/tmp/test-merge-to-branch-tempfile-temporary-patch", |
| 65 } | 64 } |
| 66 | 65 |
| 67 | 66 AUTO_ROLL_ARGS = [ |
| 68 def MakeOptions(s=0, l=None, f=False, m=True, r=None, c=None, a=None, | 67 "-a", "author@chromium.org", |
| 69 status_password=None, revert_bleeding_edge=None, p=None): | 68 "-c", TEST_CONFIG[CHROMIUM], |
| 70 """Convenience wrapper.""" | 69 "-r", "reviewer@chromium.org", |
| 71 class Options(object): | 70 ] |
| 72 pass | |
| 73 options = Options() | |
| 74 options.s = s | |
| 75 options.l = l | |
| 76 options.f = f | |
| 77 options.m = m | |
| 78 options.reviewer = r | |
| 79 options.c = c | |
| 80 options.a = a | |
| 81 options.p = p | |
| 82 options.status_password = status_password | |
| 83 options.revert_bleeding_edge = revert_bleeding_edge | |
| 84 return options | |
| 85 | 71 |
| 86 | 72 |
| 87 class ToplevelTest(unittest.TestCase): | 73 class ToplevelTest(unittest.TestCase): |
| 88 def testMakeComment(self): | 74 def testMakeComment(self): |
| 89 self.assertEquals("# Line 1\n# Line 2\n#", | 75 self.assertEquals("# Line 1\n# Line 2\n#", |
| 90 MakeComment(" Line 1\n Line 2\n")) | 76 MakeComment(" Line 1\n Line 2\n")) |
| 91 self.assertEquals("#Line 1\n#Line 2", | 77 self.assertEquals("#Line 1\n#Line 2", |
| 92 MakeComment("Line 1\n Line 2")) | 78 MakeComment("Line 1\n Line 2")) |
| 93 | 79 |
| 94 def testStripComments(self): | 80 def testStripComments(self): |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 f.write(" // Some line...\n") | 274 f.write(" // Some line...\n") |
| 289 f.write("\n") | 275 f.write("\n") |
| 290 f.write("#define MAJOR_VERSION 3\n") | 276 f.write("#define MAJOR_VERSION 3\n") |
| 291 f.write("#define MINOR_VERSION 22\n") | 277 f.write("#define MINOR_VERSION 22\n") |
| 292 f.write("#define BUILD_NUMBER 5\n") | 278 f.write("#define BUILD_NUMBER 5\n") |
| 293 f.write("#define PATCH_LEVEL 0\n") | 279 f.write("#define PATCH_LEVEL 0\n") |
| 294 f.write(" // Some line...\n") | 280 f.write(" // Some line...\n") |
| 295 f.write("#define IS_CANDIDATE_VERSION 0\n") | 281 f.write("#define IS_CANDIDATE_VERSION 0\n") |
| 296 return name | 282 return name |
| 297 | 283 |
| 298 def MakeStep(self, step_class=Step, state=None, options=None): | 284 def MakeStep(self): |
| 299 """Convenience wrapper.""" | 285 """Convenience wrapper.""" |
| 300 options = options or CommonOptions(MakeOptions()) | 286 options = ScriptsBase(TEST_CONFIG, self, self._state).MakeOptions([]) |
| 301 state = state if state is not None else self._state | 287 return MakeStep(step_class=Step, state=self._state, |
| 302 return MakeStep(step_class=step_class, number=0, state=state, | 288 config=TEST_CONFIG, side_effect_handler=self, |
| 303 config=TEST_CONFIG, options=options, | 289 options=options) |
| 304 side_effect_handler=self) | 290 |
| 291 def RunStep(self, script=PushToTrunk, step_class=Step, args=None): |
| 292 """Convenience wrapper.""" |
| 293 args = args or ["-m"] |
| 294 return script(TEST_CONFIG, self, self._state).RunSteps([step_class], args) |
| 305 | 295 |
| 306 def GitMock(self, cmd, args="", pipe=True): | 296 def GitMock(self, cmd, args="", pipe=True): |
| 307 print "%s %s" % (cmd, args) | 297 print "%s %s" % (cmd, args) |
| 308 return self._git_mock.Call(args) | 298 return self._git_mock.Call(args) |
| 309 | 299 |
| 310 def LogMock(self, cmd, args=""): | 300 def LogMock(self, cmd, args=""): |
| 311 print "Log: %s %s" % (cmd, args) | 301 print "Log: %s %s" % (cmd, args) |
| 312 | 302 |
| 313 MOCKS = { | 303 MOCKS = { |
| 314 "git": GitMock, | 304 "git": GitMock, |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 ["log -1 --format=%an rev4", "author4@chromium.org"], | 466 ["log -1 --format=%an rev4", "author4@chromium.org"], |
| 477 ]) | 467 ]) |
| 478 | 468 |
| 479 # The cl for rev4 on rietveld has an updated LOG flag. | 469 # The cl for rev4 on rietveld has an updated LOG flag. |
| 480 self.ExpectReadURL([ | 470 self.ExpectReadURL([ |
| 481 ["https://codereview.chromium.org/9876543210/description", | 471 ["https://codereview.chromium.org/9876543210/description", |
| 482 "Title\n\nBUG=456\nLOG=N\n\n"], | 472 "Title\n\nBUG=456\nLOG=N\n\n"], |
| 483 ]) | 473 ]) |
| 484 | 474 |
| 485 self._state["last_push_bleeding_edge"] = "1234" | 475 self._state["last_push_bleeding_edge"] = "1234" |
| 486 self.MakeStep(PrepareChangeLog).Run() | 476 self.RunStep(PushToTrunk, PrepareChangeLog) |
| 487 | 477 |
| 488 actual_cl = FileToText(TEST_CONFIG[CHANGELOG_ENTRY_FILE]) | 478 actual_cl = FileToText(TEST_CONFIG[CHANGELOG_ENTRY_FILE]) |
| 489 | 479 |
| 490 expected_cl = """1999-07-31: Version 3.22.5 | 480 expected_cl = """1999-07-31: Version 3.22.5 |
| 491 | 481 |
| 492 Title text 1. | 482 Title text 1. |
| 493 | 483 |
| 494 Title text 3 (Chromium issue 321). | 484 Title text 3 (Chromium issue 321). |
| 495 | 485 |
| 496 Performance and stability improvements on all platforms. | 486 Performance and stability improvements on all platforms. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 523 TEST_CONFIG[CHANGELOG_ENTRY_FILE] = self.MakeEmptyTempFile() | 513 TEST_CONFIG[CHANGELOG_ENTRY_FILE] = self.MakeEmptyTempFile() |
| 524 TEST_CONFIG[CHANGELOG_FILE] = self.MakeEmptyTempFile() | 514 TEST_CONFIG[CHANGELOG_FILE] = self.MakeEmptyTempFile() |
| 525 TextToFile(" Original CL", TEST_CONFIG[CHANGELOG_FILE]) | 515 TextToFile(" Original CL", TEST_CONFIG[CHANGELOG_FILE]) |
| 526 TextToFile(" New \n\tLines \n", TEST_CONFIG[CHANGELOG_ENTRY_FILE]) | 516 TextToFile(" New \n\tLines \n", TEST_CONFIG[CHANGELOG_ENTRY_FILE]) |
| 527 os.environ["EDITOR"] = "vi" | 517 os.environ["EDITOR"] = "vi" |
| 528 | 518 |
| 529 self.ExpectReadline([ | 519 self.ExpectReadline([ |
| 530 "", # Open editor. | 520 "", # Open editor. |
| 531 ]) | 521 ]) |
| 532 | 522 |
| 533 self.MakeStep(EditChangeLog).Run() | 523 self.RunStep(PushToTrunk, EditChangeLog) |
| 534 | |
| 535 self.assertEquals("New\n Lines\n\n\n Original CL", | 524 self.assertEquals("New\n Lines\n\n\n Original CL", |
| 536 FileToText(TEST_CONFIG[CHANGELOG_FILE])) | 525 FileToText(TEST_CONFIG[CHANGELOG_FILE])) |
| 537 | 526 |
| 538 def testIncrementVersion(self): | 527 def testIncrementVersion(self): |
| 539 TEST_CONFIG[VERSION_FILE] = self.MakeTempVersionFile() | 528 TEST_CONFIG[VERSION_FILE] = self.MakeTempVersionFile() |
| 540 self._state["build"] = "5" | 529 self._state["build"] = "5" |
| 541 | 530 |
| 542 self.ExpectReadline([ | 531 self.ExpectReadline([ |
| 543 "Y", # Increment build number. | 532 "Y", # Increment build number. |
| 544 ]) | 533 ]) |
| 545 | 534 |
| 546 self.MakeStep(IncrementVersion).Run() | 535 self.RunStep(PushToTrunk, IncrementVersion) |
| 547 | |
| 548 self.assertEquals("3", self._state["new_major"]) | 536 self.assertEquals("3", self._state["new_major"]) |
| 549 self.assertEquals("22", self._state["new_minor"]) | 537 self.assertEquals("22", self._state["new_minor"]) |
| 550 self.assertEquals("6", self._state["new_build"]) | 538 self.assertEquals("6", self._state["new_build"]) |
| 551 self.assertEquals("0", self._state["new_patch"]) | 539 self.assertEquals("0", self._state["new_patch"]) |
| 552 | 540 |
| 553 def testLastChangeLogEntries(self): | 541 def testLastChangeLogEntries(self): |
| 554 TEST_CONFIG[CHANGELOG_FILE] = self.MakeEmptyTempFile() | 542 TEST_CONFIG[CHANGELOG_FILE] = self.MakeEmptyTempFile() |
| 555 l = """ | 543 l = """ |
| 556 Fixed something. | 544 Fixed something. |
| 557 (issue 1234)\n""" | 545 (issue 1234)\n""" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 572 f.write(change_log) | 560 f.write(change_log) |
| 573 | 561 |
| 574 self.ExpectGit([ | 562 self.ExpectGit([ |
| 575 ["diff svn/trunk hash1", "patch content"], | 563 ["diff svn/trunk hash1", "patch content"], |
| 576 ["svn find-rev hash1", "123455\n"], | 564 ["svn find-rev hash1", "123455\n"], |
| 577 ]) | 565 ]) |
| 578 | 566 |
| 579 self._state["prepare_commit_hash"] = "hash1" | 567 self._state["prepare_commit_hash"] = "hash1" |
| 580 self._state["date"] = "1999-11-11" | 568 self._state["date"] = "1999-11-11" |
| 581 | 569 |
| 582 self.MakeStep(SquashCommits).Run() | 570 self.RunStep(PushToTrunk, SquashCommits) |
| 583 self.assertEquals(FileToText(TEST_CONFIG[COMMITMSG_FILE]), expected_msg) | 571 self.assertEquals(FileToText(TEST_CONFIG[COMMITMSG_FILE]), expected_msg) |
| 584 | 572 |
| 585 patch = FileToText(TEST_CONFIG[ PATCH_FILE]) | 573 patch = FileToText(TEST_CONFIG[ PATCH_FILE]) |
| 586 self.assertTrue(re.search(r"patch content", patch)) | 574 self.assertTrue(re.search(r"patch content", patch)) |
| 587 | 575 |
| 588 def testSquashCommitsUnformatted(self): | 576 def testSquashCommitsUnformatted(self): |
| 589 change_log = """1999-11-11: Version 3.22.5 | 577 change_log = """1999-11-11: Version 3.22.5 |
| 590 | 578 |
| 591 Log text 1. | 579 Log text 1. |
| 592 Chromium issue 12345 | 580 Chromium issue 12345 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 # Expected keyboard input in semi-automatic mode: | 721 # Expected keyboard input in semi-automatic mode: |
| 734 if not manual and not force: | 722 if not manual and not force: |
| 735 self.ExpectReadline([ | 723 self.ExpectReadline([ |
| 736 "LGTM", # Enter LGTM for V8 CL. | 724 "LGTM", # Enter LGTM for V8 CL. |
| 737 ]) | 725 ]) |
| 738 | 726 |
| 739 # No keyboard input in forced mode: | 727 # No keyboard input in forced mode: |
| 740 if force: | 728 if force: |
| 741 self.ExpectReadline([]) | 729 self.ExpectReadline([]) |
| 742 | 730 |
| 743 options = MakeOptions(f=force, m=manual, a="author@chromium.org", | 731 args = ["-a", "author@chromium.org", "-c", TEST_CONFIG[CHROMIUM]] |
| 744 r="reviewer@chromium.org" if not manual else None, | 732 if force: args.append("-f") |
| 745 c = TEST_CONFIG[CHROMIUM]) | 733 if manual: args.append("-m") |
| 746 RunPushToTrunk(TEST_CONFIG, PushToTrunkOptions(options), self) | 734 else: args += ["-r", "reviewer@chromium.org"] |
| 735 PushToTrunk(TEST_CONFIG, self).Run(args) |
| 747 | 736 |
| 748 deps = FileToText(TEST_CONFIG[DEPS_FILE]) | 737 deps = FileToText(TEST_CONFIG[DEPS_FILE]) |
| 749 self.assertTrue(re.search("\"v8_revision\": \"123456\"", deps)) | 738 self.assertTrue(re.search("\"v8_revision\": \"123456\"", deps)) |
| 750 | 739 |
| 751 cl = FileToText(TEST_CONFIG[CHANGELOG_FILE]) | 740 cl = FileToText(TEST_CONFIG[CHANGELOG_FILE]) |
| 752 self.assertTrue(re.search(r"^\d\d\d\d\-\d+\-\d+: Version 3\.22\.5", cl)) | 741 self.assertTrue(re.search(r"^\d\d\d\d\-\d+\-\d+: Version 3\.22\.5", cl)) |
| 753 self.assertTrue(re.search(r" Log text 1 \(issue 321\).", cl)) | 742 self.assertTrue(re.search(r" Log text 1 \(issue 321\).", cl)) |
| 754 self.assertTrue(re.search(r"1999\-04\-05: Version 3\.22\.4", cl)) | 743 self.assertTrue(re.search(r"1999\-04\-05: Version 3\.22\.4", cl)) |
| 755 | 744 |
| 756 # Note: The version file is on build number 5 again in the end of this test | 745 # Note: The version file is on build number 5 again in the end of this test |
| 757 # since the git command that merges to the bleeding edge branch is mocked | 746 # since the git command that merges to the bleeding edge branch is mocked |
| 758 # out. | 747 # out. |
| 759 | 748 |
| 760 def testPushToTrunkManual(self): | 749 def testPushToTrunkManual(self): |
| 761 self._PushToTrunk(manual=True) | 750 self._PushToTrunk(manual=True) |
| 762 | 751 |
| 763 def testPushToTrunkSemiAutomatic(self): | 752 def testPushToTrunkSemiAutomatic(self): |
| 764 self._PushToTrunk() | 753 self._PushToTrunk() |
| 765 | 754 |
| 766 def testPushToTrunkForced(self): | 755 def testPushToTrunkForced(self): |
| 767 self._PushToTrunk(force=True) | 756 self._PushToTrunk(force=True) |
| 768 | 757 |
| 769 def testCheckLastPushRecently(self): | 758 def testCheckLastPushRecently(self): |
| 770 self.ExpectGit([ | 759 self.ExpectGit([ |
| 771 ["svn log -1 --oneline", "r101 | Text"], | 760 ["svn log -1 --oneline", "r101 | Text"], |
| 772 ["svn log -1 --oneline ChangeLog", "r99 | Prepare push to trunk..."], | 761 ["svn log -1 --oneline ChangeLog", "r99 | Prepare push to trunk..."], |
| 773 ]) | 762 ]) |
| 774 | 763 |
| 775 state = {} | 764 self.RunStep(auto_roll.AutoRoll, FetchLatestRevision, AUTO_ROLL_ARGS) |
| 776 self.MakeStep(FetchLatestRevision, state=state).Run() | 765 self.assertRaises(Exception, lambda: self.RunStep(auto_roll.AutoRoll, |
| 777 self.assertRaises(Exception, self.MakeStep(CheckLastPush, state=state).Run) | 766 CheckLastPush, |
| 767 AUTO_ROLL_ARGS)) |
| 778 | 768 |
| 779 def testAutoRoll(self): | 769 def testAutoRoll(self): |
| 780 status_password = self.MakeEmptyTempFile() | 770 password = self.MakeEmptyTempFile() |
| 781 TextToFile("PW", status_password) | 771 TextToFile("PW", password) |
| 782 TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile() | 772 TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile() |
| 783 TEST_CONFIG[SETTINGS_LOCATION] = "~/.doesnotexist" | 773 TEST_CONFIG[SETTINGS_LOCATION] = "~/.doesnotexist" |
| 784 | 774 |
| 785 self.ExpectReadURL([ | 775 self.ExpectReadURL([ |
| 786 ["https://v8-status.appspot.com/current?format=json", | 776 ["https://v8-status.appspot.com/current?format=json", |
| 787 "{\"message\": \"Tree is throttled\"}"], | 777 "{\"message\": \"Tree is throttled\"}"], |
| 788 ["https://v8-status.appspot.com/lkgr", Exception("Network problem")], | 778 ["https://v8-status.appspot.com/lkgr", Exception("Network problem")], |
| 789 ["https://v8-status.appspot.com/lkgr", "100"], | 779 ["https://v8-status.appspot.com/lkgr", "100"], |
| 790 ["https://v8-status.appspot.com/status", | 780 ["https://v8-status.appspot.com/status", |
| 791 ("username=v8-auto-roll%40chromium.org&" | 781 ("username=v8-auto-roll%40chromium.org&" |
| 792 "message=Tree+is+closed+%28preparing+to+push%29&password=PW"), | 782 "message=Tree+is+closed+%28preparing+to+push%29&password=PW"), |
| 793 ""], | 783 ""], |
| 794 ["https://v8-status.appspot.com/status", | 784 ["https://v8-status.appspot.com/status", |
| 795 ("username=v8-auto-roll%40chromium.org&" | 785 ("username=v8-auto-roll%40chromium.org&" |
| 796 "message=Tree+is+throttled&password=PW"), ""], | 786 "message=Tree+is+throttled&password=PW"), ""], |
| 797 ]) | 787 ]) |
| 798 | 788 |
| 799 self.ExpectGit([ | 789 self.ExpectGit([ |
| 800 ["status -s -uno", ""], | 790 ["status -s -uno", ""], |
| 801 ["status -s -b -uno", "## some_branch\n"], | 791 ["status -s -b -uno", "## some_branch\n"], |
| 802 ["svn fetch", ""], | 792 ["svn fetch", ""], |
| 803 ["svn log -1 --oneline", "r100 | Text"], | 793 ["svn log -1 --oneline", "r100 | Text"], |
| 804 [("log -1 --format=%H --grep=\"" | 794 [("log -1 --format=%H --grep=\"" |
| 805 "^Version [[:digit:]]*\.[[:digit:]]*\.[[:digit:]]* (based\"" | 795 "^Version [[:digit:]]*\.[[:digit:]]*\.[[:digit:]]* (based\"" |
| 806 " svn/trunk"), "push_hash\n"], | 796 " svn/trunk"), "push_hash\n"], |
| 807 ["svn find-rev push_hash", "65"], | 797 ["svn find-rev push_hash", "65"], |
| 808 ]) | 798 ]) |
| 809 | 799 |
| 810 auto_roll.RunAutoRoll(TEST_CONFIG, AutoRollOptions( | 800 auto_roll.AutoRoll(TEST_CONFIG, self).Run( |
| 811 MakeOptions(status_password=status_password)), self) | 801 AUTO_ROLL_ARGS + ["--status-password", password]) |
| 812 | 802 |
| 813 state = json.loads(FileToText("%s-state.json" | 803 state = json.loads(FileToText("%s-state.json" |
| 814 % TEST_CONFIG[PERSISTFILE_BASENAME])) | 804 % TEST_CONFIG[PERSISTFILE_BASENAME])) |
| 815 | 805 |
| 816 self.assertEquals("100", state["lkgr"]) | 806 self.assertEquals("100", state["lkgr"]) |
| 817 self.assertEquals("100", state["latest"]) | 807 self.assertEquals("100", state["latest"]) |
| 818 | 808 |
| 819 def testAutoRollStoppedBySettings(self): | 809 def testAutoRollStoppedBySettings(self): |
| 820 TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile() | 810 TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile() |
| 821 TEST_CONFIG[SETTINGS_LOCATION] = self.MakeEmptyTempFile() | 811 TEST_CONFIG[SETTINGS_LOCATION] = self.MakeEmptyTempFile() |
| 822 TextToFile("{\"enable_auto_roll\": false}", TEST_CONFIG[SETTINGS_LOCATION]) | 812 TextToFile("{\"enable_auto_roll\": false}", TEST_CONFIG[SETTINGS_LOCATION]) |
| 823 | 813 |
| 824 self.ExpectReadURL([]) | 814 self.ExpectReadURL([]) |
| 825 | 815 |
| 826 self.ExpectGit([ | 816 self.ExpectGit([ |
| 827 ["status -s -uno", ""], | 817 ["status -s -uno", ""], |
| 828 ["status -s -b -uno", "## some_branch\n"], | 818 ["status -s -b -uno", "## some_branch\n"], |
| 829 ["svn fetch", ""], | 819 ["svn fetch", ""], |
| 830 ]) | 820 ]) |
| 831 | 821 |
| 832 def RunAutoRoll(): | 822 def RunAutoRoll(): |
| 833 auto_roll.RunAutoRoll(TEST_CONFIG, AutoRollOptions(MakeOptions()), self) | 823 auto_roll.AutoRoll(TEST_CONFIG, self).Run(AUTO_ROLL_ARGS) |
| 834 self.assertRaises(Exception, RunAutoRoll) | 824 self.assertRaises(Exception, RunAutoRoll) |
| 835 | 825 |
| 836 def testAutoRollStoppedByTreeStatus(self): | 826 def testAutoRollStoppedByTreeStatus(self): |
| 837 TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile() | 827 TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile() |
| 838 TEST_CONFIG[SETTINGS_LOCATION] = "~/.doesnotexist" | 828 TEST_CONFIG[SETTINGS_LOCATION] = "~/.doesnotexist" |
| 839 | 829 |
| 840 self.ExpectReadURL([ | 830 self.ExpectReadURL([ |
| 841 ["https://v8-status.appspot.com/current?format=json", | 831 ["https://v8-status.appspot.com/current?format=json", |
| 842 "{\"message\": \"Tree is throttled (no push)\"}"], | 832 "{\"message\": \"Tree is throttled (no push)\"}"], |
| 843 ]) | 833 ]) |
| 844 | 834 |
| 845 self.ExpectGit([ | 835 self.ExpectGit([ |
| 846 ["status -s -uno", ""], | 836 ["status -s -uno", ""], |
| 847 ["status -s -b -uno", "## some_branch\n"], | 837 ["status -s -b -uno", "## some_branch\n"], |
| 848 ["svn fetch", ""], | 838 ["svn fetch", ""], |
| 849 ]) | 839 ]) |
| 850 | 840 |
| 851 def RunAutoRoll(): | 841 def RunAutoRoll(): |
| 852 auto_roll.RunAutoRoll(TEST_CONFIG, AutoRollOptions(MakeOptions()), self) | 842 auto_roll.AutoRoll(TEST_CONFIG, self).Run(AUTO_ROLL_ARGS) |
| 853 self.assertRaises(Exception, RunAutoRoll) | 843 self.assertRaises(Exception, RunAutoRoll) |
| 854 | 844 |
| 855 def testMergeToBranch(self): | 845 def testMergeToBranch(self): |
| 856 TEST_CONFIG[ALREADY_MERGING_SENTINEL_FILE] = self.MakeEmptyTempFile() | 846 TEST_CONFIG[ALREADY_MERGING_SENTINEL_FILE] = self.MakeEmptyTempFile() |
| 857 TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile() | 847 TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile() |
| 858 TEST_CONFIG[VERSION_FILE] = self.MakeTempVersionFile() | 848 TEST_CONFIG[VERSION_FILE] = self.MakeTempVersionFile() |
| 859 os.environ["EDITOR"] = "vi" | 849 os.environ["EDITOR"] = "vi" |
| 860 extra_patch = self.MakeEmptyTempFile() | 850 extra_patch = self.MakeEmptyTempFile() |
| 861 | 851 |
| 862 def VerifyPatch(patch): | 852 def VerifyPatch(patch): |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 959 ["branch -D %s" % TEST_CONFIG[BRANCHNAME], ""], | 949 ["branch -D %s" % TEST_CONFIG[BRANCHNAME], ""], |
| 960 ]) | 950 ]) |
| 961 | 951 |
| 962 self.ExpectReadline([ | 952 self.ExpectReadline([ |
| 963 "Y", # Automatically add corresponding ports (34567, 56789)? | 953 "Y", # Automatically add corresponding ports (34567, 56789)? |
| 964 "Y", # Automatically increment patch level? | 954 "Y", # Automatically increment patch level? |
| 965 "reviewer@chromium.org", # V8 reviewer. | 955 "reviewer@chromium.org", # V8 reviewer. |
| 966 "LGTM", # Enter LGTM for V8 CL. | 956 "LGTM", # Enter LGTM for V8 CL. |
| 967 ]) | 957 ]) |
| 968 | 958 |
| 969 options = MakeOptions(p=extra_patch, f=True) | |
| 970 # r12345 and r34567 are patches. r23456 (included) and r45678 are the MIPS | 959 # r12345 and r34567 are patches. r23456 (included) and r45678 are the MIPS |
| 971 # ports of r12345. r56789 is the MIPS port of r34567. | 960 # ports of r12345. r56789 is the MIPS port of r34567. |
| 972 args = ["trunk", "12345", "23456", "34567"] | 961 args = ["-f", "-p", extra_patch, "--branch", "trunk", "12345", "23456", |
| 973 self.assertTrue(merge_to_branch.ProcessOptions(options, args)) | 962 "34567"] |
| 974 | 963 |
| 975 # The first run of the script stops because of the svn being down. | 964 # The first run of the script stops because of the svn being down. |
| 976 self.assertRaises(GitFailedException, | 965 self.assertRaises(GitFailedException, |
| 977 lambda: RunMergeToBranch(TEST_CONFIG, | 966 lambda: MergeToBranch(TEST_CONFIG, self).Run(args)) |
| 978 MergeToBranchOptions(options, args), | |
| 979 self)) | |
| 980 | 967 |
| 981 # Test that state recovery after restarting the script works. | 968 # Test that state recovery after restarting the script works. |
| 982 options.s = 3 | 969 args += ["-s", "3"] |
| 983 RunMergeToBranch(TEST_CONFIG, MergeToBranchOptions(options, args), self) | 970 MergeToBranch(TEST_CONFIG, self).Run(args) |
| 984 | 971 |
| 985 | 972 |
| 986 class SystemTest(unittest.TestCase): | 973 class SystemTest(unittest.TestCase): |
| 987 def testReload(self): | 974 def testReload(self): |
| 988 step = MakeStep(step_class=PrepareChangeLog, number=0, state={}, config={}, | 975 step = MakeStep(step_class=PrepareChangeLog, number=0, state={}, config={}, |
| 989 options=CommonOptions(MakeOptions()), | |
| 990 side_effect_handler=DEFAULT_SIDE_EFFECT_HANDLER) | 976 side_effect_handler=DEFAULT_SIDE_EFFECT_HANDLER) |
| 991 body = step.Reload( | 977 body = step.Reload( |
| 992 """------------------------------------------------------------------------ | 978 """------------------------------------------------------------------------ |
| 993 r17997 | machenbach@chromium.org | 2013-11-22 11:04:04 +0100 (...) | 6 lines | 979 r17997 | machenbach@chromium.org | 2013-11-22 11:04:04 +0100 (...) | 6 lines |
| 994 | 980 |
| 995 Prepare push to trunk. Now working on version 3.23.11. | 981 Prepare push to trunk. Now working on version 3.23.11. |
| 996 | 982 |
| 997 R=danno@chromium.org | 983 R=danno@chromium.org |
| 998 | 984 |
| 999 Review URL: https://codereview.chromium.org/83173002 | 985 Review URL: https://codereview.chromium.org/83173002 |
| 1000 | 986 |
| 1001 ------------------------------------------------------------------------""") | 987 ------------------------------------------------------------------------""") |
| 1002 self.assertEquals( | 988 self.assertEquals( |
| 1003 """Prepare push to trunk. Now working on version 3.23.11. | 989 """Prepare push to trunk. Now working on version 3.23.11. |
| 1004 | 990 |
| 1005 R=danno@chromium.org | 991 R=danno@chromium.org |
| 1006 | 992 |
| 1007 Committed: https://code.google.com/p/v8/source/detail?r=17997""", body) | 993 Committed: https://code.google.com/p/v8/source/detail?r=17997""", body) |
| OLD | NEW |