Merge "Refactor test_zuul_refs and FakeBuild.hasChanges" into feature/zuulv3

This commit is contained in:
Jenkins 2016-11-16 16:42:42 +00:00 committed by Gerrit Code Review
commit 61c9123d3f
2 changed files with 36 additions and 47 deletions

View File

@ -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):

View File

@ -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()