Ejemplo n.º 1
0
    def f_builds(self):
        self.b1 = models.Build(
            copr=self.c1, user=self.u1, submitted_on=50, started_on=139086644000)
        self.b2 = models.Build(
            copr=self.c1, user=self.u2, submitted_on=10, ended_on=139086644000)
        self.b3 = models.Build(
            copr=self.c2, user=self.u2, submitted_on=10)
        self.b4 = models.Build(
            copr=self.c2, user=self.u2, submitted_on=100)

        self.b1_bc = []
        self.b2_bc = []
        self.b3_bc = []
        self.b4_bc = []

        for build, build_chroots in zip(
                [self.b1, self.b2, self.b3, self.b4],
                [self.b1_bc, self.b2_bc, self.b3_bc, self.b4_bc]):


            status = None
            if build is self.b1:  # this build is going to be deleted
                status = 1  # succeeded
            for chroot in build.copr.active_chroots:
                buildchroot = models.BuildChroot(
                    build=build,
                    mock_chroot=chroot,
                    status=status)

                build_chroots.append(buildchroot)
                self.db.session.add(buildchroot)

        self.db.session.add_all([self.b1, self.b2, self.b3, self.b4])
Ejemplo n.º 2
0
    def f_builds(self):
        self.p1 = models.Package(copr=self.c1,
                                 name="hello-world",
                                 source_type=0)
        self.p2 = models.Package(copr=self.c2,
                                 name="hello-world",
                                 source_type=0)

        self.b1 = models.Build(copr=self.c1,
                               package=self.p1,
                               user=self.u1,
                               submitted_on=50)
        self.b2 = models.Build(copr=self.c1,
                               package=self.p1,
                               user=self.u2,
                               submitted_on=10)
        self.b3 = models.Build(copr=self.c2,
                               package=self.p2,
                               user=self.u2,
                               submitted_on=10)
        self.b4 = models.Build(copr=self.c2,
                               package=self.p2,
                               user=self.u2,
                               submitted_on=100)

        self.basic_builds = [self.b1, self.b2, self.b3, self.b4]
        self.b1_bc = []
        self.b2_bc = []
        self.b3_bc = []
        self.b4_bc = []

        for build, build_chroots in zip(
            [self.b1, self.b2, self.b3, self.b4],
            [self.b1_bc, self.b2_bc, self.b3_bc, self.b4_bc]):

            status = None
            if build is self.b1:  # this build is going to be deleted
                status = StatusEnum("succeeded")
            for chroot in build.copr.active_chroots:
                buildchroot = models.BuildChroot(
                    build=build,
                    mock_chroot=chroot,
                    status=status,
                    git_hash="12345",
                )

                if build is self.b1 or build is self.b2:
                    buildchroot.started_on = 139086644000
                    buildchroot.ended_on = 149086644000
                    build.ended_on = 149086644000

                build_chroots.append(buildchroot)
                self.db.session.add(buildchroot)

        self.db.session.add_all([self.b1, self.b2, self.b3, self.b4])
Ejemplo n.º 3
0
    def f_builds(self):
        self.p1 = models.Package(
            copr=self.c1, copr_dir=self.c1_dir, name="hello-world", source_type=0)
        self.p2 = models.Package(
            copr=self.c2, copr_dir=self.c2_dir, name="whatsupthere-world", source_type=0)
        self.p3 = models.Package(
            copr=self.c2, copr_dir=self.c3_dir, name="goodbye-world", source_type=0)

        self.b1 = models.Build(
            copr=self.c1, copr_dir=self.c1_dir, package=self.p1,
            user=self.u1, submitted_on=50, srpm_url="http://somesrpm",
            source_status=StatusEnum("succeeded"), result_dir='bar')
        self.b2 = models.Build(
            copr=self.c1, copr_dir=self.c1_dir, package=self.p1,
            user=self.u2, submitted_on=10, srpm_url="http://somesrpm",
            source_status=StatusEnum("importing"), result_dir='bar',
            source_json='{}')
        self.b3 = models.Build(
            copr=self.c2, copr_dir=self.c2_dir, package=self.p2, user=self.u2, submitted_on=10, srpm_url="http://somesrpm", source_status=StatusEnum("importing"), result_dir='bar')
        self.b4 = models.Build(
            copr=self.c2, copr_dir=self.c2_dir, package=self.p2, user=self.u2, submitted_on=100, srpm_url="http://somesrpm", source_status=StatusEnum("succeeded"), result_dir='bar')

        self.basic_builds = [self.b1, self.b2, self.b3, self.b4]
        self.b1_bc = []
        self.b2_bc = []
        self.b3_bc = []
        self.b4_bc = []

        for build, build_chroots in zip(
                [self.b1, self.b2, self.b3, self.b4],
                [self.b1_bc, self.b2_bc, self.b3_bc, self.b4_bc]):

            status = None
            if build is self.b1:  # this build is going to be deleted
                status = StatusEnum("succeeded")
            for chroot in build.copr.active_chroots:
                buildchroot = models.BuildChroot(
                    build=build,
                    mock_chroot=chroot,
                    status=status,
                    git_hash="12345",
                    result_dir='bar',
                )

                if build is self.b1 or build is self.b2:
                    buildchroot.started_on = 1390866440
                    buildchroot.ended_on = 1490866440


                build_chroots.append(buildchroot)
                self.db.session.add(buildchroot)

        self.db.session.add_all([self.b1, self.b2, self.b3, self.b4])
