Refactor test_zuul_refs and FakeBuild.hasChanges
In re-enabling test_zuul_refs and refactoring it to use FakeBuild.hasChanges, a weakness was discovered in hasChanges where it would not check the repositories of all the changes one is looking for. After fixing that, the test passes and others should be able to be refactored in the same way. Change-Id: Iaf647412d2518c079c8b42ed670919f4e8ca0b63 Story: 2000773 Task: 3296
This commit is contained in:
parent
debd7a7dbe
commit
3343e3e7b4
|
@ -41,7 +41,7 @@ import gear
|
|||
import fixtures
|
||||
import statsd
|
||||
import testtools
|
||||
from git import GitCommandError
|
||||
from git.exc import NoSuchPathError
|
||||
|
||||
import zuul.connection.gerrit
|
||||
import zuul.connection.smtp
|
||||
|
@ -640,17 +640,20 @@ class FakeBuild(object):
|
|||
:rtype: bool
|
||||
|
||||
"""
|
||||
project = self.parameters['ZUUL_PROJECT']
|
||||
path = os.path.join(self.jobdir.git_root, project)
|
||||
repo = git.Repo(path)
|
||||
ref = self.parameters['ZUUL_REF']
|
||||
repo_messages = [c.message.strip() for c in repo.iter_commits(ref)]
|
||||
commit_messages = ['%s-1' % change.subject for change in changes]
|
||||
self.log.debug("Checking if build %s has changes; commit_messages %s;"
|
||||
" repo_messages %s" % (self, commit_messages,
|
||||
repo_messages))
|
||||
for msg in commit_messages:
|
||||
if msg not in repo_messages:
|
||||
for change in changes:
|
||||
path = os.path.join(self.jobdir.git_root, change.project)
|
||||
try:
|
||||
repo = git.Repo(path)
|
||||
except NoSuchPathError as e:
|
||||
self.log.debug('%s' % e)
|
||||
return False
|
||||
ref = self.parameters['ZUUL_REF']
|
||||
repo_messages = [c.message.strip() for c in repo.iter_commits(ref)]
|
||||
commit_message = '%s-1' % change.subject
|
||||
self.log.debug("Checking if build %s has changes; commit_message "
|
||||
"%s; repo_messages %s" % (self, commit_message,
|
||||
repo_messages))
|
||||
if commit_message not in repo_messages:
|
||||
self.log.debug(" messages do not match")
|
||||
return False
|
||||
self.log.debug(" OK")
|
||||
|
@ -1262,19 +1265,6 @@ class ZuulTestCase(BaseTestCase):
|
|||
commit = repo.index.commit('Creating a fake commit')
|
||||
return commit.hexsha
|
||||
|
||||
def ref_has_change(self, ref, change):
|
||||
# TODOv3(jeblair): this should probably be removed in favor of
|
||||
# build.hasChanges
|
||||
path = os.path.join(self.git_root, change.project)
|
||||
repo = git.Repo(path)
|
||||
try:
|
||||
for commit in repo.iter_commits(ref):
|
||||
if commit.message.strip() == ('%s-1' % change.subject):
|
||||
return True
|
||||
except GitCommandError:
|
||||
pass
|
||||
return False
|
||||
|
||||
def orderedRelease(self):
|
||||
# Run one build at a time to ensure non-race order:
|
||||
while len(self.builds):
|
||||
|
|
|
@ -2045,7 +2045,6 @@ jobs:
|
|||
|
||||
self.assertEqual(len(self.history), 0)
|
||||
|
||||
@skip("Disabled for early v3 development")
|
||||
def test_zuul_refs(self):
|
||||
"Test that zuul refs exist and have the right changes"
|
||||
self.launch_server.hold_jobs_in_build = True
|
||||
|
@ -2078,15 +2077,22 @@ jobs:
|
|||
self.waitUntilSettled()
|
||||
|
||||
a_zref = b_zref = c_zref = d_zref = None
|
||||
a_build = b_build = c_build = d_build = None
|
||||
for x in self.builds:
|
||||
if x.parameters['ZUUL_CHANGE'] == '3':
|
||||
a_zref = x.parameters['ZUUL_REF']
|
||||
if x.parameters['ZUUL_CHANGE'] == '4':
|
||||
a_build = x
|
||||
elif x.parameters['ZUUL_CHANGE'] == '4':
|
||||
b_zref = x.parameters['ZUUL_REF']
|
||||
if x.parameters['ZUUL_CHANGE'] == '5':
|
||||
b_build = x
|
||||
elif x.parameters['ZUUL_CHANGE'] == '5':
|
||||
c_zref = x.parameters['ZUUL_REF']
|
||||
if x.parameters['ZUUL_CHANGE'] == '6':
|
||||
c_build = x
|
||||
elif x.parameters['ZUUL_CHANGE'] == '6':
|
||||
d_zref = x.parameters['ZUUL_REF']
|
||||
d_build = x
|
||||
if a_build and b_build and c_build and d_build:
|
||||
break
|
||||
|
||||
# There are... four... refs.
|
||||
self.assertIsNotNone(a_zref)
|
||||
|
@ -2098,27 +2104,20 @@ jobs:
|
|||
refs = set([a_zref, b_zref, c_zref, d_zref])
|
||||
self.assertEqual(len(refs), 4)
|
||||
|
||||
# a ref should have a, not b, and should not be in project2
|
||||
self.assertTrue(self.ref_has_change(a_zref, A))
|
||||
self.assertFalse(self.ref_has_change(a_zref, B))
|
||||
self.assertFalse(self.ref_has_change(a_zref, M2))
|
||||
# should have a, not b, and should not be in project2
|
||||
self.assertTrue(a_build.hasChanges(A))
|
||||
self.assertFalse(a_build.hasChanges(B, M2))
|
||||
|
||||
# b ref should have a and b, and should not be in project2
|
||||
self.assertTrue(self.ref_has_change(b_zref, A))
|
||||
self.assertTrue(self.ref_has_change(b_zref, B))
|
||||
self.assertFalse(self.ref_has_change(b_zref, M2))
|
||||
# should have a and b, and should not be in project2
|
||||
self.assertTrue(b_build.hasChanges(A, B))
|
||||
self.assertFalse(b_build.hasChanges(M2))
|
||||
|
||||
# c ref should have a and b in 1, c in 2
|
||||
self.assertTrue(self.ref_has_change(c_zref, A))
|
||||
self.assertTrue(self.ref_has_change(c_zref, B))
|
||||
self.assertTrue(self.ref_has_change(c_zref, C))
|
||||
self.assertFalse(self.ref_has_change(c_zref, D))
|
||||
# should have a and b in 1, c in 2
|
||||
self.assertTrue(c_build.hasChanges(A, B, C))
|
||||
self.assertFalse(c_build.hasChanges(D))
|
||||
|
||||
# d ref should have a and b in 1, c and d in 2
|
||||
self.assertTrue(self.ref_has_change(d_zref, A))
|
||||
self.assertTrue(self.ref_has_change(d_zref, B))
|
||||
self.assertTrue(self.ref_has_change(d_zref, C))
|
||||
self.assertTrue(self.ref_has_change(d_zref, D))
|
||||
# should have a and b in 1, c and d in 2
|
||||
self.assertTrue(d_build.hasChanges(A, B, C, D))
|
||||
|
||||
self.launch_server.hold_jobs_in_build = False
|
||||
self.launch_server.release()
|
||||
|
|
Loading…
Reference in New Issue