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.last_commit, dep) |
| 52 self.assertEqual(c.deps, (dep,)) |
| 53 self.assertEqual(c.commits, (base_commit, dep)) |
| 54 self.assertEqual(c.patch, p) |
| 55 |
| 56 def testAsDict(self): |
| 57 commits = (commit.Commit('chromium', 'aaa7336c82'), |
| 58 commit.Commit('catapult', 'e0a2efbb3d')) |
| 59 p = patch.Patch('https://codereview.chromium.org', 2565263002, 20001) |
| 60 c = change.Change(commits, p) |
| 61 |
| 62 expected = { |
| 63 'commits': [ |
| 64 { |
| 65 'repository': 'chromium', |
| 66 'git_hash': 'aaa7336c82', |
| 67 'url': _CHROMIUM_URL + '/+/aaa7336c82', |
| 68 }, |
| 69 { |
| 70 'repository': 'catapult', |
| 71 'git_hash': 'e0a2efbb3d', |
| 72 'url': _CATAPULT_URL + '/+/e0a2efbb3d', |
| 73 }, |
| 74 ], |
| 75 'patch': { |
| 76 'server': 'https://codereview.chromium.org', |
| 77 'issue': 2565263002, |
| 78 'patchset': 20001, |
| 79 }, |
| 80 } |
| 81 self.assertEqual(c.AsDict(), expected) |
| 82 |
| 83 @mock.patch('dashboard.services.gitiles_service.CommitInfo') |
| 84 def testFromDictWithJustOneCommit(self, _): |
| 85 c = change.Change.FromDict({ |
| 86 'commits': [{'repository': 'chromium', 'git_hash': 'aaa7336'}], |
| 87 }) |
| 88 |
| 89 expected = change.Change((commit.Commit('chromium', 'aaa7336'),)) |
| 90 self.assertEqual(c, expected) |
| 91 |
| 92 @mock.patch('dashboard.services.gitiles_service.CommitInfo') |
| 93 def testFromDictWithAllFields(self, _): |
| 94 c = change.Change.FromDict({ |
| 95 'commits': ( |
| 96 {'repository': 'chromium', 'git_hash': 'aaa7336'}, |
| 97 {'repository': 'catapult', 'git_hash': 'e0a2efb'}, |
| 98 ), |
| 99 'patch': { |
| 100 'server': 'https://codereview.chromium.org', |
| 101 'issue': 2565263002, |
| 102 'patchset': 20001, |
| 103 }, |
| 104 }) |
| 105 |
| 106 commits = (commit.Commit('chromium', 'aaa7336'), |
| 107 commit.Commit('catapult', 'e0a2efb')) |
| 108 p = patch.Patch('https://codereview.chromium.org', 2565263002, 20001) |
| 109 expected = change.Change(commits, p) |
| 110 self.assertEqual(c, expected) |
| 111 |
| 112 |
| 113 class MidpointTest(_ChangeTest): |
| 114 |
| 115 def setUp(self): |
| 116 super(MidpointTest, self).setUp() |
| 117 |
| 118 patcher = mock.patch('dashboard.services.gitiles_service.CommitRange') |
| 119 self.addCleanup(patcher.stop) |
| 120 commit_range = patcher.start() |
| 121 def _CommitRange(repository_url, first_git_hash, last_git_hash): |
| 122 del repository_url |
| 123 first_git_hash = int(first_git_hash) |
| 124 last_git_hash = int(last_git_hash) |
| 125 return [{'commit': x} for x in xrange(last_git_hash, first_git_hash, -1)] |
| 126 commit_range.side_effect = _CommitRange |
| 127 |
| 128 patcher = mock.patch('dashboard.services.gitiles_service.FileContents') |
| 129 self.addCleanup(patcher.stop) |
| 130 file_contents = patcher.start() |
| 131 def _FileContents(repository_url, git_hash, path): |
| 132 del path |
| 133 if repository_url != _CHROMIUM_URL: |
| 134 return 'deps = {}' |
| 135 if git_hash <= 4: # DEPS roll at chromium@5 |
| 136 return 'deps = {"chromium/catapult": "%s@0"}' % (_CATAPULT_URL + '.git') |
| 137 else: |
| 138 return 'deps = {"chromium/catapult": "%s@9"}' % _CATAPULT_URL |
| 139 file_contents.side_effect = _FileContents |
| 140 |
| 141 def testDifferingPatch(self): |
| 142 change_a = change.Change((commit.Commit('chromium', '0e57e2b'),)) |
| 143 change_b = change.Change( |
| 144 (commit.Commit('chromium', 'babe852'),), |
| 145 patch=patch.Patch('https://codereview.chromium.org', 2565263002, 20001)) |
| 146 with self.assertRaises(commit.NonLinearError): |
| 147 change.Change.Midpoint(change_a, change_b) |
| 148 |
| 149 def testDifferingRepository(self): |
| 150 change_a = change.Change((commit.Commit('chromium', '0e57e2b'),)) |
| 151 change_b = change.Change((commit.Commit('not_chromium', 'babe852'),)) |
| 152 with self.assertRaises(commit.NonLinearError): |
| 153 change.Change.Midpoint(change_a, change_b) |
| 154 |
| 155 def testDifferingCommitCount(self): |
| 156 change_a = change.Change((commit.Commit('chromium', 0),)) |
| 157 change_b = change.Change((commit.Commit('chromium', 9), |
| 158 commit.Commit('not_chromium', 'babe852'))) |
| 159 with self.assertRaises(commit.NonLinearError): |
| 160 change.Change.Midpoint(change_a, change_b) |
| 161 |
| 162 def testSameChange(self): |
| 163 change_a = change.Change((commit.Commit('chromium', 0),)) |
| 164 change_b = change.Change((commit.Commit('chromium', 0),)) |
| 165 with self.assertRaises(commit.NonLinearError): |
| 166 change.Change.Midpoint(change_a, change_b) |
| 167 |
| 168 def testAdjacentWithNoDepsRoll(self): |
| 169 change_a = change.Change((commit.Commit('chromium', 0),)) |
| 170 change_b = change.Change((commit.Commit('chromium', 1),)) |
| 171 with self.assertRaises(commit.NonLinearError): |
| 172 change.Change.Midpoint(change_a, change_b) |
| 173 |
| 174 def testAdjacentWithDepsRoll(self): |
| 175 change_a = change.Change((commit.Commit('chromium', 4),)) |
| 176 change_b = change.Change((commit.Commit('chromium', 5),)) |
| 177 expected = change.Change((commit.Commit('chromium', 4), |
| 178 commit.Commit('catapult', 4))) |
| 179 self.assertEqual(change.Change.Midpoint(change_a, change_b), expected) |
| 180 |
| 181 def testNotAdjacent(self): |
| 182 change_a = change.Change((commit.Commit('chromium', 0),)) |
| 183 change_b = change.Change((commit.Commit('chromium', 9),)) |
| 184 self.assertEqual(change.Change.Midpoint(change_a, change_b), |
| 185 change.Change((commit.Commit('chromium', 4),))) |
| 186 |
| 187 def testDepsRollLeft(self): |
| 188 change_a = change.Change((commit.Commit('chromium', 4),)) |
| 189 change_b = change.Change((commit.Commit('chromium', 4), |
| 190 commit.Commit('catapult', 4))) |
| 191 expected = change.Change((commit.Commit('chromium', 4), |
| 192 commit.Commit('catapult', 2))) |
| 193 self.assertEqual(change.Change.Midpoint(change_a, change_b), expected) |
| 194 |
| 195 def testDepsRollRight(self): |
| 196 change_a = change.Change((commit.Commit('chromium', 4), |
| 197 commit.Commit('catapult', 4))) |
| 198 change_b = change.Change((commit.Commit('chromium', 5),)) |
| 199 expected = change.Change((commit.Commit('chromium', 4), |
| 200 commit.Commit('catapult', 6))) |
| 201 self.assertEqual(change.Change.Midpoint(change_a, change_b), expected) |
| 202 |
| 203 def testAdjacentWithDepsRollAndDepAlreadyOverridden(self): |
| 204 change_a = change.Change((commit.Commit('chromium', 4),)) |
| 205 change_b = change.Change((commit.Commit('chromium', 5), |
| 206 commit.Commit('catapult', 4))) |
| 207 expected = change.Change((commit.Commit('chromium', 4), |
| 208 commit.Commit('catapult', 2))) |
| 209 self.assertEqual(change.Change.Midpoint(change_a, change_b), expected) |
OLD | NEW |