Ejemplo n.º 4
0
    def rebuild_package(cls, package):
        build = models.Build(user=None,
                             pkgs=None,
                             package_id=package.id,
                             copr=package.copr,
                             repos=package.copr.repos,
                             source_type=package.source_type,
                             source_json=package.source_json,
                             submitted_on=int(time.time()),
                             enable_net=package.enable_net,
                             timeout=DEFAULT_BUILD_TIMEOUT)

        db.session.add(build)

        chroots = package.copr.active_chroots

        status = helpers.StatusEnum("importing")

        for chroot in chroots:
            buildchroot = models.BuildChroot(build=build,
                                             status=status,
                                             mock_chroot=chroot,
                                             git_hash=None)

            db.session.add(buildchroot)

        return build
Ejemplo n.º 5
0
    def test_delete_build_exceptions(self, f_users, f_coprs, f_mock_chroots,
                                     f_builds, f_db):
        for bc in self.b4_bc:
            bc.status = StatusEnum("succeeded")
            bc.ended_on = time.time()
        self.u1.admin = False

        self.db.session.add_all(self.b4_bc)
        self.db.session.add(self.b4)
        self.db.session.add(self.u1)
        self.db.session.commit()
        with pytest.raises(InsufficientRightsException):
            BuildsLogic.delete_build(self.u1, self.b4)

        self.b1_bc[0].status = StatusEnum("running")
        self.db.session.add(self.b1_bc[0])
        self.db.session.commit()
        with pytest.raises(ActionInProgressException):
            BuildsLogic.delete_build(self.u1, self.b1)

        self.copr_persistent = models.Copr(name=u"persistent_copr",
                                           user=self.u2,
                                           persistent=True)
        self.copr_dir = models.CoprDir(name="persistent_copr",
                                       main=True,
                                       copr=self.copr_persistent)
        self.build_persistent = models.Build(copr=self.copr_persistent,
                                             copr_dir=self.copr_dir,
                                             package=self.p2,
                                             user=self.u2,
                                             submitted_on=100)
        with pytest.raises(InsufficientRightsException):
            BuildsLogic.delete_build(self.u2, self.build_persistent)
Ejemplo n.º 6
0
    def f_build_few_chroots(self):
        """
            Requires fixture: f_mock_chroots_many
        """
        self.b_few_chroots = models.Build(
            id=2345,
            copr=self.c1,
            user=self.u1,
            submitted_on=50,
            pkgs="http://example.com/copr-keygen-1.58-1.fc20.src.rpm",
            pkg_version="1.58")

        self.db.session.add(self.b_few_chroots)
        self.status_by_chroot = {
            'epel-5-i386': 0,
            'fedora-20-i386': 1,
            'fedora-20-x86_64': 1,
            'fedora-21-i386': 1,
            'fedora-21-x86_64': 4
        }

        for chroot in self.b_few_chroots.copr.active_chroots:
            if chroot.name in self.status_by_chroot:
                buildchroot = models.BuildChroot(
                    build=self.b_few_chroots,
                    mock_chroot=chroot,
                    status=self.status_by_chroot[chroot.name],
                    git_hash="12345",
                )
                self.db.session.add(buildchroot)

        self.db.session.add(self.b_few_chroots)
