diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-09-02 18:32:02 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-09-02 18:32:02 +0000 |
commit | 6d41b7caad72661031fadc96c70c221cf4f4bd40 (patch) | |
tree | f109d819c21de5b2855f15c04125ac89e63a8f1a | |
parent | 0c9d3e9b788cfed796137f8a3a9d8c5aea4e032d (diff) | |
parent | bce35e18040460338b52783c415ea64094ae5849 (diff) | |
download | zuul-6d41b7caad72661031fadc96c70c221cf4f4bd40.tar.gz |
Merge "Cloner: add upgrade test"
-rwxr-xr-x | tests/base.py | 2 | ||||
-rw-r--r-- | tests/fixtures/layout-cloner.yaml | 8 | ||||
-rw-r--r-- | tests/test_cloner.py | 162 |
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() |