def test_latest_releases_ensure_reusable(self) -> None: """ Tests the filter multiple times to ensure no state is preserved and thus is reusable between packages """ mock_config(self.config_contents) mirror = BandersnatchMirror(Path("."), Master(url="https://foo.bar.com")) pkg1 = Package("foo", 1) pkg1._metadata = { "info": { "name": "foo", "version": "2.0.0" }, "releases": { "0.1.1": {}, "0.1.2": {}, "0.1.3": {}, "1.0.0": {}, "1.1.0": {}, "1.2.0": {}, "2.0.0": {}, }, } pkg2 = Package("bar", 1) pkg2._metadata = { "info": { "name": "bar", "version": "0.3.0" }, "releases": { "0.1.0": {}, "0.1.1": {}, "0.1.2": {}, "0.1.3": {}, "0.1.4": {}, "0.1.5": {}, "0.2.0": {}, "0.3.0": {}, }, } pkg1.filter_all_releases(mirror.filters.filter_release_plugins()) pkg2.filter_all_releases(mirror.filters.filter_release_plugins()) assert pkg1.releases == {"1.2.0": {}, "2.0.0": {}} assert pkg2.releases == {"0.2.0": {}, "0.3.0": {}}
def test__filter__matches__release(self) -> None: mock_config("""\ [plugins] enabled = allowlist_release [whitelist] packages = foo==1.2.0 """) mirror = Mirror(Path("."), Master(url="https://foo.bar.com")) pkg = Package("foo", 1, mirror) pkg._metadata = { "info": { "name": "foo" }, "releases": { "1.2.0": {}, "1.2.1": {} }, } pkg._filter_all_releases(mirror.filters.filter_release_plugins()) self.assertEqual(pkg.releases, {"1.2.0": {}})
def test__casing__no__affect(self) -> None: mock_config("""\ [mirror] storage-backend = filesystem workers = 2 [plugins] enabled = allowlist_release [allowlist] packages = Foo<=1.2.0 """) mirror = BandersnatchMirror(Path("."), Master(url="https://foo.bar.com")) pkg = Package("foo", 1) pkg._metadata = { "info": { "name": "foo" }, "releases": { "1.2.0": {}, "1.2.1": {} }, } pkg.filter_all_releases(mirror.filters.filter_release_plugins()) self.assertEqual(pkg.releases, {"1.2.0": {}})
def test__dont__filter__prereleases(self) -> None: mock_config( """\ [plugins] enabled = allowlist_release [allowlist] packages = foo<=1.2.0 """ ) mirror = BandersnatchMirror(Path("."), Master(url="https://foo.bar.com")) pkg = Package("foo", 1) pkg._metadata = { "info": {"name": "foo"}, "releases": { "1.1.0a2": {}, "1.1.1beta1": {}, "1.2.0": {}, "1.2.1": {}, "1.2.2alpha3": {}, "1.2.3rc1": {}, }, } pkg.filter_all_releases(mirror.filters.filter_release_plugins()) self.assertEqual(pkg.releases, {"1.1.0a2": {}, "1.1.1beta1": {}, "1.2.0": {}})
def test_latest_releases_keep_stable(self) -> None: mock_config(self.config_contents) mirror = Mirror(Path("."), Master(url="https://foo.bar.com")) pkg = Package("foo", 1, mirror) pkg._metadata = { "info": { "name": "foo", "version": "2.0.0" }, # stable version "releases": { "1.0.0": {}, "1.1.0": {}, "1.1.1": {}, "1.1.2": {}, "1.1.3": {}, "2.0.0": {}, # <= stable version, keep it "2.0.1b1": {}, "2.0.1b2": {}, # <= most recent, keep it }, } pkg._filter_all_releases(mirror.filters.filter_release_plugins()) assert pkg.releases == {"2.0.1b2": {}, "2.0.0": {}}
def test_latest_releases_uninitialized(self) -> None: mock_config(self.config_contents) mirror = Mirror(Path("."), Master(url="https://foo.bar.com")) pkg = Package("foo", 1, mirror) pkg._metadata = { "info": { "name": "foo", "version": "2.0.0" }, "releases": { "1.0.0": {}, "1.1.0": {}, "1.1.1": {}, "1.1.2": {}, "1.1.3": {}, "2.0.0": {}, }, } pkg._filter_all_releases(mirror.filters.filter_release_plugins()) assert pkg.releases == { "1.0.0": {}, "1.1.0": {}, "1.1.1": {}, "1.1.2": {}, "1.1.3": {}, "2.0.0": {}, }
def test__filter__matches__release(self) -> None: with open(Path(self.tempdir.name) / "requirements.txt", "w") as fh: fh.write( """\ # This is needed for workshop 1 # foo==1.2.0 # via -r requirements.in """ ) mock_config( f"""\ [plugins] enabled = project_requirements project_requirements_pinned [allowlist] requirements_path = {self.tempdir.name} requirements = requirements.txt """ ) mirror = BandersnatchMirror(Path("."), Master(url="https://foo.bar.com")) pkg = Package("foo", 1) pkg._metadata = { "info": {"name": "foo"}, "releases": {"1.2.0": {}, "1.2.1": {}}, } pkg.filter_all_releases(mirror.filters.filter_release_plugins()) self.assertEqual({"1.2.0": {}}, pkg.releases)
def test__filter__size__only(self) -> None: mock_config("""\ [plugins] enabled = size_project_metadata [size_project_metadata] max_package_size = 2K """) mirror = BandersnatchMirror(Path("."), Master(url="https://foo.bar.com")) # Test that under-sized project is allowed pkg = Package("foo", 1) pkg._metadata = { "info": { "name": "foo" }, "releases": { "1.2.0": [{ "size": 1024 }], "1.2.1": {} }, } self.assertTrue( pkg.filter_metadata(mirror.filters.filter_metadata_plugins())) # Test that over-sized project is blocked pkg = Package("foo", 1) pkg._metadata = { "info": { "name": "foo" }, "releases": { "1.2.0": [{ "size": 1024 }], "1.2.1": [{ "size": 1025 }] }, } self.assertFalse( pkg.filter_metadata(mirror.filters.filter_metadata_plugins()))
def setUp_mirror(self) -> None: self.mirror = Mirror(self.mirror_path, Master(url="https://foo.bar.com")) pkg = Package("foobar", 1, self.mirror) pkg._metadata = { "info": { "name": "foobar", "version": "1.0" }, "releases": mock.Mock(), } self.pkgs.append(pkg)
def setUp_mirror(self) -> None: self.master = Master(url="https://foo.bar.com") self.mirror = BandersnatchMirror(self.mirror_path, self.master, self.backend) pkg = Package("foobar", serial=1) pkg._metadata = { "info": { "name": "foobar", "version": "1.0" }, "releases": mock.Mock(), } self.pkgs.append(pkg)
def test_plugin_check_match(self) -> None: mock_config(self.config_contents) mirror = Mirror(Path("."), Master(url="https://foo.bar.com")) pkg = Package("foo", 1, mirror) pkg._metadata = { "info": {"name": "foo", "version": "foo-1.2.0"}, "releases": {"foo-1.2.0rc2": {}, "foo-1.2.0": {}, "foo-1.2.0alpha2": {}}, } pkg._filter_all_releases(mirror.filters.filter_release_plugins()) assert pkg.releases == {"foo-1.2.0": {}}
def package(package_json: dict) -> "Package": from bandersnatch.package import Package pkg = Package(package_json["info"]["name"], serial=11) pkg._metadata = package_json return pkg
def package(package_json: dict, mirror: "Mirror") -> "Package": from bandersnatch.package import Package pkg = Package(package_json["info"]["name"], 0, mirror) pkg._metadata = package_json return pkg
def test_exclude_platform(self) -> None: """ Tests the platform filter for what it will keep and excluded based on the config provided. It is expected to drop all windows, freebsd and macos packages while only dropping linux-armv7l from linux packages """ mock_config(self.config_contents) mirror = Mirror(Path("."), Master(url="https://foo.bar.com")) pkg = Package("foobar", 1, mirror) pkg._metadata = { "info": { "name": "foobar", "version": "1.0" }, "releases": { "1.0": [ { "packagetype": "sdist", "filename": "foobar-1.0-win32.tar.gz", "flag": "KEEP", }, { "packagetype": "bdist_msi", "filename": "foobar-1.0.msi", "flag": "DROP", }, { "packagetype": "bdist_wininst", "filename": "foobar-1.0.exe", "flag": "DROP", }, { "packagetype": "bdist_dmg", "filename": "foobar-1.0.dmg", "flag": "DROP", }, { "packagetype": "bdist_wheel", "filename": "foobar-1.0-win32.zip", "flag": "DROP", }, { "packagetype": "bdist_wheel", "filename": "foobar-1.0-linux.tar.gz", "flag": "KEEP", }, { "packagetype": "bdist_wheel", "filename": "foobar-1.0-manylinux1_i686.whl", "flag": "KEEP", }, { "packagetype": "bdist_wheel", "filename": "foobar-1.0-linux_armv7l.whl", "flag": "DROP", }, { "packagetype": "bdist_wheel", "filename": "foobar-1.0-macosx_10_14_x86_64.whl", "flag": "DROP", }, { "packagetype": "bdist_egg", "filename": "foobar-1.0-win_amd64.zip", "flag": "DROP", }, { "packagetype": "unknown", "filename": "foobar-1.0-unknown", "flag": "KEEP", }, ], "0.1": [ { "packagetype": "sdist", "filename": "foobar-0.1-win32.msi", "flag": "KEEP", }, { "packagetype": "bdist_wheel", "filename": "foobar-0.1-win32.whl", "flag": "DROP", }, ], "0.2": [{ "packagetype": "bdist_egg", "filename": "foobar-0.1-freebsd-6.0-RELEASE-i386.egg", "flag": "DROP", }], }, } # count the files we should keep rv = pkg.releases.values() keep_count = sum(f["flag"] == "KEEP" for r in rv for f in r) pkg._filter_all_releases_files( mirror.filters.filter_release_file_plugins()) # we should have the same keep count and no drop rv = pkg.releases.values() assert sum(f["flag"] == "KEEP" for r in rv for f in r) == keep_count assert sum(f["flag"] == "DROP" for r in rv for f in r) == 0 # the release "0.2" should have been deleted since there is no more file in it assert len(pkg.releases.keys()) == 2