Beispiel #1
0
    def test_periodic(self):
        self.worker.hold_jobs_in_build = True
        self.create_branch("org/project", "stable/havana")
        self.config.set("zuul", "layout_config", "tests/fixtures/layout-timer.yaml")
        self.sched.reconfigure(self.config)
        self.registerJobs()

        # The pipeline triggers every second, so we should have seen
        # several by now.
        time.sleep(5)
        self.waitUntilSettled()

        builds = self.builds[:]

        self.worker.hold_jobs_in_build = False
        # Stop queuing timer triggered jobs so that the assertions
        # below don't race against more jobs being queued.
        self.config.set("zuul", "layout_config", "tests/fixtures/layout-no-timer.yaml")
        self.sched.reconfigure(self.config)
        self.registerJobs()
        self.worker.release()
        self.waitUntilSettled()

        projects = ["org/project"]

        self.assertEquals(2, len(builds), "Two builds are running")

        upstream = self.getUpstreamRepos(projects)
        states = [
            {"org/project": str(upstream["org/project"].commit("stable/havana"))},
            {"org/project": str(upstream["org/project"].commit("stable/havana"))},
        ]

        for number, build in enumerate(builds):
            self.log.debug("Build parameters: %s", build.parameters)
            cloner = zuul.lib.cloner.Cloner(
                git_base_url=self.upstream_root,
                projects=projects,
                workspace=self.workspace_root,
                zuul_branch=build.parameters.get("ZUUL_BRANCH", None),
                zuul_ref=build.parameters.get("ZUUL_REF", None),
                zuul_url=self.git_root,
                branch="stable/havana",
            )
            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" % (project, number),
                )

            shutil.rmtree(self.workspace_root)

        self.worker.hold_jobs_in_build = False
        self.worker.release()
        self.waitUntilSettled()
Beispiel #2
0
    def test_post_and_master_checkout(self):
        project = "org/project1"
        master_project = "org/project2"
        path = os.path.join(self.upstream_root, project)
        repo = git.Repo(path)
        repo.head.reference = repo.heads["master"]
        commits = []
        for i in range(0, 3):
            commits.append(self.create_commit(project))
        newRev = commits[1]

        cloner = zuul.lib.cloner.Cloner(
            git_base_url=self.upstream_root,
            projects=[project, master_project],
            workspace=self.workspace_root,
            zuul_branch=None,
            zuul_ref="master",
            zuul_url=self.git_root,
            zuul_project=project,
            zuul_newrev=newRev,
        )
        cloner.execute()
        repos = self.getWorkspaceRepos([project, master_project])
        cloned_sha = repos[project].rev_parse("HEAD").hexsha
        self.assertEqual(newRev, cloned_sha)
        self.assertEqual(
            repos[master_project].rev_parse("HEAD").hexsha, repos[master_project].rev_parse("master").hexsha
        )
Beispiel #3
0
    def test_cache_dir(self):
        projects = ['org/project1', 'org/project2']
        cache_root = os.path.join(self.test_root, "cache")
        for project in projects:
            upstream_repo_path = os.path.join(self.upstream_root, project)
            cache_repo_path = os.path.join(cache_root, project)
            git.Repo.clone_from(upstream_repo_path, cache_repo_path)

        self.worker.hold_jobs_in_build = True
        A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A')
        A.addApproval('CRVW', 2)
        self.fake_gerrit.addEvent(A.addApproval('APRV', 1))

        self.waitUntilSettled()

        self.assertEquals(1, len(self.builds), "One build is running")

        B = self.fake_gerrit.addFakeChange('org/project2', 'master', 'B')
        B.setMerged()

        upstream = self.getUpstreamRepos(projects)
        states = [
            {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
             'org/project2': str(upstream['org/project2'].commit('master')),
             },
            ]

        for number, build in enumerate(self.builds):
            self.log.debug("Build parameters: %s", build.parameters)
            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,
                cache_dir=cache_root,
                )
            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' % (project, number))

        work = self.getWorkspaceRepos(projects)
        upstream_repo_path = os.path.join(self.upstream_root, 'org/project1')
        self.assertEquals(work['org/project1'].remotes.origin.url,
                          upstream_repo_path,
                          'workspace repo origin should be upstream, not cache')

        self.worker.hold_jobs_in_build = False
        self.worker.release()
        self.waitUntilSettled()
