예제 #1
0
    def cleanup_packages_testing_arch(self, repo_type):
        self.assign_release_to_builds_testing(repo_type)

        # add package and lob
        pkg = Package()
        pkg.build = self.db.session.query(Build).first()
        pkg.arch = self.db.session.query(Arch).first()
        pkg.name = "pkg-test"
        self.db.session.add(pkg)
        self.db.session.flush()

        config["storage.lobdir"] = tempfile.mkdtemp(prefix="faf")
        sample_rpm = glob.glob("sample_rpms/sample*.rpm")[0]
        with open(sample_rpm, mode='rb') as sample:
            pkg.save_lob("package", sample, truncate=True)
        self.assertTrue(pkg.has_lob("package"))

        init_bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        self.assertEqual(
            self.call_action("cleanup-packages", {
                "arch": "noarch",
            }), 0)

        bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        self.assertEqual(bosra, init_bosra)

        self.assertEqual(
            self.call_action("cleanup-packages", {
                "arch": "x86_64",
            }), 0)

        bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        self.assertEqual(bosra, init_bosra - 2)

        self.assertFalse(pkg.has_lob("package"))
예제 #2
0
파일: test_actions.py 프로젝트: abrt/faf
    def cleanup_packages_testing(self, repo_type):
        self.assign_release_to_builds_testing(repo_type)

        # add package and lob
        pkg = Package()
        pkg.build = self.db.session.query(Build).first()
        pkg.arch = self.db.session.query(Arch).first()
        pkg.name = "pkg-test"
        self.db.session.add(pkg)
        self.db.session.flush()

        config["storage.lobdir"] = "/tmp/faf_test_data/lob"
        sample_rpm = glob.glob("sample_rpms/sample*.rpm")[0]
        with open(sample_rpm, mode='rb') as sample:
            pkg.save_lob("package", sample, truncate=True)
        self.assertTrue(pkg.has_lob("package"))

        init_bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        self.assertEqual(self.call_action_ordered_args("cleanup-packages", [
            "Fedora", # OPSYS
            "24", # RELEASE
        ]), 0)

        bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        self.assertEqual(bosra, init_bosra - 2)

        self.assertFalse(pkg.has_lob("package"))
예제 #3
0
    def cleanup_packages_testing(self, repo_type):
        self.assign_release_to_builds_testing(repo_type)

        # add package and lob
        pkg = Package()
        pkg.build = self.db.session.query(Build).first()
        pkg.arch = self.db.session.query(Arch).first()
        pkg.name = "pkg-test"
        self.db.session.add(pkg)
        self.db.session.flush()

        config["storage.lobdir"] = "/tmp/faf_test_data/lob"
        sample_rpm = glob.glob("sample_rpms/sample*.rpm")[0]
        with open(sample_rpm, mode='rb') as sample:
            pkg.save_lob("package", sample, truncate=True)
        self.assertTrue(pkg.has_lob("package"))

        init_bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        self.assertEqual(
            self.call_action_ordered_args(
                "cleanup-packages",
                [
                    "Fedora",  # OPSYS
                    "24",  # RELEASE
                ]),
            0)

        bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        self.assertEqual(bosra, init_bosra - 2)

        self.assertFalse(pkg.has_lob("package"))