Ejemplo n.º 7
0
    def add(cls,
            user,
            pkgs,
            copr,
            repos=None,
            chroots=None,
            memory_reqs=None,
            timeout=None,
            enable_net=True):
        if chroots is None:
            chroots = []
        coprs_logic.CoprsLogic.raise_if_unfinished_blocking_action(
            user, copr,
            "Can't build while there is an operation in progress: {action}")
        users_logic.UsersLogic.raise_if_cant_build_in_copr(
            user, copr, "You don't have permissions to build in this copr.")

        if not repos:
            repos = copr.repos

        if " " in pkgs or "\n" in pkgs or "\t" in pkgs or pkgs.strip() != pkgs:
            raise exceptions.MalformedArgumentException(
                "Trying to create a build using src_pkg "
                "with bad characters. Forgot to split?")

        build = models.Build(
            user=user,
            pkgs=pkgs,
            copr=copr,
            repos=repos,
            submitted_on=int(time.time()),
            enable_net=bool(enable_net),
        )

        if memory_reqs:
            build.memory_reqs = memory_reqs

        if timeout:
            build.timeout = timeout or DEFAULT_BUILD_TIMEOUT

        db.session.add(build)

        # add BuildChroot object for each active (or selected) chroot
        # this copr is assigned to
        if not chroots:
            chroots = copr.active_chroots

        for chroot in chroots:
            buildchroot = models.BuildChroot(build=build, mock_chroot=chroot)

            db.session.add(buildchroot)

        return build
Ejemplo n.º 8
0
    def f_pr_build(self, f_mock_chroots, f_builds, f_pr_dir):
        self.b_pr = models.Build(
            copr=self.c1, copr_dir=self.c4_dir, package=self.p1,
            user=self.u1, submitted_on=50, srpm_url="http://somesrpm",
            source_status=StatusEnum("succeeded"), result_dir='0000PR')

        self.bc_pr = models.BuildChroot(
            build=self.b_pr,
            mock_chroot=self.mc2,
            status=StatusEnum("succeeded"),
            git_hash="deadbeef",
            result_dir='0000PR-pr-package',
        )

        self.db.session.add_all([self.b_pr, self.bc_pr])
Ejemplo n.º 9
0
    def rebuild_package(cls,
                        package,
                        source_dict_update={},
                        copr_dir=None,
                        update_callback=None,
                        scm_object_type=None,
                        scm_object_id=None,
                        scm_object_url=None,
                        submitted_by=None):

        source_dict = package.source_json_dict
        source_dict.update(source_dict_update)
        source_json = json.dumps(source_dict)

        if not copr_dir:
            copr_dir = package.copr.main_dir

        build = models.Build(
            user=None,
            pkgs=None,
            package=package,
            copr=package.copr,
            repos=package.copr.repos,
            source_status=StatusEnum("pending"),
            source_type=package.source_type,
            source_json=source_json,
            submitted_on=int(time.time()),
            enable_net=package.copr.build_enable_net,
            timeout=DEFAULT_BUILD_TIMEOUT,
            copr_dir=copr_dir,
            update_callback=update_callback,
            scm_object_type=scm_object_type,
            scm_object_id=scm_object_id,
            scm_object_url=scm_object_url,
            submitted_by=submitted_by,
        )
        db.session.add(build)

        status = StatusEnum("waiting")
        for chroot in package.chroots:
            buildchroot = models.BuildChroot(build=build,
                                             status=status,
                                             mock_chroot=chroot,
                                             git_hash=None)
            db.session.add(buildchroot)

        cls.process_update_callback(build)
        return build
Ejemplo n.º 10
0
    def f_build_many_chroots(self):
        """
            Requires: f_mock_chroots_many
        """
        self.b_many_chroots = models.Build(
            id=12347,
            copr=self.c1,
            copr_dir=self.c1_dir,
            user=self.u1,
            submitted_on=50,
            pkgs="http://example.com/copr-keygen-1.58-1.fc20.src.rpm",
            pkg_version="1.58"
        )

        self.db.session.add(self.b_many_chroots)
        self.status_by_chroot = {
            'epel-5-i386': 0,
            'epel-5-x86_64': 1,
            'epel-6-i386': 0,
            'epel-6-x86_64': 3,
            'epel-7-x86_64': 4,
            'fedora-18-x86_64': 5,
            'fedora-19-i386': 5,
            'fedora-19-x86_64': 6,
            'fedora-20-i386': 2,
            'fedora-20-x86_64': 3,
            'fedora-21-i386': 0,
            'fedora-21-x86_64': 0,
            'fedora-22-i386': 1,
            'fedora-22-x86_64': 1,
            'fedora-23-i386': 1,
            'fedora-23-x86_64': 4,
        }

        for chroot in self.b_many_chroots.copr.active_chroots:
            buildchroot = models.BuildChroot(
                build=self.b_many_chroots,
                mock_chroot=chroot,
                status=self.status_by_chroot[chroot.name],
                git_hash="12345",
                result_dir='bar',
            )
            self.db.session.add(buildchroot)

        self.db.session.add(self.b_many_chroots)