Beispiel #4
0
    def test_cloner(self):
        self.worker.hold_jobs_in_build = True

        A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A')
        B = self.fake_gerrit.addFakeChange('org/project2', 'master', 'B')

        A.addPatchset(['project_one.txt'])
        B.addPatchset(['project_two.txt'])
        self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
        self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(1))

        A.addApproval('CRVW', 2)
        B.addApproval('CRVW', 2)
        self.fake_gerrit.addEvent(A.addApproval('APRV', 1))
        self.fake_gerrit.addEvent(B.addApproval('APRV', 1))

        self.waitUntilSettled()

        self.assertEquals(2, len(self.builds), "Two builds are running")

        a_zuul_ref = b_zuul_ref = None
        for build in self.builds:
            self.log.debug("Build parameters: %s", build.parameters)
            if build.parameters['ZUUL_CHANGE'] == '1':
                a_zuul_ref = build.parameters['ZUUL_REF']
                a_zuul_commit = build.parameters['ZUUL_COMMIT']
            if build.parameters['ZUUL_CHANGE'] == '2':
                b_zuul_ref = build.parameters['ZUUL_REF']
                b_zuul_commit = build.parameters['ZUUL_COMMIT']

        self.worker.hold_jobs_in_build = False
        self.worker.release()
        self.waitUntilSettled()

        # Repos setup, now test the cloner
        for zuul_ref in [a_zuul_ref, b_zuul_ref]:
            cloner = zuul.lib.cloner.Cloner(
                git_base_url=self.upstream_root,
                projects=['org/project1', 'org/project2'],
                workspace=self.workspace_root,
                zuul_branch='master',
                zuul_ref=zuul_ref,
                zuul_url=self.git_root,
                branch='master',
                clone_map_file=os.path.join(FIXTURE_DIR, 'clonemap.yaml')
            )
            cloner.execute()
            work_repo1 = git.Repo(os.path.join(self.workspace_root,
                                               'org/project1'))
            self.assertEquals(a_zuul_commit, str(work_repo1.commit('HEAD')))

            work_repo2 = git.Repo(os.path.join(self.workspace_root,
                                               'org/project2'))
            self.assertEquals(b_zuul_commit, str(work_repo2.commit('HEAD')))

            shutil.rmtree(self.workspace_root)
Beispiel #5
0
    def test_one_branch(self):
        self.worker.hold_jobs_in_build = True

        projects = ["org/project1", "org/project2"]
        A = self.fake_gerrit.addFakeChange("org/project1", "master", "A")
        B = self.fake_gerrit.addFakeChange("org/project2", "master", "B")
        A.addApproval("CRVW", 2)
        B.addApproval("CRVW", 2)
        self.fake_gerrit.addEvent(A.addApproval("APRV", 1))
        self.fake_gerrit.addEvent(B.addApproval("APRV", 1))

        self.waitUntilSettled()

        self.assertEquals(2, len(self.builds), "Two builds are running")

        upstream = self.getUpstreamRepos(projects)
        states = [
            {
                "org/project1": self.builds[0].parameters["ZUUL_COMMIT"],
                "org/project2": str(upstream["org/project2"].commit("master")),
            },
            {
                "org/project1": self.builds[0].parameters["ZUUL_COMMIT"],
                "org/project2": self.builds[1].parameters["ZUUL_COMMIT"],
            },
        ]

        for number, build in enumerate(self.builds):
            self.log.debug("Build parameters: %s", build.parameters)
            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,
            )
            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" % (project, number),
                )

            shutil.rmtree(self.workspace_root)

        self.worker.hold_jobs_in_build = False
        self.worker.release()
        self.waitUntilSettled()