예제 #4
0
    def test_store_rpm_deps(self):
        """
        """

        # add required stuff to db
        arch = Arch()
        arch.name = "noarch"
        self.db.session.add(arch)

        build = Build()
        build.base_package_name = "sample"
        build.version = "1"
        build.release = "1"
        build.epoch = "0"

        self.db.session.add(build)

        pkg = Package()
        pkg.name = "sample"
        pkg.pkgtype = "rpm"
        pkg.arch = arch
        pkg.build = build

        self.db.session.add(pkg)
        self.db.session.flush()

        # save sample rpm
        sample_rpm = glob.glob("sample_rpms/sample*.rpm")[0]
        with open(sample_rpm, mode='rb') as sample:
            pkg.save_lob("package", sample, truncate=True)

        # get dependencies
        res = store_rpm_deps(self.db, pkg, nogpgcheck=True)
        self.assertIs(res, True)

        expected_deps = [
            ("PROVIDES", "sample", 8),
            ("PROVIDES", "/sample", 0),
            ("PROVIDES", "nothing-new", 0),
            (
                "REQUIRES",
                "nothing",
                0,
            ),
            (
                "CONFLICTS",
                "surprisingly-nothing",
                0,
            ),
        ]

        found_deps = []

        for dep in self.db.session.query(PackageDependency).all():
            found_deps.append((dep.type, dep.name, dep.flags))

        for dep in expected_deps:
            self.assertIn(dep, found_deps)
예제 #5
0
    def cleanup_unassigned_testing(self, repo_type):
        self.assign_release_to_builds_testing(repo_type)

        # add package and lob that will not be deleted
        pkg_stay = Package()
        pkg_stay.build = self.db.session.query(Build).first()
        pkg_stay.arch = self.db.session.query(Arch).first()
        pkg_stay.name = "pkg-test-stay"
        self.db.session.add(pkg_stay)
        self.db.session.flush()

        config["storage.lobdir"] = tempfile.mkdtemp(prefix="faf")

        sample_rpm = glob.glob("sample_rpms/sample*.rpm")[0]
        with open(sample_rpm, mode='rb') as sample:
            pkg_stay.save_lob("package", sample, truncate=True)
        self.assertTrue(pkg_stay.has_lob("package"))

        # add build and package and lob that will be deleted
        build = Build()
        build.base_package_name = "build_unassigned"
        build.epoch = 0
        build.version = "1.2.3"
        build.release = "20.fc23"
        self.db.session.add(build)

        pkg_del = Package()
        pkg_del.build = build
        pkg_del.arch = self.db.session.query(Arch).first()
        pkg_del.name = "pkg-test-del"
        self.db.session.add(pkg_del)

        self.db.session.flush()

        sample_rpm = glob.glob("sample_rpms/sample*.rpm")[0]
        with open(sample_rpm, mode='rb') as sample:
            pkg_del.save_lob("package", sample, truncate=True)
        self.assertTrue(pkg_del.has_lob("package"))

        init_bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        self.assertEqual(
            self.call_action_ordered_args("cleanup-unassigned", ["--force"]),
            0)

        bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        self.assertEqual(bosra, init_bosra)

        self.assertFalse(pkg_del.has_lob("package"))
        self.assertTrue(pkg_stay.has_lob("package"))
예제 #6
0
파일: test_actions.py 프로젝트: abrt/faf
    def cleanup_unassigned_testing(self, repo_type):
        self.assign_release_to_builds_testing(repo_type)

        # add package and lob that will not be deleted
        pkg_stay = Package()
        pkg_stay.build = self.db.session.query(Build).first()
        pkg_stay.arch = self.db.session.query(Arch).first()
        pkg_stay.name = "pkg-test-stay"
        self.db.session.add(pkg_stay)
        self.db.session.flush()

        config["storage.lobdir"] = tempfile.mkdtemp(prefix="faf")

        sample_rpm = glob.glob("sample_rpms/sample*.rpm")[0]
        with open(sample_rpm, mode='rb') as sample:
            pkg_stay.save_lob("package", sample, truncate=True)
        self.assertTrue(pkg_stay.has_lob("package"))

        # add build and package and lob that will be deleted
        build = Build()
        build.base_package_name = "build_unassigned"
        build.epoch = 0
        build.version = "1.2.3"
        build.release = "20.fc23"
        self.db.session.add(build)

        pkg_del = Package()
        pkg_del.build = build
        pkg_del.arch = self.db.session.query(Arch).first()
        pkg_del.name = "pkg-test-del"
        self.db.session.add(pkg_del)

        self.db.session.flush()

        sample_rpm = glob.glob("sample_rpms/sample*.rpm")[0]
        with open(sample_rpm, mode='rb') as sample:
            pkg_del.save_lob("package", sample, truncate=True)
        self.assertTrue(pkg_del.has_lob("package"))

        init_bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        self.assertEqual(self.call_action_ordered_args("cleanup-unassigned", [
            "--force"
        ]), 0)

        bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        self.assertEqual(bosra, init_bosra)

        self.assertFalse(pkg_del.has_lob("package"))
        self.assertTrue(pkg_stay.has_lob("package"))