Ejemplo n.º 11
0
 def clone_build(build):
     other = models.Build(
         pkgs=build.pkgs,
         built_packages=build.built_packages,
         pkg_version=build.pkg_version,
         canceled=build.canceled,
         repos=build.repos,
         submitted_on=build.submitted_on,
         started_on=build.started_on,
         ended_on=build.ended_on,
         results=build.results,
         memory_reqs=build.memory_reqs,
         timeout=build.timeout,
         enable_net=build.enable_net,
         user=build.user,
         copr=build.copr,
     )
     return other
Ejemplo n.º 12
0
    def test_copr_build_basic_build_repeat(
            self, f_users, f_coprs, f_mock_chroots_many, f_db):
        self.b_few_chroots = models.Build(
            id=2345,
            copr=self.c1,
            copr_dir=self.c1_dir,
            user=self.u1,
            submitted_on=50,
            pkgs="http://example.com/copr-keygen-1.58-1.fc20.src.rpm",
            pkg_version="1.58"
        )

        self.db.session.add(self.b_few_chroots)
        self.status_by_chroot = {
            'epel-5-i386': 0,
            'fedora-20-i386': 1,
            'fedora-20-x86_64': 1,
            'fedora-21-i386': 1,
            'fedora-21-x86_64': 4
        }

        for chroot in self.b_few_chroots.copr.active_chroots:
            if chroot.name in self.status_by_chroot:
                buildchroot = models.BuildChroot(
                    build=self.b_few_chroots,
                    mock_chroot=chroot,
                    status=self.status_by_chroot[chroot.name])
                self.db.session.add(buildchroot)

        self.db.session.add_all([self.u1, self.c1, self.b_few_chroots])
        self.db.session.commit()

        r = self.test_client.post(
            "/coprs/{0}/{1}/repeat_build/{2}/"
            .format(self.u1.name, self.c1.name, self.b_few_chroots.id),
            data={},
            follow_redirects=True)

        assert r.status_code == 200
        # no longer using URL
        #assert self.b_few_chroots.pkgs in r.data
        assert "Resubmit build {}".format(self.b_few_chroots.id).encode("utf-8") in r.data
Ejemplo n.º 13
0
    def f_build_many_chroots(self):
        self.b_many_chroots = models.Build(
            id=12347,
            copr=self.c1, user=self.u1,
            submitted_on=50, started_on=139086644000,
            pkgs="http://example.com/copr-keygen-1.58-1.fc20.src.rpm",
            pkg_version="1.58"
        )

        self.db.session.add(self.b_many_chroots)
        self.status_by_chroot = {
            'epel-5-i386': 0,
            'epel-5-x86_64': 1,
            'epel-6-i386': 0,
            'epel-6-x86_64': 3,
            'epel-7-x86_64': 4,
            'fedora-17-i386': 5,
            'fedora-17-x86_64': 6,
            'fedora-18-i386': 2,
            'fedora-18-x86_64': 3,
            'fedora-19-i386': 0,
            'fedora-19-x86_64': 0,
            'fedora-20-i386': 1,
            'fedora-20-x86_64': 1,
            'fedora-21-i386': 1,
            'fedora-21-x86_64': 4
        }

        for chroot in self.b_many_chroots.copr.active_chroots:
            buildchroot = models.BuildChroot(
                build=self.b_many_chroots,
                mock_chroot=chroot,
                status=self.status_by_chroot[chroot.name])
            self.db.session.add(buildchroot)

        self.db.session.add(self.b_many_chroots)
Ejemplo n.º 14
0
 def copy_package(self, package):
     build = package.last_build(
         successful=True) or package.last_build() or models.Build()
     new = self.create_object(models.Package, package)
     new.old_status = build.status
     self.dstdb.session.add(new)
