Merge "Refactor test_zuul_refs and FakeBuild.hasChanges" into feature/zuulv3
This commit is contained in:
commit
61c9123d3f
|
@ -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