Fix "reverse" Depends-On detection with new Gerrit URL schema

The regex to detect Depends-On relations between Gerrit changes was recently
updated for the new URL schema. However because the change.uris attribute was
not also updated, getChangesDependingOn was not working, and the functionality
that this enables ("reverse" dependency processing, where a dependee change
triggers a test for an already-approved dependent) was not covered by the test.

Update the attribute and add test coverage.

Change-Id: I400445093beda390aa9ce19af31e50820f7c56df
This commit is contained in:
Brendan Jackman 2018-11-29 16:20:02 +07:00
parent fff02ace69
commit f605862a4d
2 changed files with 25 additions and 7 deletions

View File

@ -18,6 +18,12 @@ from tests.base import (
simple_layout,
)
URL_FORMATS = [
'{baseurl}/{change_no}',
'{baseurl}/#/c/{change_no}',
'{baseurl}/c/{project}/+/{change_no}/',
]
class TestGerritCRD(ZuulTestCase):
tenant_config_file = 'config/single-tenant/main.yaml'
@ -95,15 +101,14 @@ class TestGerritCRD(ZuulTestCase):
# changes - repeat the simple test on each of the 3 to ensure they can be
# parsed, the other tests just use the default URL schema provided in
# FakeGerritChange.data['url'] .
def test_crd_gate_url_schema0(self):
self._test_crd_gate(URL_FORMATS[0])
def test_crd_gate_url_schema1(self):
self._test_crd_gate('{baseurl}/{change_no}')
self._test_crd_gate(URL_FORMATS[1])
def test_crd_gate_url_schema2(self):
self._test_crd_gate('{baseurl}/#/c/{change_no}')
def test_crd_gate_url_schema3(self):
self._test_crd_gate('{baseurl}/c/{project}/+/{change_no}/')
self._test_crd_gate(URL_FORMATS[2])
def test_crd_gate_triangle(self):
A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A')
@ -260,7 +265,7 @@ class TestGerritCRD(ZuulTestCase):
self.assertEqual(A.data['status'], 'MERGED')
self.assertEqual(A.reported, 2)
def test_crd_gate_reverse(self):
def _test_crd_gate_reverse(self, url_fmt):
"Test reverse cross-repo dependencies"
A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A')
B = self.fake_gerrit.addFakeChange('org/project2', 'master', 'B')
@ -269,8 +274,11 @@ class TestGerritCRD(ZuulTestCase):
# A Depends-On: B
url = url_fmt.format(baseurl=B.gerrit.baseurl.rstrip('/'),
project=B.project,
change_no=B.number)
A.data['commitMessage'] = '%s\n\nDepends-On: %s\n' % (
A.subject, B.data['url'])
A.subject, url)
self.fake_gerrit.addEvent(A.addApproval('Approved', 1))
self.waitUntilSettled()
@ -300,6 +308,15 @@ class TestGerritCRD(ZuulTestCase):
'project-merge', 'org/project1').changes
self.assertEqual(changes, '2,1 1,1')
def test_crd_gate_reverse_schema0(self):
self._test_crd_gate_reverse(URL_FORMATS[0])
def test_crd_gate_reverse_schema1(self):
self._test_crd_gate_reverse(URL_FORMATS[1])
def test_crd_gate_reverse_schema2(self):
self._test_crd_gate_reverse(URL_FORMATS[2])
def test_crd_cycle(self):
"Test cross-repo dependency cycles"
A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A')

View File

@ -558,6 +558,7 @@ class GerritConnection(BaseConnection):
change.uris = [
'%s/%s' % (baseurl, change.number),
'%s/#/c/%s' % (baseurl, change.number),
'%s/c/%s/+/%s' % (baseurl, change.project.name, change.number),
]
max_ps = 0