OLD | NEW |
(Empty) | |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. |
| 4 |
| 5 import mock |
| 6 |
| 7 from dashboard.common import namespaced_stored_object |
| 8 from dashboard.common import testing_common |
| 9 from dashboard.pinpoint.models.change import change |
| 10 from dashboard.pinpoint.models.change import commit |
| 11 from dashboard.pinpoint.models.change import patch |
| 12 |
| 13 |
| 14 _CATAPULT_URL = ('https://chromium.googlesource.com/' |
| 15 'external/github.com/catapult-project/catapult') |
| 16 _CHROMIUM_URL = 'https://chromium.googlesource.com/chromium/src' |
| 17 |
| 18 |
| 19 class _ChangeTest(testing_common.TestCase): |
| 20 |
| 21 def setUp(self): |
| 22 super(_ChangeTest, self).setUp() |
| 23 |
| 24 self.SetCurrentUser('internal@chromium.org', is_admin=True) |
| 25 |
| 26 namespaced_stored_object.Set('repositories', { |
| 27 'catapult': {'repository_url': _CATAPULT_URL}, |
| 28 'chromium': {'repository_url': _CHROMIUM_URL}, |
| 29 }) |
| 30 |
| 31 |
| 32 class ChangeTest(_ChangeTest): |
| 33 |
| 34 def testChange(self): |
| 35 base_commit = commit.Commit('chromium', 'aaa7336c821888839f759c6c0a36b56c') |
| 36 dep = commit.Commit('catapult', 'e0a2efbb3d1a81aac3c90041eefec24f066d26ba') |
| 37 p = patch.Patch('https://codereview.chromium.org', 2565263002, 20001) |
| 38 |
| 39 # Also test the deps conversion to frozenset. |
| 40 c = change.Change([base_commit, dep], p) |
| 41 |
| 42 self.assertEqual(c, change.Change((base_commit, dep), p)) |
| 43 string = ('chromium@aaa7336 catapult@e0a2efb + ' |
| 44 'https://codereview.chromium.org/2565263002/20001') |
| 45 id_string = ('chromium@aaa7336c821888839f759c6c0a36b56c ' |
| 46 'catapult@e0a2efbb3d1a81aac3c90041eefec24f066d26ba + ' |
| 47 'https://codereview.chromium.org/2565263002/20001') |
| 48 self.assertEqual(str(c), string) |
| 49 self.assertEqual(c.id_string, id_string) |
| 50 self.assertEqual(c.base_commit, base_commit) |
| 51 self.assertEqual(c.deps, (dep,)) |
| 52 self.assertEqual(c.commits, (base_commit, dep)) |
| 53 self.assertEqual(c.patch, p) |
| 54 |
| 55 def testAsDict(self): |
| 56 commits = (commit.Commit('chromium', 'aaa7336c82'), |
| 57 commit.Commit('catapult', 'e0a2efbb3d')) |
| 58 p = patch.Patch('https://codereview.chromium.org', 2565263002, 20001) |
| 59 c = change.Change(commits, p) |
| 60 |
| 61 expected = { |
| 62 'commits': [ |
| 63 { |
| 64 'repository': 'chromium', |
| 65 'git_hash': 'aaa7336c82', |
| 66 'url': _CHROMIUM_URL + '/+/aaa7336c82', |
| 67 }, |
| 68 { |
| 69 'repository': 'catapult', |
| 70 'git_hash': 'e0a2efbb3d', |
| 71 'url': _CATAPULT_URL + '/+/e0a2efbb3d', |
| 72 }, |
| 73 ], |
| 74 'patch': { |
| 75 'server': 'https://codereview.chromium.org', |
| 76 'issue': 2565263002, |
| 77 'patchset': 20001, |
| 78 }, |
| 79 } |
| 80 self.assertEqual(c.AsDict(), expected) |
| 81 |
| 82 @mock.patch('dashboard.services.gitiles_service.CommitInfo') |
| 83 def testFromDictWithJustOneCommit(self, _): |
| 84 c = change.Change.FromDict({ |
| 85 'commits': [{'repository': 'chromium', 'git_hash': 'aaa7336'}], |
| 86 }) |
| 87 |
| 88 expected = change.Change((commit.Commit('chromium', 'aaa7336'),)) |
| 89 self.assertEqual(c, expected) |
| 90 |
| 91 @mock.patch('dashboard.services.gitiles_service.CommitInfo') |
| 92 def testFromDictWithAllFields(self, _): |
| 93 c = change.Change.FromDict({ |
| 94 'commits': ( |
| 95 {'repository': 'chromium', 'git_hash': 'aaa7336'}, |
| 96 {'repository': 'catapult', 'git_hash': 'e0a2efb'}, |
| 97 ), |
| 98 'patch': { |
| 99 'server': 'https://codereview.chromium.org', |
| 100 'issue': 2565263002, |
| 101 'patchset': 20001, |
| 102 }, |
| 103 }) |
| 104 |
| 105 commits = (commit.Commit('chromium', 'aaa7336'), |
| 106 commit.Commit('catapult', 'e0a2efb')) |
| 107 p = patch.Patch('https://codereview.chromium.org', 2565263002, 20001) |
| 108 expected = change.Change(commits, p) |
| 109 self.assertEqual(c, expected) |
| 110 |
| 111 |
| 112 class MidpointTest(_ChangeTest): |
| 113 |
| 114 def setUp(self): |
| 115 super(MidpointTest, self).setUp() |
| 116 |
| 117 patcher = mock.patch('dashboard.services.gitiles_service.CommitRange') |
| 118 self.addCleanup(patcher.stop) |
| 119 commit_range = patcher.start() |
| 120 def _CommitRange(repository_url, first_git_hash, last_git_hash): |
| 121 del repository_url |
| 122 first_git_hash = int(first_git_hash) |
| 123 last_git_hash = int(last_git_hash) |
| 124 return [{'commit': x} for x in xrange(last_git_hash, first_git_hash, -1)] |
| 125 commit_range.side_effect = _CommitRange |
| 126 |
| 127 patcher = mock.patch('dashboard.services.gitiles_service.FileContents') |
| 128 self.addCleanup(patcher.stop) |
| 129 file_contents = patcher.start() |
| 130 def _FileContents(repository_url, git_hash, path): |
| 131 del path |
| 132 if repository_url != _CHROMIUM_URL: |
| 133 return 'deps = {}' |
| 134 if git_hash <= 4: # DEPS roll at chromium@5 |
| 135 return 'deps = {"chromium/catapult": "%s@0"}' % (_CATAPULT_URL + '.git') |
| 136 else: |
| 137 return 'deps = {"chromium/catapult": "%s@9"}' % _CATAPULT_URL |
| 138 file_contents.side_effect = _FileContents |
| 139 |
| 140 def testDifferingPatch(self): |
| 141 change_a = change.Change((commit.Commit('chromium', '0e57e2b'),)) |
| 142 change_b = change.Change( |
| 143 (commit.Commit('chromium', 'babe852'),), |
| 144 patch=patch.Patch('https://codereview.chromium.org', 2565263002, 20001)) |
| 145 with self.assertRaises(commit.NonLinearError): |
| 146 change.Change.Midpoint(change_a, change_b) |
| 147 |
| 148 def testDifferingRepository(self): |
| 149 change_a = change.Change((commit.Commit('chromium', '0e57e2b'),)) |
| 150 change_b = change.Change((commit.Commit('not_chromium', 'babe852'),)) |
| 151 with self.assertRaises(commit.NonLinearError): |
| 152 change.Change.Midpoint(change_a, change_b) |
| 153 |
| 154 def testDifferingCommitCount(self): |
| 155 change_a = change.Change((commit.Commit('chromium', 0),)) |
| 156 change_b = change.Change((commit.Commit('chromium', 9), |
| 157 commit.Commit('not_chromium', 'babe852'))) |
| 158 with self.assertRaises(commit.NonLinearError): |
| 159 change.Change.Midpoint(change_a, change_b) |
| 160 |
| 161 def testSameChange(self): |
| 162 change_a = change.Change((commit.Commit('chromium', 0),)) |
| 163 change_b = change.Change((commit.Commit('chromium', 0),)) |
| 164 with self.assertRaises(commit.NonLinearError): |
| 165 change.Change.Midpoint(change_a, change_b) |
| 166 |
| 167 def testAdjacentWithNoDepsRoll(self): |
| 168 change_a = change.Change((commit.Commit('chromium', 0),)) |
| 169 change_b = change.Change((commit.Commit('chromium', 1),)) |
| 170 with self.assertRaises(commit.NonLinearError): |
| 171 change.Change.Midpoint(change_a, change_b) |
| 172 |
| 173 def testAdjacentWithDepsRoll(self): |
| 174 change_a = change.Change((commit.Commit('chromium', 4),)) |
| 175 change_b = change.Change((commit.Commit('chromium', 5),)) |
| 176 expected = change.Change((commit.Commit('chromium', 4), |
| 177 commit.Commit('catapult', 4))) |
| 178 self.assertEqual(change.Change.Midpoint(change_a, change_b), expected) |
| 179 |
| 180 def testNotAdjacent(self): |
| 181 change_a = change.Change((commit.Commit('chromium', 0),)) |
| 182 change_b = change.Change((commit.Commit('chromium', 9),)) |
| 183 self.assertEqual(change.Change.Midpoint(change_a, change_b), |
| 184 change.Change((commit.Commit('chromium', 4),))) |
| 185 |
| 186 def testDepsRollLeft(self): |
| 187 change_a = change.Change((commit.Commit('chromium', 4),)) |
| 188 change_b = change.Change((commit.Commit('chromium', 4), |
| 189 commit.Commit('catapult', 4))) |
| 190 expected = change.Change((commit.Commit('chromium', 4), |
| 191 commit.Commit('catapult', 2))) |
| 192 self.assertEqual(change.Change.Midpoint(change_a, change_b), expected) |
| 193 |
| 194 def testDepsRollRight(self): |
| 195 change_a = change.Change((commit.Commit('chromium', 4), |
| 196 commit.Commit('catapult', 4))) |
| 197 change_b = change.Change((commit.Commit('chromium', 5),)) |
| 198 expected = change.Change((commit.Commit('chromium', 4), |
| 199 commit.Commit('catapult', 6))) |
| 200 self.assertEqual(change.Change.Midpoint(change_a, change_b), expected) |
| 201 |
| 202 def testAdjacentWithDepsRollAndDepAlreadyOverridden(self): |
| 203 change_a = change.Change((commit.Commit('chromium', 4),)) |
| 204 change_b = change.Change((commit.Commit('chromium', 5), |
| 205 commit.Commit('catapult', 4))) |
| 206 expected = change.Change((commit.Commit('chromium', 4), |
| 207 commit.Commit('catapult', 2))) |
| 208 self.assertEqual(change.Change.Midpoint(change_a, change_b), expected) |
OLD | NEW |