Merge "Add test of topic dependencies with an abandoned change"

This commit is contained in:
Zuul 2024-11-04 20:46:15 +00:00 committed by Gerrit Code Review
commit b346aa80b1
2 changed files with 52 additions and 1 deletions

View File

@ -659,6 +659,11 @@ class FakeGerritChange(object):
def setReported(self):
self.reported += 1
def setAbandoned(self):
self.data['status'] = 'ABANDONED'
self.data['open'] = False
self.open = False
class FakeGerritPoller(gerritconnection.GerritChecksPoller):
"""A Fake Gerrit poller for use in tests.
@ -1171,7 +1176,8 @@ class FakeGerritConnection(gerritconnection.GerritConnection):
if not self._fake_submit_whole_topic:
topic = None
if topic:
results = self._simpleQuery(f'topic:{topic}', http=True)
results = self._simpleQuery(f'status:open topic:{topic}',
http=True)
else:
results = [change.queryHTTP(internal=True)]
for dep in change.data.get('dependsOn', []):
@ -1179,6 +1185,8 @@ class FakeGerritConnection(gerritconnection.GerritConnection):
r = dep_change.queryHTTP(internal=True)
if r['status'] == 'MERGED':
continue
if not dep_change.open:
continue
if r not in results:
results.append(r)
if len(results) == 1:
@ -1272,6 +1280,17 @@ class FakeGerritConnection(gerritconnection.GerritConnection):
if 'topic' in change.data
and topic in change.data['topic']
]
if part.startswith('status:'):
status = part[len('status:'):].strip().strip('"\'').lower()
if status == 'open':
l = [
change for change in l if change.open
]
else:
l = [
change for change in l
if change.data['status'].lower() == status
]
l = [queryMethod(change) for change in l]
return l

View File

@ -4180,6 +4180,38 @@ class TestGerritCircularDependencies(ZuulTestCase):
self.assertIn("/2 (config error)", A.messages[-1])
self.assertIn("/2 (config error)", B.messages[-1])
@gerrit_config(submit_whole_topic=True)
def test_abandoned_change(self):
# Test that we can re-enqueue a topic cycle after abandoning a
# change (out of band).
A = self.fake_gerrit.addFakeChange('org/project1', "master", "A",
topic='test-topic')
B = self.fake_gerrit.addFakeChange('org/project2', "master", "B",
topic='test-topic',
files={'conflict': 'B'})
X = self.fake_gerrit.addFakeChange('org/project2', "master", "X",
topic='test-topic',
files={'conflict': 'X'})
A.addApproval("Code-Review", 2)
B.addApproval("Code-Review", 2)
X.addApproval("Code-Review", 2)
X.addApproval("Approved", 1)
B.addApproval("Approved", 1)
self.fake_gerrit.addEvent(A.addApproval("Approved", 1))
self.waitUntilSettled()
X.setAbandoned()
self.waitUntilSettled("abandoned")
self.log.debug("add reapproval")
self.fake_gerrit.addEvent(A.addApproval("Approved", 1))
self.waitUntilSettled("reapproved")
self.assertEqual(A.data["status"], "MERGED")
self.assertEqual(B.data["status"], "MERGED")
self.assertEqual(X.data["status"], "ABANDONED")
class TestGithubCircularDependencies(ZuulTestCase):
config_file = "zuul-gerrit-github.conf"