Exemple #1
0
async def test_api_broadcaster(app, m_publish, client):
    await service_status.wait_synchronized(app)
    app['config']['volatile'] = False
    b = broadcaster.Broadcaster(app)
    await b.prepare()
    await b.run()
    assert m_publish.call_count == 2
Exemple #2
0
async def test_broadcast(app, m_publish, client, synchronized):
    app['config']['volatile'] = False
    b = broadcaster.Broadcaster(app)
    await b.prepare()
    await b.run()

    m_publish.assert_has_calls([
        call(app,
             'testcast/history/test_app',
             err=False,
             message={
                 'key': 'test_app',
                 'data': ANY,
             }),
        call(app,
             'testcast/state/test_app',
             err=False,
             retain=True,
             message={
                 'key': 'test_app',
                 'type': 'Spark.state',
                 'data': {
                     'status': ANY,
                     'blocks': ANY,
                     'relations': ANY,
                     'drive_chains': ANY,
                 },
             }),
    ])

    await b.before_shutdown(app)
    assert m_publish.call_count == 3
Exemple #3
0
async def test_error(app, m_api, m_publish, client, connected):
    b = broadcaster.Broadcaster(app)
    await b.prepare()

    m_api.read_all.side_effect = RuntimeError
    with pytest.raises(RuntimeError):
        await b.run()

    m_api.read_all.side_effect = exceptions.ConnectionPaused
    await b.run()  # no throw

    # Error over, resume normal work
    m_api.read_all.side_effect = None
    m_api.read_all.return_value = [{
        'id': 'testey',
        'nid': 1,
        'data': {
            'var': 1
        }
    }, {
        'id': 'testface',
        'nid': 2,
        'data': {
            'val': 2
        }
    }]

    # 2 * only state event
    # 1 * history + state
    await b.run()
    assert m_publish.call_count == 4
Exemple #4
0
async def test_noop_broadcast(app, m_api, m_publish, client, connected):
    """The mock by default emits an empty list. This should not be published to history"""
    b = broadcaster.Broadcaster(app)
    await b.prepare()
    await b.run()
    assert m_api.read_all_logged.call_count == 1
    assert m_api.read_all.call_count == 1
    assert m_publish.call_count == 2
Exemple #5
0
async def test_startup_shutdown(app, client):
    assert broadcaster.get_broadcaster(app)
    b = broadcaster.Broadcaster(app)
    await b.startup(app)
    await b.startup(app)
    await b.shutdown(app)
    await b.startup(app)
    await b.shutdown(app)
Exemple #6
0
async def test_startup_error(app, client, mocker, connected):
    logger_spy = mocker.spy(broadcaster, 'LOGGER')

    del app['config']['broadcast_interval']

    b = broadcaster.Broadcaster(app)

    await b.startup(app)
    await asyncio.sleep(0.01)
    assert logger_spy.error.call_count == 1
    await b.shutdown(app)
Exemple #7
0
async def test_broadcast_unsync(app, m_publish, client, synchronized, mocker):
    m_wait_sync = mocker.patch(TESTED + '.service_status.wait_synchronized',
                               AsyncMock())
    m_wait_sync.return_value = False

    app['config']['volatile'] = False
    b = broadcaster.Broadcaster(app)
    await b.prepare()
    await b.run()

    assert m_wait_sync.call_count == 1
    assert m_publish.call_count == 1
Exemple #8
0
async def test_error(app, m_publish, client, synchronized):
    app['config']['volatile'] = False
    b = broadcaster.Broadcaster(app)
    await b.prepare()

    connection_sim.fget(app).next_error.append(ErrorCode.UNKNOWN_ERROR)
    with pytest.raises(exceptions.CommandException):
        await b.run()

    # Error over, resume normal work
    # 1 * only state event
    # 1 * history + state
    await b.run()
    assert m_publish.call_count == 3
Exemple #9
0
async def test_broadcast(app, m_api, m_publish, client, connected):
    object_list = [{
        'id': 'testey',
        'nid': 1,
        'data': {
            'var': 1
        }
    }, {
        'id': 'testface',
        'nid': 2,
        'data': {
            'val': 2
        }
    }]
    objects = {'testey': {'var': 1}, 'testface': {'val': 2}}
    m_api.read_all_logged.return_value = object_list
    m_api.read_all.return_value = object_list

    b = broadcaster.Broadcaster(app)
    await b.prepare()
    await b.run()

    m_publish.assert_has_calls([
        call(app,
             'testcast/history/test_app',
             err=False,
             message={
                 'key': 'test_app',
                 'data': objects,
             }),
        call(app,
             'testcast/state/test_app',
             err=False,
             retain=True,
             message={
                 'key': 'test_app',
                 'type': 'Spark.state',
                 'ttl': '60.0s',
                 'data': {
                     'status': ANY,
                     'blocks': object_list,
                 },
             }),
    ])

    await b.before_shutdown(app)
    assert m_publish.call_count == 3
Exemple #10
0
async def test_disabled(app, m_publish, client, synchronized):
    app['config']['broadcast_interval'] = 0
    app['config']['volatile'] = False
    b = broadcaster.Broadcaster(app)
    with pytest.raises(repeater.RepeaterCancelled):
        await b.prepare()
Exemple #11
0
async def test_disabled(app, m_api, m_publish, client, connected):
    app['config']['broadcast_interval'] = 0
    b = broadcaster.Broadcaster(app)
    with pytest.raises(repeater.RepeaterCancelled):
        await b.prepare()