예제 #7
0
    def releasedel_testing(self, repo_type):
        self.assertEqual(
            self.call_action("releasedel", {
                "opsys": "fedora",
                "opsys-release": "1337",
            }), 1)

        # add release f24 and assign two builds
        self.assign_release_to_builds_testing(repo_type)

        # assign sample_repo to f24 release (sample_repo comes from ^^^)
        self.assertEqual(
            self.call_action_ordered_args(
                "repoassign",
                [
                    "sample_repo",  # NAME
                    "Fedora 24",  # OPSYS
                    "x86_64",  # ARCH
                ]),
            0)

        tracker = Bugtracker(name="fedora-bugzilla")
        self.db.session.add(tracker)

        self.save_report('ureport_f20')
        self.save_report('ureport_core')
        self.call_action("create-problems")

        bzuser = BzUser(name="Fake user",
                        email="*****@*****.**",
                        real_name="Fake name",
                        can_login=False)

        self.db.session.add(bzuser)

        bug = BzBug()
        bug.id = 123456
        bug.summary = "Fake bug"
        bug.status = "NEW"
        bug.creation_time = datetime.now()
        bug.last_change_time = datetime.now()
        bug.whiteboard = "empty"
        bug.tracker = tracker
        bug.creator = bzuser
        bug.component = self.comp_faf
        bug.opsysrelease = self.release_20
        bug.private = False

        self.db.session.add(bug)

        # add package and lob that will be deleted
        pkg_del = Package()
        pkg_del.build = self.db.session.query(Build).first()
        pkg_del.arch = self.db.session.query(Arch).first()
        pkg_del.name = "pkg-test-del"
        self.db.session.add(pkg_del)
        self.db.session.flush()

        config["storage.lobdir"] = tempfile.mkdtemp(prefix="faf")

        sample_rpm = glob.glob("sample_rpms/sample*.rpm")[0]
        with open(sample_rpm, mode='rb') as sample:
            pkg_del.save_lob("package", sample, truncate=True)
        self.assertTrue(pkg_del.has_lob("package"))

        # add build and package and lob that will not be deleted
        build = Build()
        build.base_package_name = "build_unassigned"
        build.epoch = 0
        build.version = "1.2.3"
        build.release = "20.fc23"
        self.db.session.add(build)

        pkg_stay = Package()
        pkg_stay.build = build
        pkg_stay.arch = self.db.session.query(Arch).first()
        pkg_stay.name = "pkg-test-stay"
        self.db.session.add(pkg_stay)
        self.db.session.flush()

        sample_rpm = glob.glob("sample_rpms/sample*.rpm")[0]
        with open(sample_rpm, mode='rb') as sample:
            pkg_stay.save_lob("package", sample, truncate=True)
        self.assertTrue(pkg_stay.has_lob("package"))

        init_bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        bosra = self.db.session.query(BuildOpSysReleaseArch).count()

        # delete release f24 with assigned repos and builds with lobs
        self.assertEqual(
            self.call_action("releasedel", {
                "opsys": "fedora",
                "opsys-release": "24",
            }), 0)

        self.assertEqual(bosra, init_bosra)
        self.assertTrue(pkg_stay.has_lob("package"))
        self.assertFalse(pkg_del.has_lob("package"))

        self.assertEqual(self.db.session.query(Report).count(), 2)
        self.assertEqual(self.db.session.query(Problem).count(), 2)

        # delete release f20 with assigned bugs, reports and problems
        self.assertEqual(
            self.call_action("releasedel", {
                "opsys": "fedora",
                "opsys-release": "20",
            }), 0)

        self.assertEqual(self.db.session.query(Report).count(), 0)
        self.assertEqual(self.db.session.query(Problem).count(), 0)

        # attempt to delete deleted release f20
        self.assertEqual(
            self.call_action("releasedel", {
                "opsys": "fedora",
                "opsys-release": "20",
            }), 1)
