1dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# Copyright (C) 2009 Google Inc. All rights reserved. 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# 3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# Redistribution and use in source and binary forms, with or without 4dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# modification, are permitted provided that the following conditions are 5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# met: 6dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# 7dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# * Redistributions of source code must retain the above copyright 8dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# notice, this list of conditions and the following disclaimer. 9dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# * Redistributions in binary form must reproduce the above 10dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# copyright notice, this list of conditions and the following disclaimer 11dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# in the documentation and/or other materials provided with the 12dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# distribution. 13dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# * Neither the name of Google Inc. nor the names of its 14dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# contributors may be used to endorse or promote products derived from 15dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# this software without specific prior written permission. 16dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# 17dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockimport os 30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockimport threading 31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 32dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.common.config.committers import CommitterList, Reviewer 33dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.common.checkout.commitinfo import CommitInfo 34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.common.checkout.scm import CommitMessage 35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.common.net.bugzilla import Bug, Attachment 36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.common.system.deprecated_logging import log 37f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochfrom webkitpy.common.system.filesystem_mock import MockFileSystem 38f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochfrom webkitpy.thirdparty.mock import Mock 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockdef _id_to_object_dictionary(*objects): 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block dictionary = {} 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for thing in objects: 44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block dictionary[thing["id"]] = thing 45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return dictionary 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# Testing 48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# FIXME: The ids should be 1, 2, 3 instead of crazy numbers. 50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_patch1 = { 53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "id": 197, 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "bug_id": 42, 55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "url": "http://example.com/197", 56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "name": "Patch1", 57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_obsolete": False, 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_patch": True, 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "review": "+", 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "reviewer_email": "foo@bar.com", 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "commit-queue": "+", 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "committer_email": "foo@bar.com", 63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "attacher_email": "Contributer1", 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_patch2 = { 68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "id": 128, 69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "bug_id": 42, 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "url": "http://example.com/128", 71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "name": "Patch2", 72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_obsolete": False, 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_patch": True, 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "review": "+", 75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "reviewer_email": "foo@bar.com", 76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "commit-queue": "+", 77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "committer_email": "non-committer@example.com", 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "attacher_email": "eric@webkit.org", 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_patch3 = { 83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "id": 103, 84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "bug_id": 75, 85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "url": "http://example.com/103", 86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "name": "Patch3", 87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_obsolete": False, 88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_patch": True, 89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "review": "?", 90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "attacher_email": "eric@webkit.org", 91dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 92dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 94dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_patch4 = { 95dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "id": 104, 96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "bug_id": 77, 97dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "url": "http://example.com/103", 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "name": "Patch3", 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_obsolete": False, 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_patch": True, 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "review": "+", 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "commit-queue": "?", 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "reviewer_email": "foo@bar.com", 104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "attacher_email": "Contributer2", 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_patch5 = { 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "id": 105, 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "bug_id": 77, 111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "url": "http://example.com/103", 112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "name": "Patch5", 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_obsolete": False, 114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_patch": True, 115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "review": "+", 116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "reviewer_email": "foo@bar.com", 117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "attacher_email": "eric@webkit.org", 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_patch6 = { # Valid committer, but no reviewer. 122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "id": 106, 123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "bug_id": 77, 124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "url": "http://example.com/103", 125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "name": "ROLLOUT of r3489", 126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_obsolete": False, 127dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_patch": True, 128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "commit-queue": "+", 129dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "committer_email": "foo@bar.com", 130dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "attacher_email": "eric@webkit.org", 131dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 132dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 133dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_patch7 = { # Valid review, patch is marked obsolete. 135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "id": 107, 136dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "bug_id": 76, 137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "url": "http://example.com/103", 138dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "name": "Patch7", 139dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_obsolete": True, 140dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_patch": True, 141dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "review": "+", 142dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "reviewer_email": "foo@bar.com", 143dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "attacher_email": "eric@webkit.org", 144dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 146dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 147dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# This matches one of Bug.unassigned_emails 148dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_unassigned_email = "webkit-unassigned@lists.webkit.org" 149f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch# This is needed for the FlakyTestReporter to believe the bug 150f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch# was filed by one of the webkitpy bots. 151f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch_commit_queue_email = "commit-queue@webkit.org" 152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 154dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# FIXME: The ids should be 1, 2, 3 instead of crazy numbers. 155dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 156dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_bug1 = { 158dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "id": 42, 159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "title": "Bug with two r+'d and cq+'d patches, one of which has an " 160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "invalid commit-queue setter.", 161f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch "reporter_email": "foo@foo.com", 162dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "assigned_to_email": _unassigned_email, 163dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "attachments": [_patch1, _patch2], 16468513a70bcd92384395513322f1b801e7bf9c729Steve Block "bug_status": "UNCONFIRMED", 165dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 166dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 167dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 168dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_bug2 = { 169dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "id": 75, 170dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "title": "Bug with a patch needing review.", 171f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch "reporter_email": "foo@foo.com", 172dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "assigned_to_email": "foo@foo.com", 173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "attachments": [_patch3], 17468513a70bcd92384395513322f1b801e7bf9c729Steve Block "bug_status": "ASSIGNED", 175dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 178dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_bug3 = { 179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "id": 76, 180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "title": "The third bug", 181f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch "reporter_email": "foo@foo.com", 182dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "assigned_to_email": _unassigned_email, 183dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "attachments": [_patch7], 18468513a70bcd92384395513322f1b801e7bf9c729Steve Block "bug_status": "NEW", 185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_bug4 = { 189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "id": 77, 190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "title": "The fourth bug", 191f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch "reporter_email": "foo@foo.com", 192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "assigned_to_email": "foo@foo.com", 193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "attachments": [_patch4, _patch5, _patch6], 19468513a70bcd92384395513322f1b801e7bf9c729Steve Block "bug_status": "REOPENED", 195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 196dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 198f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch_bug5 = { 199f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch "id": 78, 200f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch "title": "The fifth bug", 201f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch "reporter_email": _commit_queue_email, 202f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch "assigned_to_email": "foo@foo.com", 203f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch "attachments": [], 204f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch "bug_status": "RESOLVED", 205f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch "dup_id": 76, 206f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 207f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 208f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 209e14391e94c850b8bd03680c23b38978db68687a8John Reck# FIXME: This should not inherit from Mock 210dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass MockBugzillaQueries(Mock): 211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def __init__(self, bugzilla): 213dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Mock.__init__(self) 214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._bugzilla = bugzilla 215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def _all_bugs(self): 217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return map(lambda bug_dictionary: Bug(bug_dictionary, self._bugzilla), 218dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._bugzilla.bug_cache.values()) 219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def fetch_bug_ids_from_commit_queue(self): 221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bugs_with_commit_queued_patches = filter( 222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block lambda bug: bug.commit_queued_patches(), 223dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._all_bugs()) 224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return map(lambda bug: bug.id(), bugs_with_commit_queued_patches) 225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def fetch_attachment_ids_from_review_queue(self): 227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block unreviewed_patches = sum([bug.unreviewed_patches() 228dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for bug in self._all_bugs()], []) 229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return map(lambda patch: patch.id(), unreviewed_patches) 230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def fetch_patches_from_commit_queue(self): 232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sum([bug.commit_queued_patches() 233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for bug in self._all_bugs()], []) 234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def fetch_bug_ids_from_pending_commit_list(self): 236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bugs_with_reviewed_patches = filter(lambda bug: bug.reviewed_patches(), 237dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._all_bugs()) 238dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bug_ids = map(lambda bug: bug.id(), bugs_with_reviewed_patches) 239dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block # NOTE: This manual hack here is to allow testing logging in 240dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block # test_assign_to_committer the real pending-commit query on bugzilla 241dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block # will return bugs with patches which have r+, but are also obsolete. 242dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return bug_ids + [76] 243dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def fetch_patches_from_pending_commit_list(self): 245dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return sum([bug.reviewed_patches() for bug in self._all_bugs()], []) 246dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 247f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch def fetch_bugs_matching_search(self, search_string, author_email=None): 248f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [self._bugzilla.fetch_bug(78), self._bugzilla.fetch_bug(77)] 249e14391e94c850b8bd03680c23b38978db68687a8John Reck 250e14391e94c850b8bd03680c23b38978db68687a8John Reck_mock_reviewer = Reviewer("Foo Bar", "foo@bar.com") 251e14391e94c850b8bd03680c23b38978db68687a8John Reck 252dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 253dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# FIXME: Bugzilla is the wrong Mock-point. Once we have a BugzillaNetwork 254dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# class we should mock that instead. 255dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# Most of this class is just copy/paste from Bugzilla. 256e14391e94c850b8bd03680c23b38978db68687a8John Reck# FIXME: This should not inherit from Mock 257dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass MockBugzilla(Mock): 258dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 259dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bug_server_url = "http://example.com" 260dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 261f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bug_cache = _id_to_object_dictionary(_bug1, _bug2, _bug3, _bug4, _bug5) 262dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 263dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block attachment_cache = _id_to_object_dictionary(_patch1, 264dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _patch2, 265dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _patch3, 266dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _patch4, 267dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _patch5, 268dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _patch6, 269dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _patch7) 270dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 271dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def __init__(self): 272dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Mock.__init__(self) 273dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self.queries = MockBugzillaQueries(self) 274e14391e94c850b8bd03680c23b38978db68687a8John Reck self.committers = CommitterList(reviewers=[_mock_reviewer]) 27568513a70bcd92384395513322f1b801e7bf9c729Steve Block self._override_patch = None 276dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 277dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def create_bug(self, 278dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bug_title, 279dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bug_description, 280dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block component=None, 28121939df44de1705786c545cd1bf519d47250322dBen Murdoch diff=None, 282dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block patch_description=None, 283dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block cc=None, 284dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block blocked=None, 285dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block mark_for_review=False, 286dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block mark_for_commit_queue=False): 287dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block log("MOCK create_bug") 288dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block log("bug_title: %s" % bug_title) 289dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block log("bug_description: %s" % bug_description) 290f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if component: 291f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch log("component: %s" % component) 292f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if cc: 293f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch log("cc: %s" % cc) 294f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if blocked: 295f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch log("blocked: %s" % blocked) 296f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return 78 297dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 298dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def quips(self): 299dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ["Good artists copy. Great artists steal. - Pablo Picasso"] 300dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 301dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def fetch_bug(self, bug_id): 302dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return Bug(self.bug_cache.get(bug_id), self) 303dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 30468513a70bcd92384395513322f1b801e7bf9c729Steve Block def set_override_patch(self, patch): 30568513a70bcd92384395513322f1b801e7bf9c729Steve Block self._override_patch = patch 30668513a70bcd92384395513322f1b801e7bf9c729Steve Block 307dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def fetch_attachment(self, attachment_id): 30868513a70bcd92384395513322f1b801e7bf9c729Steve Block if self._override_patch: 30968513a70bcd92384395513322f1b801e7bf9c729Steve Block return self._override_patch 31068513a70bcd92384395513322f1b801e7bf9c729Steve Block 311e14391e94c850b8bd03680c23b38978db68687a8John Reck attachment_dictionary = self.attachment_cache.get(attachment_id) 312e14391e94c850b8bd03680c23b38978db68687a8John Reck if not attachment_dictionary: 313e14391e94c850b8bd03680c23b38978db68687a8John Reck print "MOCK: fetch_attachment: %s is not a known attachment id" % attachment_id 314e14391e94c850b8bd03680c23b38978db68687a8John Reck return None 315dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bug = self.fetch_bug(attachment_dictionary["bug_id"]) 316dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for attachment in bug.attachments(include_obsolete=True): 317dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if attachment.id() == int(attachment_id): 318dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return attachment 319dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 320dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def bug_url_for_bug_id(self, bug_id): 321dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return "%s/%s" % (self.bug_server_url, bug_id) 322dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 323dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def fetch_bug_dictionary(self, bug_id): 324dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return self.bug_cache.get(bug_id) 325dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 326dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def attachment_url_for_id(self, attachment_id, action="view"): 327dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block action_param = "" 328dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if action and action != "view": 329dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block action_param = "&action=%s" % action 330dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return "%s/%s%s" % (self.bug_server_url, attachment_id, action_param) 331dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 332545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch def set_flag_on_attachment(self, 333545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch attachment_id, 334545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch flag_name, 335545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch flag_value, 336545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch comment_text=None, 337545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch additional_comment_text=None): 338545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch log("MOCK setting flag '%s' to '%s' on attachment '%s' with comment '%s' and additional comment '%s'" % ( 339545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch flag_name, flag_value, attachment_id, comment_text, additional_comment_text)) 340545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 341dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def post_comment_to_bug(self, bug_id, comment_text, cc=None): 342a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch log("MOCK bug comment: bug_id=%s, cc=%s\n--- Begin comment ---\n%s\n--- End comment ---\n" % ( 343dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bug_id, cc, comment_text)) 344dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 345f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch def add_attachment_to_bug(self, 346f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bug_id, 347f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch file_or_string, 348f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch description, 349f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch filename=None, 350f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch comment_text=None): 351f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch log("MOCK add_attachment_to_bug: bug_id=%s, description=%s filename=%s" % (bug_id, description, filename)) 352f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if comment_text: 353f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch log("-- Begin comment --") 354f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch log(comment_text) 355f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch log("-- End comment --") 356f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 357dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def add_patch_to_bug(self, 358dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bug_id, 35921939df44de1705786c545cd1bf519d47250322dBen Murdoch diff, 360dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block description, 361dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block comment_text=None, 362dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block mark_for_review=False, 363dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block mark_for_commit_queue=False, 364dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block mark_for_landing=False): 365dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block log("MOCK add_patch_to_bug: bug_id=%s, description=%s, mark_for_review=%s, mark_for_commit_queue=%s, mark_for_landing=%s" % 366dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block (bug_id, description, mark_for_review, mark_for_commit_queue, mark_for_landing)) 367f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if comment_text: 368f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch log("-- Begin comment --") 369f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch log(comment_text) 370f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch log("-- End comment --") 371dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 372dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 373dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass MockBuilder(object): 374dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def __init__(self, name): 375dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._name = name 376dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 3776c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen def name(self): 3786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen return self._name 3796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 380967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch def results_url(self): 381967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return "http://example.com/builders/%s/results/" % self.name() 382967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 383dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def force_build(self, username, comments): 384dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block log("MOCK: force_build: name=%s, username=%s, comments=%s" % ( 385dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._name, username, comments)) 386dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 387dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 388a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochclass MockFailureMap(object): 389bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen def __init__(self, buildbot): 390bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen self._buildbot = buildbot 391bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 392a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def is_empty(self): 393a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return False 394a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 395a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def filter_out_old_failures(self, is_old_revision): 396a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch pass 397a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 398a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def failing_revisions(self): 399a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return [29837] 400a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 401a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def builders_failing_for(self, revision): 402a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return [self._buildbot.builder_with_name("Builder1")] 403a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 404a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def tests_failing_for(self, revision): 405a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return ["mock-test-1"] 406bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 407bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 408dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass MockBuildBot(object): 409e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block buildbot_host = "dummy_buildbot_host" 410dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def __init__(self): 411dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._mock_builder1_status = { 412dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "name": "Builder1", 413dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_green": True, 414dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "activity": "building", 415dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 416dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._mock_builder2_status = { 417dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "name": "Builder2", 418dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "is_green": True, 419dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "activity": "idle", 420dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 421dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 422dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def builder_with_name(self, name): 423dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return MockBuilder(name) 424dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 425dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def builder_statuses(self): 426dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return [ 427dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._mock_builder1_status, 428dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._mock_builder2_status, 429dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ] 430dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 431dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def red_core_builders_names(self): 432dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if not self._mock_builder2_status["is_green"]: 433dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return [self._mock_builder2_status["name"]] 434dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return [] 435dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 436dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def red_core_builders(self): 437dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if not self._mock_builder2_status["is_green"]: 438dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return [self._mock_builder2_status] 439dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return [] 440dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 441dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def idle_red_core_builders(self): 442dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if not self._mock_builder2_status["is_green"]: 443dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return [self._mock_builder2_status] 444dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return [] 445dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 446dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def last_green_revision(self): 447dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 9479 448dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 449dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def light_tree_on_fire(self): 450dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._mock_builder2_status["is_green"] = False 451dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 452bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen def failure_map(self): 453bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return MockFailureMap(self) 454dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 455dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 456e14391e94c850b8bd03680c23b38978db68687a8John Reck# FIXME: This should not inherit from Mock 457dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass MockSCM(Mock): 458dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 459dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block fake_checkout_root = os.path.realpath("/tmp") # realpath is needed to allow for Mac OS X's /private/tmp 460dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch def __init__(self, filesystem=None): 462dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Mock.__init__(self) 463dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block # FIXME: We should probably use real checkout-root detection logic here. 464dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block # os.getcwd() can't work here because other parts of the code assume that "checkout_root" 465dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block # will actually be the root. Since getcwd() is wrong, use a globally fake root for now. 466dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self.checkout_root = self.fake_checkout_root 4672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.added_paths = set() 4682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch self._filesystem = filesystem 4692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 4702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def add(self, destination_path, return_exit_code=False): 4712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.added_paths.add(destination_path) 4722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if return_exit_code: 4732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return 0 474dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 47528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu def changed_files(self, git_commit=None): 47628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return ["MockFile1"] 47728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 478a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def create_patch(self, git_commit, changed_files=None): 479dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return "Patch1" 480dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 481dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def commit_ids_from_commitish_arguments(self, args): 482dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ["Commitish1", "Commitish2"] 483dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 484dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def commit_message_for_local_commit(self, commit_id): 485dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if commit_id == "Commitish1": 486dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return CommitMessage("CommitMessage1\n" \ 487dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "https://bugs.example.org/show_bug.cgi?id=42\n") 488dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if commit_id == "Commitish2": 489dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return CommitMessage("CommitMessage2\n" \ 490dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "https://bugs.example.org/show_bug.cgi?id=75\n") 491dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block raise Exception("Bogus commit_id in commit_message_for_local_commit.") 492dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def diff_for_file(self, path, log=None): 4942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return path + '-diff' 4952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 496dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def diff_for_revision(self, revision): 497dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return "DiffForRevision%s\n" \ 498dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "http://bugs.webkit.org/show_bug.cgi?id=12345" % revision 499dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def show_head(self, path): 5012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return path 5022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 503dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def svn_revision_from_commit_text(self, commit_text): 504dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return "49824" 505dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch def delete(self, path): 5072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if not self._filesystem: 5082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return 5092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if self._filesystem.exists(path): 5102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch self._filesystem.remove(path) 5112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5132fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass MockDEPS(object): 5142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def read_variable(self, name): 5152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return 6564 5162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def write_variable(self, name, value): 5182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block log("MOCK: MockDEPS.write_variable(%s, %s)" % (name, value)) 519f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 520dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 521dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass MockCheckout(object): 522dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 523dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _committer_list = CommitterList() 524dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 525dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def commit_info_for_revision(self, svn_revision): 526a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch # The real Checkout would probably throw an exception, but this is the only way tests have to get None back at the moment. 527a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if not svn_revision: 528a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return None 529dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return CommitInfo(svn_revision, "eric@webkit.org", { 530dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "bug_id": 42, 531dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "author_name": "Adam Barth", 532dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "author_email": "abarth@webkit.org", 533dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "author": self._committer_list.committer_by_email("abarth@webkit.org"), 534dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "reviewer_text": "Darin Adler", 535dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block "reviewer": self._committer_list.committer_by_name("Darin Adler"), 536dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block }) 537dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 538dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def bug_id_for_revision(self, svn_revision): 539dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 12345 540dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 541a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def recent_commit_infos_for_files(self, paths): 542a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return [self.commit_info_for_revision(32)] 543a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 544a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def modified_changelogs(self, git_commit, changed_files=None): 545dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block # Ideally we'd return something more interesting here. The problem is 546dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block # that LandDiff will try to actually read the patch from disk! 547dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return [] 548dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 549e14391e94c850b8bd03680c23b38978db68687a8John Reck def commit_message_for_this_commit(self, git_commit, changed_files=None): 550dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block commit_message = Mock() 551dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block commit_message.message = lambda:"This is a fake commit message that is at least 50 characters." 552dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return commit_message 553dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def chromium_deps(self): 5552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return MockDEPS() 5562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 557dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def apply_patch(self, patch, force=False): 558dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block pass 559dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 560f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch def apply_reverse_diffs(self, revision): 561dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block pass 562dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 563e14391e94c850b8bd03680c23b38978db68687a8John Reck def suggested_reviewers(self, git_commit, changed_files=None): 564e14391e94c850b8bd03680c23b38978db68687a8John Reck return [_mock_reviewer] 565e14391e94c850b8bd03680c23b38978db68687a8John Reck 566dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 567dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass MockUser(object): 568dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 569cad810f21b803229eb11403f9209855525a25d57Steve Block @classmethod 570cad810f21b803229eb11403f9209855525a25d57Steve Block def prompt(cls, message, repeat=1, raw_input=raw_input): 571dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return "Mock user response" 572dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 573cad810f21b803229eb11403f9209855525a25d57Steve Block @classmethod 574cad810f21b803229eb11403f9209855525a25d57Steve Block def prompt_with_list(cls, list_title, list_items, can_choose_multiple=False, raw_input=raw_input): 575cad810f21b803229eb11403f9209855525a25d57Steve Block pass 576cad810f21b803229eb11403f9209855525a25d57Steve Block 5772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block def __init__(self): 5782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.opened_urls = [] 5792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 580dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def edit(self, files): 581dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block pass 582dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5835af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke def edit_changelog(self, files): 5845af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke pass 5855af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 586dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def page(self, message): 587dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block pass 588dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 589bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen def confirm(self, message=None, default='y'): 5902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block log(message) 591bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return default == 'y' 592dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 593545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch def can_open_url(self): 594545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return True 595545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 596dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def open_url(self, url): 5972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.opened_urls.append(url) 598dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if url.startswith("file://"): 599dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block log("MOCK: user.open_url: file://...") 600dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 601dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block log("MOCK: user.open_url: %s" % url) 602dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 603dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 604dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass MockIRC(object): 605dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 606dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def post(self, message): 607dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block log("MOCK: irc.post: %s" % message) 608dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 609dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def disconnect(self): 610dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block log("MOCK: irc.disconnect") 611dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 612dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 613dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass MockStatusServer(object): 614dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 615a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def __init__(self, bot_id=None, work_items=None): 616dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self.host = "example.com" 617a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch self.bot_id = bot_id 61868513a70bcd92384395513322f1b801e7bf9c729Steve Block self._work_items = work_items or [] 619dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 620dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def patch_status(self, queue_name, patch_id): 621dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return None 622dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 623dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def svn_revision(self, svn_revision): 624dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return None 625dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 62668513a70bcd92384395513322f1b801e7bf9c729Steve Block def next_work_item(self, queue_name): 62768513a70bcd92384395513322f1b801e7bf9c729Steve Block if not self._work_items: 62868513a70bcd92384395513322f1b801e7bf9c729Steve Block return None 629e14391e94c850b8bd03680c23b38978db68687a8John Reck return self._work_items.pop(0) 63068513a70bcd92384395513322f1b801e7bf9c729Steve Block 631a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def release_work_item(self, queue_name, patch): 632a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch log("MOCK: release_work_item: %s %s" % (queue_name, patch.id())) 633a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 634e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block def update_work_items(self, queue_name, work_items): 63568513a70bcd92384395513322f1b801e7bf9c729Steve Block self._work_items = work_items 636e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block log("MOCK: update_work_items: %s %s" % (queue_name, work_items)) 637e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 638a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def submit_to_ews(self, patch_id): 639a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch log("MOCK: submit_to_ews: %s" % (patch_id)) 640a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 641dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def update_status(self, queue_name, status, patch=None, results_file=None): 6426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen log("MOCK: update_status: %s %s" % (queue_name, status)) 643dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 187 644dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 645dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def update_svn_revision(self, svn_revision, broken_bot): 646dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 191 647dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 648545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch def results_url_for_status(self, status_id): 649545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return "http://dummy_url" 650dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 651e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 652e14391e94c850b8bd03680c23b38978db68687a8John Reck# FIXME: This should not inherit from Mock 6536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner# FIXME: Unify with common.system.executive_mock.MockExecutive. 654e14391e94c850b8bd03680c23b38978db68687a8John Reckclass MockExecutive(Mock): 6556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen def __init__(self, should_log): 65665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch self.should_log = should_log 6576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 658dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def run_and_throw_if_fail(self, args, quiet=False): 65965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if self.should_log: 6606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen log("MOCK run_and_throw_if_fail: %s" % args) 661dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return "MOCK output of child process" 662dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 663dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def run_command(self, 664dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block args, 665dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block cwd=None, 666dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block input=None, 667dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block error_handler=None, 668dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return_exit_code=False, 66921939df44de1705786c545cd1bf519d47250322dBen Murdoch return_stderr=True, 67021939df44de1705786c545cd1bf519d47250322dBen Murdoch decode_output=False): 67165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if self.should_log: 6726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen log("MOCK run_command: %s" % args) 673dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return "MOCK output of child process" 674dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 675dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 676a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochclass MockOptions(object): 677a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch """Mock implementation of optparse.Values.""" 678a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 679a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def __init__(self, **kwargs): 680a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch # The caller can set option values using keyword arguments. We don't 681a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch # set any values by default because we don't know how this 682a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch # object will be used. Generally speaking unit tests should 683a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch # subclass this or provider wrapper functions that set a common 684a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch # set of options. 685a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch for key, value in kwargs.items(): 686a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch self.__dict__[key] = value 687e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 688e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 689f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass MockPort(Mock): 690f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch def name(self): 691f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return "MockPort" 692f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 693f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch def layout_tests_results_path(self): 694f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return "/mock/results.html" 695f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 6962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch def check_webkit_style_command(self): 6972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return ["mock-check-webkit-style"] 6982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 6992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch def update_webkit_command(self): 7002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return ["mock-update-webkit"] 7012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 7022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 703e14391e94c850b8bd03680c23b38978db68687a8John Reckclass MockTestPort1(object): 7045abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 7055abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick def skips_layout_test(self, test_name): 7065abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return test_name in ["media/foo/bar.html", "foo"] 7075abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 7085abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 709e14391e94c850b8bd03680c23b38978db68687a8John Reckclass MockTestPort2(object): 7105abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 7115abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick def skips_layout_test(self, test_name): 7125abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return test_name == "media/foo/bar.html" 7135abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 7145abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 715e14391e94c850b8bd03680c23b38978db68687a8John Reckclass MockPortFactory(object): 7165abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 7175abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick def get_all(self, options=None): 7185abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return {"test_port1": MockTestPort1(), "test_port2": MockTestPort2()} 7195abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 7205abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 721f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass MockPlatformInfo(object): 722f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch def display_name(self): 723f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return "MockPlatform 1.0" 724f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 725f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 72665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass MockWorkspace(object): 72765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch def find_unused_filename(self, directory, name, extension, search_limit=10): 72865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return "%s/%s.%s" % (directory, name, extension) 72965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 73065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch def create_zip(self, zip_path, source_path): 73165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pass 73265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 73365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 734e14391e94c850b8bd03680c23b38978db68687a8John Reckclass MockTool(object): 735dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 736dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def __init__(self, log_executive=False): 737dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self.wakeup_event = threading.Event() 738dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self.bugs = MockBugzilla() 739dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self.buildbot = MockBuildBot() 740e14391e94c850b8bd03680c23b38978db68687a8John Reck self.executive = MockExecutive(should_log=log_executive) 741f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch self.filesystem = MockFileSystem() 74265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch self.workspace = MockWorkspace() 743dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._irc = None 744dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self.user = MockUser() 745dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._scm = MockSCM() 746dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._checkout = MockCheckout() 747dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self.status_server = MockStatusServer() 748dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self.irc_password = "MOCK irc password" 7495abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick self.port_factory = MockPortFactory() 750f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch self.platform = MockPlatformInfo() 751dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 752dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def scm(self): 753dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return self._scm 754dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 755dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def checkout(self): 756dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return self._checkout 757dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 758dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def ensure_irc_connected(self, delegate): 759dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if not self._irc: 760dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self._irc = MockIRC() 761dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 762dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def irc(self): 763dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return self._irc 764dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 765dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def path(self): 766dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return "echo" 767a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 768a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def port(self): 769f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return MockPort() 770a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 771a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 772a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochclass MockBrowser(object): 773a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch params = {} 774a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 775a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def open(self, url): 776a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch pass 777a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 778a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def select_form(self, name): 779a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch pass 780a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 781a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def __setitem__(self, key, value): 782a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch self.params[key] = value 783a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 784a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch def submit(self): 785a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return Mock(file) 786