Beispiel #6
0
    def test_one_branch(self):
        self.worker.hold_jobs_in_build = True

        projects = ['org/project1', 'org/project2']
        A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A')
        B = self.fake_gerrit.addFakeChange('org/project2', 'master', 'B')
        A.addApproval('CRVW', 2)
        B.addApproval('CRVW', 2)
        self.fake_gerrit.addEvent(A.addApproval('APRV', 1))
        self.fake_gerrit.addEvent(B.addApproval('APRV', 1))

        self.waitUntilSettled()

        self.assertEquals(2, len(self.builds), "Two builds are running")

        upstream = self.getUpstreamRepos(projects)
        states = [
            {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
             'org/project2': str(upstream['org/project2'].commit('master')),
             },
            {'org/project1': self.builds[0].parameters['ZUUL_COMMIT'],
             'org/project2': self.builds[1].parameters['ZUUL_COMMIT'],
             },
            ]

        for number, build in enumerate(self.builds):
            self.log.debug("Build parameters: %s", build.parameters)
            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,
                )
            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' % (project, number))

            shutil.rmtree(self.workspace_root)

        self.worker.hold_jobs_in_build = False
        self.worker.release()
        self.waitUntilSettled()
Beispiel #7
0
 def main(self):
     self.parse_arguments()
     self.setup_logging(color=self.args.color, verbose=self.args.verbose)
     cloner = zuul.lib.cloner.Cloner(
         git_base_url=self.args.git_base_url,
         projects=self.args.projects,
         workspace=self.args.workspace,
         zuul_branch=self.args.zuul_branch,
         zuul_ref=self.args.zuul_ref,
         zuul_url=self.args.zuul_url,
         branch=self.args.branch,
         clone_map_file=self.args.clone_map_file
     )
     cloner.execute()
Beispiel #8
0
 def main(self):
     self.parse_arguments()
     self.setup_logging(color=self.args.color, verbose=self.args.verbose)
     project_branches = {}
     if self.args.project_branch:
         for x in self.args.project_branch:
             project, branch = x[0].split('=')
             project_branches[project] = branch
     cloner = zuul.lib.cloner.Cloner(
         git_base_url=self.args.git_base_url,
         projects=self.args.projects,
         workspace=self.args.workspace,
         zuul_branch=self.args.zuul_branch,
         zuul_ref=self.args.zuul_ref,
         zuul_url=self.args.zuul_url,
         branch=self.args.branch,
         clone_map_file=self.args.clone_map_file,
         project_branches=project_branches,
         cache_dir=self.args.cache_dir,
     )
     cloner.execute()
Beispiel #9
0
    def test_cache_dir(self):
        projects = ["org/project1", "org/project2"]
        cache_root = os.path.join(self.test_root, "cache")
        for project in projects:
            upstream_repo_path = os.path.join(self.upstream_root, project)
            cache_repo_path = os.path.join(cache_root, project)
            git.Repo.clone_from(upstream_repo_path, cache_repo_path)

        self.worker.hold_jobs_in_build = True
        A = self.fake_gerrit.addFakeChange("org/project1", "master", "A")
        A.addApproval("CRVW", 2)
        self.fake_gerrit.addEvent(A.addApproval("APRV", 1))

        self.waitUntilSettled()

        self.assertEquals(1, len(self.builds), "One build is running")

        B = self.fake_gerrit.addFakeChange("org/project2", "master", "B")
        B.setMerged()

        upstream = self.getUpstreamRepos(projects)
        states = [
            {
                "org/project1": self.builds[0].parameters["ZUUL_COMMIT"],
                "org/project2": str(upstream["org/project2"].commit("master")),
            }
        ]

        for number, build in enumerate(self.builds):
            self.log.debug("Build parameters: %s", build.parameters)
            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,
                cache_dir=cache_root,
            )
            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" % (project, number),
                )

        work = self.getWorkspaceRepos(projects)
        upstream_repo_path = os.path.join(self.upstream_root, "org/project1")
        self.assertEquals(
            work["org/project1"].remotes.origin.url,
            upstream_repo_path,
            "workspace repo origin should be upstream, not cache",
        )

        self.worker.hold_jobs_in_build = False
        self.worker.release()
        self.waitUntilSettled()
Beispiel #10
0
    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)
            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)
            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()
