summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames E. Blair <jeblair@hp.com>2014-08-21 14:31:17 -0700
committerJames E. Blair <jeblair@hp.com>2014-08-27 09:16:25 -0700
commitbce35e18040460338b52783c415ea64094ae5849 (patch)
treecb9355e6474bf663f2c5e0b27f90d469606d5262
parent97d902e21df004fd4a9ffec52a6356d5c34b7208 (diff)
downloadzuul-bce35e18040460338b52783c415ea64094ae5849.tar.gz
Cloner: add upgrade test
This is the 'test_grenade_forward' and 'test_upgrade_backward' tests from d-g. Both scenarios are covered because they both simulate havana->master upgrades, just changing which of them is the 'current' change. Since we examine the states of all changes, in the course of running the test we check the results for both when a current change is havana and master. This also covers the 'test_branch_override' case from d-g. Change-Id: I95abd62279bd44e88a608ad908f4876d11d50ec2
-rwxr-xr-xtests/base.py2
-rw-r--r--tests/fixtures/layout-cloner.yaml8
-rw-r--r--tests/test_cloner.py162
3 files changed, 172 insertions, 0 deletions
diff --git a/tests/base.py b/tests/base.py
index 4ba88fb23..46c708787 100755
--- a/tests/base.py
+++ b/tests/base.py
@@ -849,6 +849,8 @@ class ZuulTestCase(testtools.TestCase):
self.init_repo("org/project2")
self.init_repo("org/project3")
self.init_repo("org/project4")
+ self.init_repo("org/project5")
+ self.init_repo("org/project6")
self.init_repo("org/one-job-project")
self.init_repo("org/nonvoting-project")
self.init_repo("org/templated-project")
diff --git a/tests/fixtures/layout-cloner.yaml b/tests/fixtures/layout-cloner.yaml
index 258c6c1f9..e840ed9ff 100644
--- a/tests/fixtures/layout-cloner.yaml
+++ b/tests/fixtures/layout-cloner.yaml
@@ -35,3 +35,11 @@ projects:
- name: org/project4
gate:
- integration
+
+ - name: org/project5
+ gate:
+ - integration
+
+ - name: org/project6
+ gate:
+ - integration
diff --git a/tests/test_cloner.py b/tests/test_cloner.py
index 6f24ff5f7..752f37c63 100644
--- a/tests/test_cloner.py
+++ b/tests/test_cloner.py
@@ -177,3 +177,165 @@ class TestCloner(ZuulTestCase):
self.worker.hold_jobs_in_build = False
self.worker.release()
self.waitUntilSettled()
+
+ def test_upgrade(self):
+ # Simulates an upgrade test
+ self.worker.hold_jobs_in_build = True
+ projects = ['org/project1', 'org/project2', 'org/project3',
+ 'org/project4', 'org/project5', 'org/project6']
+
+ self.create_branch('org/project2', 'stable/havana')
+ self.create_branch('org/project3', 'stable/havana')
+ self.create_branch('org/project4', 'stable/havana')
+ self.create_branch('org/project5', 'stable/havana')
+ A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A')
+ B = self.fake_gerrit.addFakeChange('org/project2', 'master', 'B')
+ C = self.fake_gerrit.addFakeChange('org/project3', 'stable/havana', 'C')
+ D = self.fake_gerrit.addFakeChange('org/project3', 'master', 'D')
+ E = self.fake_gerrit.addFakeChange('org/project4', 'stable/havana', 'E')
+ A.addApproval('CRVW', 2)
+ B.addApproval('CRVW', 2)
+ C.addApproval('CRVW', 2)
+ D.addApproval('CRVW', 2)
+ E.addApproval('CRVW', 2)
+ self.fake_gerrit.addEvent(A.addApproval('APRV', 1))
+ self.fake_gerrit.addEvent(B.addApproval('APRV', 1))
+ self.fake_gerrit.addEvent(C.addApproval('APRV', 1))
+ self.fake_gerrit.addEvent(D.addApproval('APRV', 1))
+ self.fake_gerrit.addEvent(E.addApproval('APRV', 1))
+
+ self.waitUntilSettled()
+
+ self.assertEquals(5, len(self.builds), "Five builds are running")
+
+ # Check the old side of the upgrade first
+ upstream = self.getUpstreamRepos(projects)
+ states = [
+ {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
+ 'org/project2': str(upstream['org/project2'].commit('stable/havana')),
+ 'org/project3': str(upstream['org/project3'].commit('stable/havana')),
+ 'org/project4': str(upstream['org/project4'].commit('stable/havana')),
+ 'org/project5': str(upstream['org/project5'].commit('stable/havana')),
+ 'org/project6': str(upstream['org/project6'].commit('master')),
+ },
+ {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
+ 'org/project2': str(upstream['org/project2'].commit('stable/havana')),
+ 'org/project3': str(upstream['org/project3'].commit('stable/havana')),
+ 'org/project4': str(upstream['org/project4'].commit('stable/havana')),
+ 'org/project5': str(upstream['org/project5'].commit('stable/havana')),
+ 'org/project6': str(upstream['org/project6'].commit('master')),
+ },
+ {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
+ 'org/project2': str(upstream['org/project2'].commit('stable/havana')),
+ 'org/project3': self.builds[2].parameters['ZUUL_COMMIT'],
+ 'org/project4': str(upstream['org/project4'].commit('stable/havana')),
+
+ 'org/project5': str(upstream['org/project5'].commit('stable/havana')),
+ 'org/project6': str(upstream['org/project6'].commit('master')),
+ },
+ {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
+ 'org/project2': str(upstream['org/project2'].commit('stable/havana')),
+ 'org/project3': self.builds[2].parameters['ZUUL_COMMIT'],
+ 'org/project4': str(upstream['org/project4'].commit('stable/havana')),
+ 'org/project5': str(upstream['org/project5'].commit('stable/havana')),
+ 'org/project6': str(upstream['org/project6'].commit('master')),
+ },
+ {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
+ 'org/project2': str(upstream['org/project2'].commit('stable/havana')),
+ 'org/project3': self.builds[2].parameters['ZUUL_COMMIT'],
+ 'org/project4': self.builds[4].parameters['ZUUL_COMMIT'],
+ 'org/project5': str(upstream['org/project5'].commit('stable/havana')),
+ 'org/project6': str(upstream['org/project6'].commit('master')),
+ },
+ ]
+
+ for number, build in enumerate(self.builds):
+ self.log.debug("Build parameters: %s", build.parameters)
+ change_number = int(build.parameters['ZUUL_CHANGE'])
+ cloner = zuul.lib.cloner.Cloner(
+ git_base_url=self.upstream_root,
+ projects=projects,
+ workspace=self.workspace_root,
+ zuul_branch=build.parameters['ZUUL_BRANCH'],
+ zuul_ref=build.parameters['ZUUL_REF'],
+ zuul_url=self.git_root,
+ branch='stable/havana', # Old branch for upgrade
+ )
+ cloner.execute()
+ work = self.getWorkspaceRepos(projects)
+ state = states[number]
+
+ for project in projects:
+ self.assertEquals(state[project],
+ str(work[project].commit('HEAD')),
+ 'Project %s commit for build %s should '
+ 'be correct on old side of upgrade' %
+ (project, number))
+ shutil.rmtree(self.workspace_root)
+
+ # Check the new side of the upgrade
+ states = [
+ {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
+ 'org/project2': str(upstream['org/project2'].commit('master')),
+ 'org/project3': str(upstream['org/project3'].commit('master')),
+ 'org/project4': str(upstream['org/project4'].commit('master')),
+ 'org/project5': str(upstream['org/project5'].commit('master')),
+ 'org/project6': str(upstream['org/project6'].commit('master')),
+ },
+ {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
+ 'org/project2': self.builds[1].parameters['ZUUL_COMMIT'],
+ 'org/project3': str(upstream['org/project3'].commit('master')),
+ 'org/project4': str(upstream['org/project4'].commit('master')),
+ 'org/project5': str(upstream['org/project5'].commit('master')),
+ 'org/project6': str(upstream['org/project6'].commit('master')),
+ },
+ {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
+ 'org/project2': self.builds[1].parameters['ZUUL_COMMIT'],
+ 'org/project3': str(upstream['org/project3'].commit('master')),
+ 'org/project4': str(upstream['org/project4'].commit('master')),
+ 'org/project5': str(upstream['org/project5'].commit('master')),
+ 'org/project6': str(upstream['org/project6'].commit('master')),
+ },
+ {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
+ 'org/project2': self.builds[1].parameters['ZUUL_COMMIT'],
+ 'org/project3': self.builds[3].parameters['ZUUL_COMMIT'],
+ 'org/project4': str(upstream['org/project4'].commit('master')),
+ 'org/project5': str(upstream['org/project5'].commit('master')),
+ 'org/project6': str(upstream['org/project6'].commit('master')),
+ },
+ {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
+ 'org/project2': self.builds[1].parameters['ZUUL_COMMIT'],
+ 'org/project3': self.builds[3].parameters['ZUUL_COMMIT'],
+ 'org/project4': str(upstream['org/project4'].commit('master')),
+ 'org/project5': str(upstream['org/project5'].commit('master')),
+ 'org/project6': str(upstream['org/project6'].commit('master')),
+ },
+ ]
+
+ for number, build in enumerate(self.builds):
+ self.log.debug("Build parameters: %s", build.parameters)
+ change_number = int(build.parameters['ZUUL_CHANGE'])
+ cloner = zuul.lib.cloner.Cloner(
+ git_base_url=self.upstream_root,
+ projects=projects,
+ workspace=self.workspace_root,
+ zuul_branch=build.parameters['ZUUL_BRANCH'],
+ zuul_ref=build.parameters['ZUUL_REF'],
+ zuul_url=self.git_root,
+ branch='master', # New branch for upgrade
+ )
+ cloner.execute()
+ work = self.getWorkspaceRepos(projects)
+ state = states[number]
+
+ for project in projects:
+ self.assertEquals(state[project],
+ str(work[project].commit('HEAD')),
+ 'Project %s commit for build %s should '
+ 'be correct on old side of upgrade' %
+ (project, number))
+ shutil.rmtree(self.workspace_root)
+
+ self.worker.hold_jobs_in_build = False
+ self.worker.release()
+ self.waitUntilSettled()