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"))
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"))
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"))
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)
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"))
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"))
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)
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)
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)
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)