Beispiel #11
0
    def test_periodic_update(self):
        # Test that the merger correctly updates its local repository
        # before running a periodic job.

        # Prime the merger with the current state
        A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
        self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
        self.waitUntilSettled()

        # Merge a different change
        B = self.fake_gerrit.addFakeChange('org/project', 'master', 'B')
        B.setMerged()

        # Start a periodic job
        self.worker.hold_jobs_in_build = True
        self.launcher.negative_function_cache_ttl = 0
        self.config.set('zuul', 'layout_config',
                        'tests/fixtures/layout-timer.yaml')
        self.sched.reconfigure(self.config)
        self.registerJobs()

        # The pipeline triggers every second, so we should have seen
        # several by now.
        time.sleep(5)
        self.waitUntilSettled()

        builds = self.builds[:]

        self.worker.hold_jobs_in_build = False
        # Stop queuing timer triggered jobs so that the assertions
        # below don't race against more jobs being queued.
        self.config.set('zuul', 'layout_config',
                        'tests/fixtures/layout-no-timer.yaml')
        self.sched.reconfigure(self.config)
        self.registerJobs()
        self.worker.release()
        self.waitUntilSettled()

        projects = ['org/project']

        self.assertEquals(2, len(builds), "Two builds are running")

        upstream = self.getUpstreamRepos(projects)
        self.assertEqual(upstream['org/project'].commit('master').hexsha,
                         B.patchsets[0]['revision'])
        states = [
            {
                'org/project': str(upstream['org/project'].commit('master')),
            },
            {
                'org/project': str(upstream['org/project'].commit('master')),
            },
        ]

        for number, build in enumerate(builds):
            self.log.debug("Build parameters: %s", build.parameters)
            cloner = zuul.lib.cloner.Cloner(
                git_base_url=self.upstream_root,
                projects=projects,
                workspace=self.workspace_root,
                zuul_project=build.parameters.get('ZUUL_PROJECT', None),
                zuul_branch=build.parameters.get('ZUUL_BRANCH', None),
                zuul_ref=build.parameters.get('ZUUL_REF', None),
                zuul_url=self.git_root,
            )
            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' % (project, number))

            shutil.rmtree(self.workspace_root)

        self.worker.hold_jobs_in_build = False
        self.worker.release()
        self.waitUntilSettled()
Beispiel #12
0
    def test_cache_dir(self):
        projects = ['org/project1', 'org/project2']
        cache_root = os.path.join(self.test_root, "cache")
        for project in projects:
            upstream_repo_path = os.path.join(self.upstream_root, project)
            cache_repo_path = os.path.join(cache_root, project)
            git.Repo.clone_from(upstream_repo_path, cache_repo_path)

        self.worker.hold_jobs_in_build = True
        A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A')
        A.addApproval('CRVW', 2)
        self.fake_gerrit.addEvent(A.addApproval('APRV', 1))

        self.waitUntilSettled()

        self.assertEquals(1, len(self.builds), "One build is running")

        B = self.fake_gerrit.addFakeChange('org/project2', 'master', 'B')
        B.setMerged()

        upstream = self.getUpstreamRepos(projects)
        states = [{
            'org/project1':
            self.builds[0].parameters['ZUUL_COMMIT'],
            'org/project2':
            str(upstream['org/project2'].commit('master')),
        }]

        for number, build in enumerate(self.builds):
            self.log.debug("Build parameters: %s", build.parameters)
            cloner = zuul.lib.cloner.Cloner(
                git_base_url=self.upstream_root,
                projects=projects,
                workspace=self.workspace_root,
                zuul_project=build.parameters.get('ZUUL_PROJECT', None),
                zuul_branch=build.parameters['ZUUL_BRANCH'],
                zuul_ref=build.parameters['ZUUL_REF'],
                zuul_url=self.git_root,
                cache_dir=cache_root,
            )
            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' % (project, number))

        work = self.getWorkspaceRepos(projects)
        # project1 is the zuul_project so the origin should be set to the
        # zuul_url since that is the most up to date.
        cache_repo_path = os.path.join(cache_root, 'org/project1')
        self.assertNotEqual(work['org/project1'].remotes.origin.url,
                            cache_repo_path,
                            'workspace repo origin should not be the cache')
        zuul_url_repo_path = os.path.join(self.git_root, 'org/project1')
        self.assertEqual(work['org/project1'].remotes.origin.url,
                         zuul_url_repo_path,
                         'workspace repo origin should be the zuul url')

        # project2 is not the zuul_project so the origin should be set
        # to upstream since that is the best we can do
        cache_repo_path = os.path.join(cache_root, 'org/project2')
        self.assertNotEqual(work['org/project2'].remotes.origin.url,
                            cache_repo_path,
                            'workspace repo origin should not be the cache')
        upstream_repo_path = os.path.join(self.upstream_root, 'org/project2')
        self.assertEqual(work['org/project2'].remotes.origin.url,
                         upstream_repo_path,
                         'workspace repo origin should be the upstream url')

        self.worker.hold_jobs_in_build = False
        self.worker.release()
        self.waitUntilSettled()
