示例#1
0
def master(package_json):
    from bandersnatch.master import Master

    class FakeReader:
        async def read(self, *args):
            return b""

    class FakeAiohttpClient:
        headers = {"X-PYPI-LAST-SERIAL": "1"}

        async def __aenter__(self):
            return self

        async def __aexit__(self, *args):
            pass

        @property
        def content(self, *args):
            return FakeReader()

        async def json(self, *args):
            return package_json

    master = Master("https://pypi.example.com")
    master.rpc = mock.Mock()
    master.session = asynctest.MagicMock()
    master.session.get = asynctest.MagicMock(return_value=FakeAiohttpClient())
    master.session.request = asynctest.MagicMock(
        return_value=FakeAiohttpClient())
    return master
示例#2
0
def master(package_json: Dict[str, Any]) -> "Master":
    from bandersnatch.master import Master

    class FakeReader:
        async def read(self, *args: Any) -> bytes:
            return b""

    class FakeAiohttpClient:
        headers = {"X-PYPI-LAST-SERIAL": "1"}

        async def __aenter__(self) -> "FakeAiohttpClient":
            return self

        async def __aexit__(self, *args: Any) -> None:
            pass

        @property
        def content(self) -> "FakeReader":
            return FakeReader()

        async def json(self, *args: Any) -> Dict[str, Any]:
            return package_json

    master = Master("https://pypi.example.com")
    master.rpc = mock.Mock()  # type: ignore
    master.session = mock.MagicMock()
    master.session.get = mock.MagicMock(return_value=FakeAiohttpClient())
    master.session.request = mock.MagicMock(return_value=FakeAiohttpClient())
    return master
示例#3
0
def master(package_json: Dict[str, Any]) -> "Master":
    from bandersnatch.master import Master

    class FakeReader:
        async def read(self, *args: Any) -> bytes:
            return b""

    class FakeAiohttpClient:
        headers = {"X-PYPI-LAST-SERIAL": "1"}

        async def __aenter__(self) -> "FakeAiohttpClient":
            return self

        async def __aexit__(self, *args: Any) -> None:
            pass

        @property
        def content(self) -> "FakeReader":
            return FakeReader()

        async def json(self, *args: Any) -> Dict[str, Any]:
            return package_json

    def session_side_effect(*args: Any, **kwargs: Any) -> Any:
        if args[0].startswith("https://not-working.example.com"):
            raise AssertionError("Requested for expected not-working URL")
        else:
            return FakeAiohttpClient()

    master = Master("https://pypi.example.com")
    master.rpc = mock.Mock()  # type: ignore
    master.session = mock.MagicMock()
    master.session.get.side_effect = session_side_effect
    master.session.request.side_effect = session_side_effect
    return master
示例#4
0
def master(requests):
    from bandersnatch.master import Master
    master = Master('https://pypi.example.com')
    master.rpc = mock.Mock()
    master.session = mock.Mock()
    master.session.get = requests
    return master
示例#5
0
def master(requests):
    from bandersnatch.master import Master

    master = Master("https://pypi.example.com")
    master.rpc = mock.Mock()
    master.session = mock.Mock()
    master.session.get = requests
    return master
示例#6
0
async def test_changed_packages_with_changes(master: Master) -> None:
    list_of_package_changes = [
        ("foobar", "1", 0, "added", 17),
        ("baz", "2", 1, "updated", 18),
        ("foobar", "1", 0, "changed", 20),
        # The server usually just hands out monotonous serials in the
        # changelog. This verifies that we don't fail even with garbage input.
        ("foobar", "1", 0, "changed", 19),
    ]
    master.rpc = AsyncMock(return_value=list_of_package_changes)  # type: ignore
    changes = await master.changed_packages(4)
    assert changes == {"baz": 18, "foobar": 20}
示例#7
0
async def test_changed_packages_no_changes(master: Master) -> None:
    master.rpc = asynctest.CoroutineMock(return_value=None)  # type: ignore
    changes = await master.changed_packages(4)
    assert changes == {}
示例#8
0
async def test_all_packages_raises(master: Master) -> None:
    master.rpc = asynctest.CoroutineMock(return_value=[])  # type: ignore
    with pytest.raises(XmlRpcError):
        await master.all_packages()
示例#9
0
async def test_all_packages(master: Master) -> None:
    expected = [["aiohttp", "", "", "", "69"]]
    master.rpc = asynctest.CoroutineMock(return_value=expected)  # type: ignore
    pacakges = await master.all_packages()
    assert expected == pacakges
示例#10
0
def test_rpc_factory():
    master = Master("https://pypi.example.com")
    assert isinstance(master.rpc(), xmlrpc2.client.Client)
示例#11
0
def master():
    from bandersnatch.master import Master

    class FakeReader:
        async def read(self, *args):
            return b""

    class FakeAiohttpClient:
        headers = {"X-PYPI-LAST-SERIAL": "1"}

        async def __aenter__(self):
            return self

        async def __aexit__(self, *args):
            pass

        @property
        def content(self, *args):
            return FakeReader()

        async def json(self, *args):
            return {
                "info": {
                    "name": "foo",
                    "version": "0.1"
                },
                "last_serial": 654_321,
                "releases": {
                    "0.1": [
                        {
                            "url":
                            "https://pypi.example.com/packages/any/f/foo/foo.zip",
                            "filename": "foo.zip",
                            "digests": {
                                "md5":
                                "6bd3ddc295176f4dca196b5eb2c4d858",
                                "sha256":
                                ("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
                                 ),
                            },
                            "md5_digest": "b6bcb391b040c4468262706faf9d3cce",
                        },
                        {
                            "url":
                            "https://pypi.example.com/packages/2.7/f/foo/foo.whl",
                            "filename": "foo.whl",
                            "digests": {
                                "md5":
                                "6bd3ddc295176f4dca196b5eb2c4d858",
                                "sha256":
                                ("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
                                 ),
                            },
                            "md5_digest": "6bd3ddc295176f4dca196b5eb2c4d858",
                        },
                    ]
                },
            }

    master = Master("https://pypi.example.com")
    master.rpc = mock.Mock()
    master.session = asynctest.MagicMock()
    master.session.get = asynctest.MagicMock(return_value=FakeAiohttpClient())
    master.session.request = asynctest.MagicMock(
        return_value=FakeAiohttpClient())
    return master
示例#12
0
def test_rpc_factory():
    master = Master('https://pypi.example.com')
    assert isinstance(master.rpc(), xmlrpc2.client.Client)