diff options
author | Zuul <zuul@review.opendev.org> | 2022-03-22 09:15:14 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2022-03-22 09:15:14 +0000 |
commit | 30e6acb0fbae9890bec5d550b76ff2a3757be6e0 (patch) | |
tree | 3250f507b1067286fd939343a1923bf0deaf7acb /tests | |
parent | 463cd1615bd2f7941f92c2e556f5bd984ecdc927 (diff) | |
parent | 81d84e7c15d46a7e4b3557824552b941e4c60182 (diff) | |
download | zuul-30e6acb0fbae9890bec5d550b76ff2a3757be6e0.tar.gz |
Merge "Support submitWholeTopic in Gerrit"
Diffstat (limited to 'tests')
-rw-r--r-- | tests/base.py | 34 | ||||
-rw-r--r-- | tests/fixtures/zuul-gerrit-github.conf | 1 | ||||
-rw-r--r-- | tests/unit/test_circular_dependencies.py | 39 | ||||
-rw-r--r-- | tests/unit/test_web.py | 4 |
4 files changed, 74 insertions, 4 deletions
diff --git a/tests/base.py b/tests/base.py index d0db346c9..51149adbd 100644 --- a/tests/base.py +++ b/tests/base.py @@ -383,7 +383,8 @@ class FakeGerritChange(object): def __init__(self, gerrit, number, project, branch, subject, status='NEW', upstream_root=None, files={}, - parent=None, merge_parents=None, merge_files=None): + parent=None, merge_parents=None, merge_files=None, + topic=None): self.gerrit = gerrit self.source = gerrit self.reported = 0 @@ -421,6 +422,8 @@ class FakeGerritChange(object): 'submitRecords': [], 'url': '%s/%s' % (self.gerrit.baseurl.rstrip('/'), number)} + if topic: + self.data['topic'] = topic self.upstream_root = upstream_root if merge_parents: self.addMergePatchset(parents=merge_parents, @@ -957,6 +960,7 @@ class GerritWebServer(object): class Server(http.server.SimpleHTTPRequestHandler): log = logging.getLogger("zuul.test.FakeGerritConnection") review_re = re.compile('/a/changes/(.*?)/revisions/(.*?)/review') + together_re = re.compile('/a/changes/(.*?)/submitted_together') submit_re = re.compile('/a/changes/(.*?)/submit') pending_checks_re = re.compile( r'/a/plugins/checks/checks\.pending/\?' @@ -1005,6 +1009,9 @@ class GerritWebServer(object): m = self.files_re.match(path) if m: return self.get_files(m.group(1), m.group(2)) + m = self.together_re.match(path) + if m: + return self.get_submitted_together(m.group(1)) m = self.change_search_re.match(path) if m: return self.get_changes(m.group(1)) @@ -1132,6 +1139,21 @@ class GerritWebServer(object): self.send_data(data) self.end_headers() + def get_submitted_together(self, number): + change = fake_gerrit.changes.get(int(number)) + if not change: + return self._404() + topic = change.data.get('topic') + if not fake_gerrit._fake_submit_whole_topic: + topic = None + if topic: + results = fake_gerrit._simpleQuery( + f'topic:{topic}', http=True) + else: + results = [] + self.send_data(results) + self.end_headers() + def get_changes(self, query): self.log.debug("simpleQueryHTTP: %s", query) query = urllib.parse.unquote(query) @@ -1262,6 +1284,7 @@ class FakeGerritConnection(gerritconnection.GerritConnection): self.fake_checkers = [] self._poller_event = poller_event self._ref_watcher_event = ref_watcher_event + self._fake_submit_whole_topic = False def onStop(self): super().onStop() @@ -1273,14 +1296,15 @@ class FakeGerritConnection(gerritconnection.GerritConnection): def addFakeChange(self, project, branch, subject, status='NEW', files=None, parent=None, merge_parents=None, - merge_files=None): + merge_files=None, topic=None): """Add a change to the fake Gerrit.""" self.change_number += 1 c = FakeGerritChange(self, self.change_number, project, branch, subject, upstream_root=self.upstream_root, status=status, files=files, parent=parent, merge_parents=merge_parents, - merge_files=merge_files) + merge_files=merge_files, + topic=topic) self.changes[self.change_number] = c return c @@ -1431,6 +1455,10 @@ class FakeGerritConnection(gerritconnection.GerritConnection): queryMethod(change) for change in self.changes.values() if change.data["lastUpdated"] >= cut_off_time ] + elif query.startswith('topic:'): + topic = query[len('topic:'):].strip() + l = [queryMethod(change) for change in self.changes.values() + if topic in change.data.get('topic', '')] else: # Query all open changes l = [queryMethod(change) for change in self.changes.values()] diff --git a/tests/fixtures/zuul-gerrit-github.conf b/tests/fixtures/zuul-gerrit-github.conf index 1b2813dd4..0d03bacc2 100644 --- a/tests/fixtures/zuul-gerrit-github.conf +++ b/tests/fixtures/zuul-gerrit-github.conf @@ -20,6 +20,7 @@ driver=gerrit server=review.example.com user=jenkins sshkey=fake_id_rsa_path +password=badpassword [connection github] driver=github diff --git a/tests/unit/test_circular_dependencies.py b/tests/unit/test_circular_dependencies.py index 0b48a66a9..713408ee9 100644 --- a/tests/unit/test_circular_dependencies.py +++ b/tests/unit/test_circular_dependencies.py @@ -1410,6 +1410,45 @@ class TestGerritCircularDependencies(ZuulTestCase): self.assertEqual(B.data['status'], 'NEW') self.assertEqual(C.data['status'], 'MERGED') + def test_submitted_together(self): + self.fake_gerrit._fake_submit_whole_topic = True + A = self.fake_gerrit.addFakeChange('org/project1', "master", "A", + topic='test-topic') + B = self.fake_gerrit.addFakeChange('org/project2', "master", "B", + topic='test-topic') + + self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1)) + self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(1)) + self.waitUntilSettled() + + self.assertEqual(len(A.patchsets[-1]["approvals"]), 1) + self.assertEqual(A.patchsets[-1]["approvals"][0]["type"], "Verified") + self.assertEqual(A.patchsets[-1]["approvals"][0]["value"], "1") + + self.assertEqual(len(B.patchsets[-1]["approvals"]), 1) + self.assertEqual(B.patchsets[-1]["approvals"][0]["type"], "Verified") + self.assertEqual(B.patchsets[-1]["approvals"][0]["value"], "1") + + # We're about to add approvals to changes without adding the + # triggering events to Zuul, so that we can be sure that it is + # enqueing the changes based on dependencies, not because of + # triggering events. Since it will have the changes cached + # already (without approvals), we need to clear the cache + # first. + for connection in self.scheds.first.connections.connections.values(): + connection.maintainCache([], max_age=0) + + A.addApproval("Code-Review", 2) + B.addApproval("Code-Review", 2) + A.addApproval("Approved", 1) + self.fake_gerrit.addEvent(B.addApproval("Approved", 1)) + self.waitUntilSettled() + + self.assertEqual(A.reported, 3) + self.assertEqual(B.reported, 3) + self.assertEqual(A.data["status"], "MERGED") + self.assertEqual(B.data["status"], "MERGED") + class TestGithubCircularDependencies(ZuulTestCase): config_file = "zuul-gerrit-github.conf" diff --git a/tests/unit/test_web.py b/tests/unit/test_web.py index 7ce82de51..98bbd5f77 100644 --- a/tests/unit/test_web.py +++ b/tests/unit/test_web.py @@ -2667,10 +2667,12 @@ class TestWebMulti(BaseTestWeb): def test_web_connections_list_multi(self): data = self.get_url('api/connections').json() + port = self.web.connections.connections['gerrit'].web_server.port + url = f'http://localhost:{port}' gerrit_connection = { 'driver': 'gerrit', 'name': 'gerrit', - 'baseurl': 'https://review.example.com', + 'baseurl': url, 'canonical_hostname': 'review.example.com', 'server': 'review.example.com', 'port': 29418, |