Beispiel #13
0
    def test_periodic(self):
        self.worker.hold_jobs_in_build = True
        self.create_branch('org/project', 'stable/havana')
        self.config.set('zuul', 'layout_config',
                        'tests/fixtures/layout-timer.yaml')
        self.sched.reconfigure(self.config)
        self.registerJobs()

        # The pipeline triggers every second, so we should have seen
        # several by now.
        time.sleep(5)
        self.waitUntilSettled()

        builds = self.builds[:]

        self.worker.hold_jobs_in_build = False
        # Stop queuing timer triggered jobs so that the assertions
        # below don't race against more jobs being queued.
        self.config.set('zuul', 'layout_config',
                        'tests/fixtures/layout-no-timer.yaml')
        self.sched.reconfigure(self.config)
        self.registerJobs()
        self.worker.release()
        self.waitUntilSettled()

        projects = ['org/project']

        self.assertEquals(2, len(builds), "Two builds are running")

        upstream = self.getUpstreamRepos(projects)
        states = [
            {
                'org/project':
                str(upstream['org/project'].commit('stable/havana')),
            },
            {
                'org/project':
                str(upstream['org/project'].commit('stable/havana')),
            },
        ]

        for number, build in enumerate(builds):
            self.log.debug("Build parameters: %s", build.parameters)
            cloner = zuul.lib.cloner.Cloner(
                git_base_url=self.upstream_root,
                projects=projects,
                workspace=self.workspace_root,
                zuul_project=build.parameters.get('ZUUL_PROJECT', None),
                zuul_branch=build.parameters.get('ZUUL_BRANCH', None),
                zuul_ref=build.parameters.get('ZUUL_REF', None),
                zuul_url=self.git_root,
                branch='stable/havana',
            )
            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' % (project, number))

            shutil.rmtree(self.workspace_root)

        self.worker.hold_jobs_in_build = False
        self.worker.release()
        self.waitUntilSettled()
Beispiel #14
0
    def test_project_override(self):
        self.worker.hold_jobs_in_build = True
        projects = [
            'org/project1', 'org/project2', 'org/project3', 'org/project4',
            'org/project5', 'org/project6'
        ]

        self.create_branch('org/project3', 'stable/havana')
        self.create_branch('org/project4', 'stable/havana')
        self.create_branch('org/project6', 'stable/havana')
        A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A')
        B = self.fake_gerrit.addFakeChange('org/project1', 'master', 'B')
        C = self.fake_gerrit.addFakeChange('org/project2', 'master', 'C')
        D = self.fake_gerrit.addFakeChange('org/project3', 'stable/havana',
                                           'D')
        A.addApproval('CRVW', 2)
        B.addApproval('CRVW', 2)
        C.addApproval('CRVW', 2)
        D.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.waitUntilSettled()

        self.assertEquals(4, len(self.builds), "Four builds are running")

        upstream = self.getUpstreamRepos(projects)
        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[1].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[1].parameters['ZUUL_COMMIT'],
                'org/project2': self.builds[2].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[1].parameters['ZUUL_COMMIT'],
                'org/project2':
                self.builds[2].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('stable/havana')),
            },
        ]

        for number, build in enumerate(self.builds):
            self.log.debug("Build parameters: %s", build.parameters)
            cloner = zuul.lib.cloner.Cloner(
                git_base_url=self.upstream_root,
                projects=projects,
                workspace=self.workspace_root,
                zuul_project=build.parameters.get('ZUUL_PROJECT', None),
                zuul_branch=build.parameters['ZUUL_BRANCH'],
                zuul_ref=build.parameters['ZUUL_REF'],
                zuul_url=self.git_root,
                project_branches={'org/project4': 'master'},
            )
            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' % (project, number))
            shutil.rmtree(self.workspace_root)

        self.worker.hold_jobs_in_build = False
        self.worker.release()
        self.waitUntilSettled()
Beispiel #15
0
    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()
Beispiel #16
0
    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()