| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2010 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 pending_manager.py.""" | 6 """Unit tests for pending_manager.py.""" |
| 7 | 7 |
| 8 import logging | 8 import logging |
| 9 import os | 9 import os |
| 10 import re | 10 import re |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 { | 95 { |
| 96 "date": "2010-12-27 03:23:32.489999", | 96 "date": "2010-12-27 03:23:32.489999", |
| 97 "text": "hi!", | 97 "text": "hi!", |
| 98 "sender": "author@example.com", | 98 "sender": "author@example.com", |
| 99 "recipients": ["rev@example.com", "cc@example.com"], | 99 "recipients": ["rev@example.com", "cc@example.com"], |
| 100 }, | 100 }, |
| 101 ], | 101 ], |
| 102 "commit": True, | 102 "commit": True, |
| 103 }, | 103 }, |
| 104 } | 104 } |
| 105 self.patchsets = [] |
| 105 | 106 |
| 106 def get_pending_issues(self): | 107 def get_pending_issues(self): |
| 107 return self.issues.keys() | 108 return self.issues.keys() |
| 108 | 109 |
| 109 def get_issue_properties(self, issue_id, _): | 110 def get_issue_properties(self, issue_id, _): |
| 110 return self.issues[issue_id] | 111 return self.issues[issue_id] |
| 111 | 112 |
| 112 def close_issue(self, issue): | 113 def close_issue(self, issue): |
| 113 pass | 114 pass |
| 114 | 115 |
| 115 def update_description(self, issue, text): | 116 def update_description(self, issue, text): |
| 116 pass | 117 pass |
| 117 | 118 |
| 118 def set_flag(self, issue, patchset, flag, value): | 119 def set_flag(self, issue, patchset, flag, value): |
| 119 pass | 120 pass |
| 120 | 121 |
| 121 def add_comment(self, issue, text): | 122 def add_comment(self, issue, text): |
| 122 pass | 123 pass |
| 123 | 124 |
| 124 def get_patch(self, issue, patchset): | 125 def get_patch(self, issue, patchset): |
| 125 return patch.PatchSet([ | 126 self.patchsets.append(patch.PatchSet([ |
| 126 patch.FilePatchDiff('chrome/file.cc', SVN_PATCH, []), | 127 patch.FilePatchDiff('chrome/file.cc', SVN_PATCH, []), |
| 127 patch.FilePatchDelete('other/place/foo', True), | 128 patch.FilePatchDelete('other/place/foo', True), |
| 128 patch.FilePatchBinary('foo', 'data', []), | 129 patch.FilePatchBinary('foo', 'data', []), |
| 129 ]) | 130 ])) |
| 131 return self.patchsets[-1] |
| 130 | 132 |
| 131 | 133 |
| 132 class FakeCheckout(object): | 134 class FakeCheckout(object): |
| 133 project_path = os.getcwd() | 135 project_path = os.getcwd() |
| 134 | 136 |
| 135 def __init__(self): | 137 def __init__(self): |
| 136 self._prepare = 0 | 138 self._prepare = 0 |
| 137 self._commit = [] | 139 self._commit = [] |
| 138 self._apply_patch = [] | 140 self._apply_patch = [] |
| 139 | 141 |
| 140 def prepare(self): | 142 def prepare(self): |
| 141 self._prepare += 1 | 143 self._prepare += 1 |
| 142 | 144 |
| 143 def apply_patch(self, patchset): | 145 def apply_patch(self, *args): |
| 144 self._apply_patch.append(patchset) | 146 self._apply_patch.append(args) |
| 145 | 147 |
| 146 def commit(self, message, author): | 148 def commit(self, *args): |
| 147 self._commit.append((message, author)) | 149 self._commit.append(args) |
| 148 | 150 |
| 149 def get_settings(self, key): | 151 def get_settings(self, key): |
| 150 return None | 152 return None |
| 151 | 153 |
| 152 | 154 |
| 153 class PendingManager(unittest.TestCase): | 155 class TestPendingManager(unittest.TestCase): |
| 154 def setUp(self): | 156 def setUp(self): |
| 155 super(PendingManager, self).setUp() | 157 super(TestPendingManager, self).setUp() |
| 156 self.root_dir = ROOT_DIR | 158 self.root_dir = ROOT_DIR |
| 157 self._old_send_stack = pending_manager.breakpad.SendStack | 159 self._old_send_stack = pending_manager.breakpad.SendStack |
| 158 pending_manager.breakpad.SendStack = _SendStackFail | 160 pending_manager.breakpad.SendStack = _SendStackFail |
| 159 | 161 |
| 160 def tearDown(self): | 162 def tearDown(self): |
| 161 pending_manager.breakpad.SendStack = self._old_send_stack | 163 pending_manager.breakpad.SendStack = self._old_send_stack |
| 162 super(PendingManager, self).tearDown() | 164 super(TestPendingManager, self).tearDown() |
| 163 | 165 |
| 164 def testLoadSave(self): | 166 def testLoadSave(self): |
| 165 pc = pending_manager.PendingManager( | 167 pc = pending_manager.PendingManager( |
| 166 None, None, [fake.FakeVerifier(base.SUCCEEDED)], []) | 168 None, None, [fake.FakeVerifier(base.SUCCEEDED)], [], []) |
| 167 filename = os.path.join(self.root_dir, 'foo.json') | 169 filename = os.path.join(self.root_dir, 'foo.json') |
| 168 empty = """{ | 170 empty = """{ |
| 169 "__persistent_module__": "pending_manager", | 171 "__persistent_module__": "pending_manager", |
| 170 "__persistent_type__": "PendingQueue", | 172 "__persistent_type__": "PendingQueue", |
| 171 "pending_commits": [] | 173 "pending_commits": [] |
| 172 } | 174 } |
| 173 """ | 175 """ |
| 174 write(filename, empty) | 176 write(filename, empty) |
| 175 try: | 177 try: |
| 176 pc.load(filename) | 178 pc.load(filename) |
| 177 self.assertEquals(pc.queue.pending_commits, []) | 179 self.assertEquals(pc.queue.pending_commits, []) |
| 178 pc.save(filename) | 180 pc.save(filename) |
| 179 self.assertEquals(trim(empty), trim(read(filename))) | 181 self.assertEquals(trim(empty), trim(read(filename))) |
| 180 finally: | 182 finally: |
| 181 os.remove(filename) | 183 os.remove(filename) |
| 182 if os.path.exists(filename + '.old'): | 184 if os.path.exists(filename + '.old'): |
| 183 os.remove(filename + '.old') | 185 os.remove(filename + '.old') |
| 184 | 186 |
| 185 def _get_pc(self, verifiers_no_patch, verifiers): | 187 def _get_pc(self, verifiers_no_patch, verifiers): |
| 186 pc = pending_manager.PendingManager( | 188 pc = pending_manager.PendingManager( |
| 187 FakeRietveld(), FakeCheckout(), verifiers_no_patch, verifiers) | 189 FakeRietveld(), FakeCheckout(), verifiers_no_patch, verifiers, []) |
| 188 | 190 |
| 189 def apply_patch(pending, revision): | 191 def apply_patch(pending, revision): |
| 190 pc._patch_applied = True | 192 pc._patch_applied = True |
| 191 | 193 |
| 192 pc._apply_patch = apply_patch | 194 pc._apply_patch = apply_patch |
| 193 pc._patch_applied = False | 195 pc._patch_applied = False |
| 194 return pc | 196 return pc |
| 195 | 197 |
| 196 def testNoVerification(self): | 198 def testNoVerification(self): |
| 197 try: | 199 try: |
| 198 pending_manager.PendingManager( | 200 pending_manager.PendingManager( |
| 199 FakeRietveld(), FakeCheckout(), [], []) | 201 FakeRietveld(), FakeCheckout(), [], [], []) |
| 200 self.fail() | 202 self.fail() |
| 201 except AssertionError: | 203 except AssertionError: |
| 202 pass | 204 pass |
| 203 try: | 205 try: |
| 204 pending_manager.PendingManager( | 206 pending_manager.PendingManager( |
| 205 FakeRietveld(), | 207 FakeRietveld(), |
| 206 FakeCheckout(), | 208 FakeCheckout(), |
| 207 [fake.FakeVerifier(base.SUCCEEDED)], | 209 [fake.FakeVerifier(base.SUCCEEDED)], |
| 208 [fake.FakeVerifier(base.SUCCEEDED)]) | 210 [fake.FakeVerifier(base.SUCCEEDED)], |
| 211 []) |
| 209 self.fail() | 212 self.fail() |
| 210 except AssertionError: | 213 except AssertionError: |
| 211 pass | 214 pass |
| 212 | 215 |
| 213 def _check_1(self, pc, result): | 216 def _check_1(self, pc, result): |
| 214 self.assertEquals(len(pc.queue.pending_commits), 0) | 217 self.assertEquals(len(pc.queue.pending_commits), 0) |
| 215 pc.look_for_new_pending_commit() | 218 pc.look_for_new_pending_commit() |
| 216 self.assertEquals(len(pc.queue.pending_commits), 1) | 219 self.assertEquals(len(pc.queue.pending_commits), 1) |
| 217 commit = pc.queue.pending_commits[0] | 220 commit = pc.queue.pending_commits[0] |
| 218 self.assertEquals(len(commit.verifications), 0) | 221 self.assertEquals(len(commit.verifications), 0) |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 | 406 |
| 404 def testDefer4Verification3rdFail(self): | 407 def testDefer4Verification3rdFail(self): |
| 405 self._check_defer_4( | 408 self._check_defer_4( |
| 406 base.SUCCEEDED, base.SUCCEEDED, base.FAILED, base.SUCCEEDED) | 409 base.SUCCEEDED, base.SUCCEEDED, base.FAILED, base.SUCCEEDED) |
| 407 | 410 |
| 408 def testRelPath(self): | 411 def testRelPath(self): |
| 409 verifiers = [ | 412 verifiers = [ |
| 410 project_base.ProjectBaseUrlVerifier( | 413 project_base.ProjectBaseUrlVerifier( |
| 411 [r'^%s(.*)$' % re.escape(r'http://example.com/')]), | 414 [r'^%s(.*)$' % re.escape(r'http://example.com/')]), |
| 412 ] | 415 ] |
| 416 r = FakeRietveld() |
| 417 processors = [object()] |
| 413 pc = pending_manager.PendingManager( | 418 pc = pending_manager.PendingManager( |
| 414 FakeRietveld(), FakeCheckout(), verifiers, []) | 419 r, FakeCheckout(), verifiers, [], processors) |
| 415 pc.rietveld.issues[31337]['base_url'] = 'http://example.com/sub/dir' | 420 pc.rietveld.issues[31337]['base_url'] = 'http://example.com/sub/dir' |
| 416 pc.look_for_new_pending_commit() | 421 pc.look_for_new_pending_commit() |
| 417 self.assertEquals(1, len(pc.queue.pending_commits)) | 422 self.assertEquals(1, len(pc.queue.pending_commits)) |
| 418 pc.process_new_pending_commit() | 423 pc.process_new_pending_commit() |
| 419 self.assertEquals('sub/dir', pc.queue.pending_commits[0].relpath) | 424 self.assertEquals('sub/dir', pc.queue.pending_commits[0].relpath) |
| 420 self.assertEquals(1, pc.checkout._prepare) | 425 self.assertEquals(1, pc.checkout._prepare) |
| 421 self.assertEquals(1, len(pc.checkout._apply_patch)) | 426 self.assertEquals([(r.patchsets[0], processors)], pc.checkout._apply_patch) |
| 422 self.assertEquals([], pc.checkout._commit) | 427 self.assertEquals([], pc.checkout._commit) |
| 423 pc.update_status() | 428 pc.update_status() |
| 424 self.assertEquals(1, pc.checkout._prepare) | 429 self.assertEquals(1, pc.checkout._prepare) |
| 425 self.assertEquals(1, len(pc.checkout._apply_patch)) | 430 self.assertEquals([(r.patchsets[0], processors)], pc.checkout._apply_patch) |
| 426 self.assertEquals([], pc.checkout._commit) | 431 self.assertEquals([], pc.checkout._commit) |
| 427 patches = pc.checkout._apply_patch[0] | 432 patches = pc.checkout._apply_patch[0] |
| 428 self.assertEquals( | 433 self.assertEquals( |
| 429 ['sub/dir/chrome/file.cc', 'sub/dir/other/place/foo', 'sub/dir/foo'], | 434 ['sub/dir/chrome/file.cc', 'sub/dir/other/place/foo', 'sub/dir/foo'], |
| 430 patches.filenames) | 435 patches[0].filenames) |
| 431 pc.scan_results() | 436 pc.scan_results() |
| 432 self.assertEquals(2, pc.checkout._prepare) | 437 self.assertEquals(2, pc.checkout._prepare) |
| 433 self.assertEquals(2, len(pc.checkout._apply_patch)) | 438 self.assertEquals( |
| 439 [(r.patchsets[0], processors), (r.patchsets[1], processors)], |
| 440 pc.checkout._apply_patch) |
| 434 self.assertEquals( | 441 self.assertEquals( |
| 435 [('foo\n\nReview URL: http://nowhere/31337', 'author@example.com')], | 442 [('foo\n\nReview URL: http://nowhere/31337', 'author@example.com')], |
| 436 pc.checkout._commit) | 443 pc.checkout._commit) |
| 437 | 444 |
| 438 | 445 |
| 439 if __name__ == '__main__': | 446 if __name__ == '__main__': |
| 440 logging.basicConfig(level=logging.ERROR) | 447 logging.basicConfig(level=logging.ERROR) |
| 441 unittest.main() | 448 unittest.main() |
| OLD | NEW |