Ejemplo n.º 15
0
    def add(cls,
            user,
            pkgs,
            copr,
            source_type=None,
            source_json=None,
            repos=None,
            chroots=None,
            timeout=None,
            enable_net=True,
            git_hashes=None,
            skip_import=False):
        if chroots is None:
            chroots = []

        coprs_logic.CoprsLogic.raise_if_unfinished_blocking_action(
            copr,
            "Can't build while there is an operation in progress: {action}")
        users_logic.UsersLogic.raise_if_cant_build_in_copr(
            user, copr, "You don't have permissions to build in this copr.")

        if not repos:
            repos = copr.repos

        # todo: eliminate pkgs and this check
        if " " in pkgs or "\n" in pkgs or "\t" in pkgs or pkgs.strip() != pkgs:
            raise exceptions.MalformedArgumentException(
                "Trying to create a build using src_pkg "
                "with bad characters. Forgot to split?")

        # just temporary to keep compatibility
        if not source_type or not source_json:
            source_type = helpers.BuildSourceEnum("srpm_link")
            source_json = json.dumps({"url": pkgs})

        build = models.Build(
            user=user,
            pkgs=pkgs,
            copr=copr,
            repos=repos,
            source_type=source_type,
            source_json=source_json,
            submitted_on=int(time.time()),
            enable_net=bool(enable_net),
        )

        if timeout:
            build.timeout = timeout or DEFAULT_BUILD_TIMEOUT

        db.session.add(build)

        # add BuildChroot object for each active (or selected) chroot
        # this copr is assigned to
        if not chroots:
            chroots = copr.active_chroots

        status = helpers.StatusEnum("importing")

        if skip_import:
            status = StatusEnum("pending")

        for chroot in chroots:
            git_hash = None
            if git_hashes:
                git_hash = git_hashes.get(chroot.name)
            buildchroot = models.BuildChroot(build=build,
                                             status=status,
                                             mock_chroot=chroot,
                                             git_hash=git_hash)

            db.session.add(buildchroot)

        return build
Ejemplo n.º 16
0
    def add(cls, user, pkgs, copr, source_type=None, source_json=None,
            repos=None, chroots=None, timeout=None, enable_net=True,
            git_hashes=None, skip_import=False, background=False, batch=None,
            srpm_url=None, copr_dirname=None):

        if chroots is None:
            chroots = []

        coprs_logic.CoprsLogic.raise_if_unfinished_blocking_action(
            copr, "Can't build while there is an operation in progress: {action}")
        users_logic.UsersLogic.raise_if_cant_build_in_copr(
            user, copr,
            "You don't have permissions to build in this copr.")

        if not repos:
            repos = copr.repos

        # todo: eliminate pkgs and this check
        if pkgs and (" " in pkgs or "\n" in pkgs or "\t" in pkgs or pkgs.strip() != pkgs):
            raise MalformedArgumentException("Trying to create a build using src_pkg "
                                                        "with bad characters. Forgot to split?")

        # just temporary to keep compatibility
        if not source_type or not source_json:
            source_type = helpers.BuildSourceEnum("link")
            source_json = json.dumps({"url":pkgs})

        if skip_import and srpm_url:
            chroot_status = StatusEnum("pending")
            source_status = StatusEnum("succeeded")
        else:
            chroot_status = StatusEnum("waiting")
            source_status = StatusEnum("pending")

        copr_dir = None
        if copr_dirname:
            if not copr_dirname.startswith(copr.name+':') and copr_dirname != copr.name:
                raise MalformedArgumentException("Copr dirname not starting with copr name.")
            copr_dir = coprs_logic.CoprDirsLogic.get_or_create(copr, copr_dirname)

        build = models.Build(
            user=user,
            pkgs=pkgs,
            copr=copr,
            repos=repos,
            source_type=source_type,
            source_json=source_json,
            source_status=source_status,
            submitted_on=int(time.time()),
            enable_net=bool(enable_net),
            is_background=bool(background),
            batch=batch,
            srpm_url=srpm_url,
            copr_dir=copr_dir,
        )

        if timeout:
            build.timeout = timeout or DEFAULT_BUILD_TIMEOUT

        db.session.add(build)

        for chroot in chroots:
            # Chroots were explicitly set per-build.
            git_hash = None
            if git_hashes:
                git_hash = git_hashes.get(chroot.name)
            buildchroot = models.BuildChroot(
                build=build,
                status=chroot_status,
                mock_chroot=chroot,
                git_hash=git_hash,
            )
            db.session.add(buildchroot)

        return build
