Exemplo n.º 1
0
 async def test_restart_service__max_restarts(self, *, sup, service):
     sup.log.warning = Mock(0)
     sup._bucket = AsyncContextManagerMock()
     service.restart = AsyncMock()
     service.restart.coro.side_effect = MaxRestartsExceeded()
     await sup.restart_service(service)
     service.restart.coro.assert_called_once_with()
     sup.log.warning.assert_called_once()
Exemplo n.º 2
0
def mock_http_client(*, app, monkeypatch, request) -> ClientSession:
    marker = request.node.get_closest_marker("http_session")
    options = SessionMarker(
        **{
            **{
                "status_code": HTTPStatus.OK,
                "text": b"",
                "json": None,
                "json_iterator": None,
                "max_failures": None,
            },
            **(marker.kwargs or {} if marker else {}),
        })

    def raise_for_status():
        if options.max_failures is not None:
            if session.request.call_count >= options.max_failures:
                return
        if 400 <= options.status_code:
            raise ClientError()

    response = AsyncMock(
        autospec=Response,
        text=AsyncMock(return_value=options.text),
        read=AsyncMock(return_value=options.text),
        json=AsyncMock(
            return_value=options.json,
            side_effect=options.json_iterator,
        ),
        status_code=options.status_code,
        raise_for_status=raise_for_status,
    )
    session = Mock(
        name="http_client",
        autospec=ClientSession,
        request=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        get=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        post=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        put=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        delete=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        patch=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        options=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        head=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
    )
    session.marks = options
    monkeypatch.setattr(app, "_http_client", session)
    return session
Exemplo n.º 3
0
 def _mock_for_start(
     self, service, init_deps=None, tasks=None, children=None, on_async_enter=None
 ):
     service.on_init_dependencies = Mock(return_value=init_deps or [])
     service.add_dependency = Mock()
     service.on_first_start = AsyncMock()
     service.exit_stack = ContextMock()
     service.async_exit_stack = AsyncContextManagerMock(
         side_effect=on_async_enter,
     )
     service.on_start = AsyncMock()
     service._get_tasks = Mock(return_value=tasks or [])
     service._children = children or []
Exemplo n.º 4
0
def mock_http_client(*, app, monkeypatch, request) -> ClientSession:
    marker = request.node.get_closest_marker('http_session')
    options = SessionMarker(
        **{
            **{
                'status_code': HTTPStatus.OK,
                'text': b'',
                'json': None,
                'json_iterator': None,
            },
            **(marker.kwargs or {} if marker else {}),
        })
    response = AsyncMock(
        autospec=Response,
        text=AsyncMock(return_value=options.text),
        json=AsyncMock(
            return_value=options.json,
            side_effect=options.json_iterator,
        ),
        status_code=options.status_code,
    )
    session = Mock(
        name='http_client',
        autospec=ClientSession,
        request=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        get=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        post=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        put=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        delete=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        patch=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        options=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
        head=Mock(return_value=AsyncContextManagerMock(
            return_value=response, ), ),
    )
    session.marks = options
    monkeypatch.setattr(app, '_http_client', session)
    return session
Exemplo n.º 5
0
    async def test_restart_service__replacement(self, *, sup):
        sup._bucket = AsyncContextManagerMock()
        s1 = Mock(name='s1')
        s2 = Mock(name='s2')
        s3 = Mock(name='s3')

        sup._services = [s1, s2, s3]
        sup._index = {s: i for i, s in enumerate(sup._services)}

        s4 = Mock(name='s4')
        s4.supervisor = None
        sup.replacement = AsyncMock()
        sup.replacement.coro.return_value = s4

        await sup.restart_service(s2)

        assert sup._services == [s1, s4, s3]
        assert sup._index[s4] == 1
        assert s2 not in sup._index

        assert s4.supervisor is sup
Exemplo n.º 6
0
 async def test_restart_service(self, *, sup, service):
     service.restart = AsyncMock()
     sup._bucket = AsyncContextManagerMock()
     await sup.restart_service(service)
     service.restart.coro.assert_called_once_with()