Ejemplo n.º 1
0
    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": {}}
Ejemplo n.º 2
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": {}})
Ejemplo n.º 3
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": {}})
Ejemplo n.º 4
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": {}})
Ejemplo n.º 5
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": {}}
Ejemplo n.º 6
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": {},
        }
Ejemplo n.º 7
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)
Ejemplo n.º 8
0
    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()))
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
 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)
Ejemplo n.º 11
0
    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": {}}
Ejemplo n.º 12
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
Ejemplo n.º 13
0
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
Ejemplo n.º 14
0
    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