예제 #8
0
파일: test_rpm.py 프로젝트: mkutlak/faf
    def test_store_rpm_deps(self):
        """
        """

        # add required stuff to db
        arch = Arch()
        arch.name = "noarch"
        self.db.session.add(arch)

        build = Build()
        build.base_package_name = "sample"
        build.version = "1"
        build.release = "1"
        build.epoch = "0"

        self.db.session.add(build)

        pkg = Package()
        pkg.name = "sample"
        pkg.pkgtype = "rpm"
        pkg.arch = arch
        pkg.build = build

        self.db.session.add(pkg)
        self.db.session.flush()

        # save sample rpm
        with open("sample_rpms/sample-1.0-1.fc18.noarch.rpm",
                  mode='rb') as sample:
            pkg.save_lob("package", sample, truncate=True)

        # get dependencies
        store_rpm_deps(self.db, pkg, nogpgcheck=True)

        expected_deps = [
            ("PROVIDES", "sample", 8),
            ("PROVIDES", "/sample", 0),
            ("PROVIDES", "nothing-new", 0),
            (
                "REQUIRES",
                "nothing",
                0,
            ),
            (
                "CONFLICTS",
                "surprisingly-nothing",
                0,
            ),
        ]

        found_deps = []

        for dep in self.db.session.query(PackageDependency).all():
            found_deps.append((dep.type, dep.name, dep.flags))

        for dep in expected_deps:
            self.assertIn(dep, found_deps)

        build = Build()
        build.base_package_name = "sample-broken"
        build.version = "1"
        build.release = "1"
        build.epoch = 0

        self.db.session.add(build)

        pkg = Package()
        pkg.name = "sample-broken"
        pkg.pkgtype = "rpm"
        pkg.arch = arch
        pkg.build = build

        self.db.session.add(pkg)
        self.db.session.flush()

        with open("sample_rpms/sample-broken-1-1.el7.noarch.rpm",
                  mode='rb') as sample:
            pkg.save_lob("package", sample, truncate=True)

        with self.assertRaises(FafError):
            store_rpm_deps(self.db, pkg, nogpgcheck=True)

        # Safety flush
        self.db.session.flush()

        query = self.db.session.query(PackageDependency)
        # Filter out rich RPM dependencies
        dependencies = filter(lambda x: "rpmlib" not in x.name, query.all())

        # The transaction was rolled back and nothing new was added
        self.assertCountEqual(
            map(lambda x: (x.type, x.name, x.flags), dependencies),
            expected_deps)
