async def test_rpc_amqp_client_returns_an_error(event_loop):
    app = Application(config=FakeConfig(), loop=event_loop)
    register_worker = FakeRegisterMicroserviceWorker(app)
    extension = AmqpExtension(app)
    extension.register_worker(register_worker)

    await extension.init(event_loop)

    client = RpcAmqpClient(app=app,
                           routing_key=REQUEST_QUEUE,
                           request_exchange=REQUEST_EXCHANGE,
                           response_queue='',
                           response_exchange=RESPONSE_EXCHANGE_NAME)
    response = await client.send(payload={})

    assert Response.ERROR_FIELD_NAME in response.keys()
    assert Response.ERROR_TYPE_FIELD_NAME in response[
        Response.ERROR_FIELD_NAME].keys()
    assert response[Response.ERROR_FIELD_NAME][
        Response.ERROR_TYPE_FIELD_NAME] == VALIDATION_ERROR  # NOQA

    assert Response.ERROR_DETAILS_FIELD_NAME in response[
        Response.ERROR_FIELD_NAME].keys()
    assert response[Response.ERROR_FIELD_NAME][
        Response.ERROR_DETAILS_FIELD_NAME] == VALIDATION_ERROR_DECR  # NOQA

    assert Response.EVENT_FIELD_NAME in response.keys()
    assert response[Response.EVENT_FIELD_NAME] is None

    await extension.deinit(event_loop)
async def test_rpc_amqp_client_returns_ok_with_custom_event_loop(event_loop):
    app = Application(config=FakeConfig(), loop=event_loop)
    register_worker = FakeRegisterMicroserviceWorker(app)
    extension = AmqpExtension(app)
    extension.register_worker(register_worker)

    await extension.init(event_loop)

    client = RpcAmqpClient(app=app,
                           routing_key=REQUEST_QUEUE,
                           request_exchange=REQUEST_EXCHANGE,
                           response_queue='',
                           response_exchange=RESPONSE_EXCHANGE_NAME,
                           loop=event_loop)
    response = await client.send(payload={
        'name': 'microservice',
        'version': '1.0.0'
    })

    assert Response.CONTENT_FIELD_NAME in response.keys()
    assert response[Response.CONTENT_FIELD_NAME] == 'OK'

    assert Response.EVENT_FIELD_NAME in response.keys()
    assert response[Response.EVENT_FIELD_NAME] is None

    await extension.deinit(event_loop)
async def test_microservice_has_been_registered_successfully(event_loop):
    app = Application(config=FakeConfig(), loop=event_loop)
    register_worker = FakeRegisterMicroserviceWorker(app)
    extension = AmqpExtension(app)
    extension.register_worker(register_worker)

    await extension.init(event_loop)

    instance = BaseRegisterWorker(app)
    instance.REQUEST_QUEUE_NAME = REQUEST_QUEUE
    instance.REQUEST_EXCHANGE_NAME = REQUEST_EXCHANGE
    instance.RESPONSE_EXCHANGE_NAME = RESPONSE_EXCHANGE_NAME

    with mock.patch(
            target=
            'sage_utils.amqp.workers.BaseRegisterWorker.get_microservice_data',
            side_effect=valid_microservice_data):
        result = await instance.run()
        assert result is None

    await extension.deinit(event_loop)
示例#4
0
async def test_extension_init_with_workers(event_loop):
    app = Application(config=FakeConfig())
    amqp_worker = CustomWorker(app)
    extension = AmqpExtension(app)
    extension.register_worker(amqp_worker)

    await extension.init(event_loop)
    assert 'extensions' in app.__dict__
    assert isinstance(app.extensions, dict)
    assert len(app.extensions.keys()) == 1
    assert extension.extension_name in app.extensions.keys()
    assert app.extensions[extension.extension_name] == extension
    assert len(extension.active_tasks) == 1

    await asyncio.sleep(0.1)

    await extension.deinit(event_loop)
    assert 'extensions' in app.__dict__
    assert extension.extension_name not in app.extensions.keys()
    assert getattr(app, AmqpExtension.app_attribute) is None
    assert len(extension.active_tasks) == 1
async def test_register_worker_raises_an_error(event_loop):
    app = Application(config=FakeConfig(), loop=event_loop)
    register_worker = FakeRegisterMicroserviceWorker(app)
    extension = AmqpExtension(app)
    extension.register_worker(register_worker)

    await extension.init(event_loop)

    instance = BaseRegisterWorker(app)
    instance.REQUEST_QUEUE_NAME = 'invalid.queue.name'
    instance.REQUEST_EXCHANGE_NAME = 'some.request.exchange'
    instance.RESPONSE_EXCHANGE_NAME = 'some.response.exchange'
    instance.RETRY_TIMEOUT = 0.1
    instance.MAX_RETRIES = 1

    with mock.patch(
            target=
            'sage_utils.amqp.workers.BaseRegisterWorker.get_microservice_data',
            side_effect=valid_microservice_data):
        with pytest.raises(ConnectionError):
            await instance.run()

    await extension.deinit(event_loop)
def test_default_implementation_raises_an_error_when_getting_data():
    with pytest.raises(NotImplementedError):
        app = Application(config=FakeConfig())
        instance = BaseRegisterWorker(app)
        instance.get_microservice_data(app)