Ejemplo n.º 17
0
    def f_fork_prepare(self, f_coprs, f_mock_chroots, f_builds):

        self.p4 = models.Package(
            copr=self.c2, copr_dir=self.c2_dir, name="hello-world", source_type=0)
        self.b5 = models.Build(
            copr=self.c2, copr_dir=self.c2_dir, package=self.p4,
            user=self.u1, submitted_on=50, srpm_url="http://somesrpm",
            source_status=StatusEnum("succeeded"), result_dir='00000005-hello-world')
        self.b6 = models.Build(
            copr=self.c2, copr_dir=self.c2_dir, package=self.p4,
            user=self.u1, submitted_on=10, srpm_url="http://somesrpm",
            source_status=StatusEnum("failed"), result_dir='00000006-hello-world',
            source_json='{}')
        self.b7 = models.Build(
            copr=self.c2, copr_dir=self.c2_dir, package=self.p2,
            user=self.u1, submitted_on=10, srpm_url="http://somesrpm",
            source_status=StatusEnum("succeeded"), result_dir='00000007-whatsupthere-world')
        self.b8 = models.Build(
            copr=self.c2, copr_dir=self.c2_dir, package=self.p2,
            user=self.u1, submitted_on=100, srpm_url="http://somesrpm",
            source_status=StatusEnum("succeeded"), result_dir='00000008-whatsupthere-world')

        self.basic_builds = [self.b5, self.b6, self.b7, self.b8]
        self.b5_bc = []
        self.b6_bc = []
        self.b7_bc = []
        self.b8_bc = []
        self.db.session.flush()

        for build, build_chroots in zip(
                [self.b5, self.b6, self.b7, self.b8],
                [self.b5_bc, self.b6_bc, self.b7_bc, self.b8_bc]):

            status = StatusEnum("succeeded")
            for chroot in build.copr.active_chroots:
                buildchroot = models.BuildChroot(
                    build=build,
                    mock_chroot=chroot,
                    status=status,
                    git_hash="12345",
                    result_dir="{}-{}".format(build.id, build.package.name),
                )
                build_chroots.append(buildchroot)
                self.db.session.add(buildchroot)
        self.db.session.add_all([self.b5, self.b6, self.b7, self.b8])

        self.p5 = models.Package(
            copr=self.c2, copr_dir=self.c2_dir, name="new-package", source_type=0)
        self.b9 = models.Build(
            copr=self.c2, copr_dir=self.c2_dir, package=self.p5,
            user=self.u1, submitted_on=100, srpm_url="http://somesrpm",
            source_status=StatusEnum("succeeded"), result_dir='00000009-new-package')
        self.b10 = models.Build(
            copr=self.c2, copr_dir=self.c2_dir, package=self.p5,
            user=self.u1, submitted_on=100, srpm_url="http://somesrpm",
            source_status=StatusEnum("failed"), result_dir='00000010-new-package')
        self.b11 = models.Build(
            copr=self.c2, copr_dir=self.c2_dir, package=self.p5,
            user=self.u1, submitted_on=100, srpm_url="http://somesrpm",
            source_status=StatusEnum("failed"), result_dir='00000011-new-package')

        self.b9_bc = []
        self.b10_bc = []
        self.b11_bc = []
        self.db.session.flush()

        bc_status = {self.b9: {self.mc2: StatusEnum("succeeded"),
                               self.mc3: StatusEnum("succeeded")},
                     self.b10: {self.mc2: StatusEnum("forked"),
                                self.mc3: StatusEnum("failed")},
                     self.b11: {self.mc2: StatusEnum("failed"),
                                self.mc3: StatusEnum("succeeded")}}

        for build, build_chroots in zip(
                [self.b9, self.b10, self.b11],
                [self.b9_bc, self.b10_bc, self.b11_bc]):

            for chroot in build.copr.active_chroots:
                buildchroot = models.BuildChroot(
                    build=build,
                    mock_chroot=chroot,
                    status=bc_status[build][chroot],
                    git_hash="12345",
                    result_dir="{}-{}".format(build.id, build.package.name),
                )
                build_chroots.append(buildchroot)
                self.db.session.add(buildchroot)
        self.db.session.add_all([self.b9, self.b10, self.b11])