예제 #9
0
파일: test_actions.py 프로젝트: abrt/faf
    def releasedel_testing(self, repo_type):
        self.assertEqual(self.call_action("releasedel"), 1)
        self.assertEqual(self.call_action("releasedel", {
            "opsys": "FooBarOS",
        }), 1)
        self.assertEqual(self.call_action("releasedel", {
            "opsys": "fedora",
            "opsys-release": "1337",
        }), 1)

        # add release f24 and assign two builds
        self.assign_release_to_builds_testing(repo_type)

        # assign sample_repo to f24 release (sample_repo comes from ^^^)
        self.assertEqual(self.call_action_ordered_args("repoassign", [
            "sample_repo",  # NAME
            "Fedora 24",  # OPSYS
            "x86_64",  # ARCH
        ]), 0)

        tracker = Bugtracker(name="fedora-bugzilla")
        self.db.session.add(tracker)

        self.save_report('ureport_f20')
        self.save_report('ureport_core')
        self.call_action("create-problems")

        bzuser = BzUser(name="Fake user",
                        email="*****@*****.**",
                        real_name="Fake name",
                        can_login=False)

        self.db.session.add(bzuser)

        bug = BzBug()
        bug.id = 123456
        bug.summary = "Fake bug"
        bug.status = "NEW"
        bug.creation_time = datetime.now()
        bug.last_change_time = datetime.now()
        bug.whiteboard = "empty"
        bug.tracker = tracker
        bug.creator = bzuser
        bug.component = self.comp_faf
        bug.opsysrelease = self.release_20
        bug.private = False

        self.db.session.add(bug)

        # add package and lob that will be deleted
        pkg_del = Package()
        pkg_del.build = self.db.session.query(Build).first()
        pkg_del.arch = self.db.session.query(Arch).first()
        pkg_del.name = "pkg-test-del"
        self.db.session.add(pkg_del)
        self.db.session.flush()

        config["storage.lobdir"] = tempfile.mkdtemp(prefix="faf")

        sample_rpm = glob.glob("sample_rpms/sample*.rpm")[0]
        with open(sample_rpm, mode='rb') as sample:
            pkg_del.save_lob("package", sample, truncate=True)
        self.assertTrue(pkg_del.has_lob("package"))

        # add build and package and lob that will not be deleted
        build = Build()
        build.base_package_name = "build_unassigned"
        build.epoch = 0
        build.version = "1.2.3"
        build.release = "20.fc23"
        self.db.session.add(build)

        pkg_stay = Package()
        pkg_stay.build = build
        pkg_stay.arch = self.db.session.query(Arch).first()
        pkg_stay.name = "pkg-test-stay"
        self.db.session.add(pkg_stay)
        self.db.session.flush()

        sample_rpm = glob.glob("sample_rpms/sample*.rpm")[0]
        with open(sample_rpm, mode='rb') as sample:
            pkg_stay.save_lob("package", sample, truncate=True)
        self.assertTrue(pkg_stay.has_lob("package"))

        init_bosra = self.db.session.query(BuildOpSysReleaseArch).count()
        bosra = self.db.session.query(BuildOpSysReleaseArch).count()

        # delete release f24 with assigned repos and builds with lobs
        self.assertEqual(self.call_action("releasedel", {
            "opsys": "fedora",
            "opsys-release": "24",
        }), 0)

        self.assertEqual(bosra, init_bosra)
        self.assertTrue(pkg_stay.has_lob("package"))
        self.assertFalse(pkg_del.has_lob("package"))

        self.assertEqual(self.db.session.query(Report).count(), 2)
        self.assertEqual(self.db.session.query(Problem).count(), 2)

        # delete release f20 with assigned bugs, reports and problems
        self.assertEqual(self.call_action("releasedel", {
            "opsys": "fedora",
            "opsys-release": "20",
        }), 0)

        self.assertEqual(self.db.session.query(Report).count(), 0)
        self.assertEqual(self.db.session.query(Problem).count(), 0)

        # attempt to delete deleted release f20
        self.assertEqual(self.call_action("releasedel", {
            "opsys": "fedora",
            "opsys-release": "20",
        }), 1)
예제 #10
0
파일: test_rpm.py 프로젝트: michalfabik/faf
    def test_store_rpm_provides(self):
        """
        """

        # add required stuff to db
        arch = Arch()
        arch.name = "noarch"
        self.db.session.add(arch)

        build = Build()
        build.base_package_name = "sample"
        build.version = "1"
        build.release = "1"
        build.epoch = "0"

        self.db.session.add(build)

        pkg = Package()
        pkg.name = "sample"
        pkg.pkgtype = "rpm"
        pkg.arch = arch
        pkg.build = build

        self.db.session.add(pkg)
        self.db.session.flush()

        # save sample rpm
        with open("sample_rpms/sample-1.0-1.fc18.noarch.rpm",
                  mode='rb') as sample:
            pkg.save_lob("package", sample, truncate=True)

        # get dependencies
        store_rpm_provides(self.db, pkg, nogpgcheck=True)

        expected_deps = [
            ("PROVIDES", "sample", 8),
            ("PROVIDES", "/sample", 0),
            ("PROVIDES", "nothing-new", 0),
        ]

        found_deps = []

        for dep in self.db.session.query(PackageDependency).all():
            found_deps.append((dep.type, dep.name, dep.flags))

        self.assertCountEqual(found_deps, expected_deps)

        build = Build()
        build.base_package_name = "sample-broken"
        build.version = "1"
        build.release = "1"
        build.epoch = 0

        self.db.session.add(build)

        pkg = Package()
        pkg.name = "sample-broken"
        pkg.pkgtype = "rpm"
        pkg.arch = arch
        pkg.build = build

        self.db.session.add(pkg)
        self.db.session.flush()

        with open("sample_rpms/sample-broken-1-1.fc22.noarch.rpm",
                  mode='rb') as rpm_file:
            pkg.save_lob("package", rpm_file, truncate=True)

        with self.assertLogs(level=logging.WARNING) as captured_logs:
            store_rpm_provides(self.db, pkg, nogpgcheck=True)

        self.assertEqual(captured_logs.output, [
            "WARNING:faf.pyfaf.faf_rpm:Unparsable EVR ‘%{epoch}:1’ of "
            "zabbix in Provides of sample-broken: EVR string "
            "contains a non-numeric epoch: %{epoch}. Skipping"
        ])

        # Safety flush
        self.db.session.flush()

        query = self.db.session.query(PackageDependency)
        # Filter out rich RPM dependencies
        dependencies = filter(lambda x: "rpmlib" not in x.name, query.all())

        # Only provides that were correctly formatted were added
        expected_deps.extend([
            ("PROVIDES", "sample-broken", 8),
            ("PROVIDES", "happiness", 0),
            ("PROVIDES", "joy", 0),
            ("PROVIDES", "love", 0),
        ])

        self.assertCountEqual(
            ((x.type, x.name, x.flags) for x in dependencies), expected_deps)

        build = Build()
        build.base_package_name = "sample-provides-too-long"
        build.version = "1"
        build.release = "1"
        build.epoch = 0

        self.db.session.add(build)

        pkg = Package()
        pkg.name = "sample-provides-too-long"
        pkg.pkgtype = "rpm"
        pkg.arch = arch
        pkg.build = build

        self.db.session.add(pkg)
        self.db.session.flush()

        with open("sample_rpms/sample-provides-too-long-1-1.fc33.noarch.rpm",
                  mode='rb') as rpm_file:
            pkg.save_lob("package", rpm_file, truncate=True)

        with self.assertLogs(level=logging.WARNING) as captured_logs:
            store_rpm_provides(self.db, pkg, nogpgcheck=True)

        self.assertEqual(captured_logs.output, [
            "WARNING:faf.pyfaf.faf_rpm:Provides item in RPM header of "
            "sample-provides-too-long longer than 1024 characters. "
            "Skipping"
        ])

        # Safety flush
        self.db.session.flush()

        query = self.db.session.query(PackageDependency)
        # Filter out rich RPM dependencies
        dependencies = filter(lambda x: "rpmlib" not in x.name, query.all())

        # Only provides that were correctly formatted were added
        expected_deps.extend([
            ("PROVIDES", "sample-provides-too-long", 8),
            ("PROVIDES", "one-thing", 0),
            ("PROVIDES", "another-thing", 0),
            ("PROVIDES", "penultimate-item", 0),
            ("PROVIDES", "the-last-one", 0),
        ])

        self.assertCountEqual(
            ((x.type, x.name, x.flags) for x in dependencies), expected_deps)