Пример #1
0
async def test_get_device_info_cache_exist(patch_register_plugins,
                                           plugin_context, clear_caches):
    """Get the existing device info cache."""

    # create & register new plugin
    p = plugin.Plugin(metadata=api.Metadata(name='foo', tag='vaporio/foo'),
                      address='localhost:9999',
                      plugin_client=client.PluginTCPClient('localhost:9999'))
    p.client.devices = mock_client_devices

    # this is the first time we ask for cache
    # it's not there yet so we build one
    first_meta = await cache.get_device_info_cache()
    assert isinstance(first_meta, dict)
    assert 'rack-1-vec-12345' in first_meta
    assert first_meta['rack-1-vec-12345'] == mock_get_device_info_cache(
    )['rack-1-vec-12345']

    # this is the second time we ask for it
    # it should be there this time and return right away
    second_meta = await cache.get_device_info_cache()
    assert isinstance(second_meta, dict)
    assert 'rack-1-vec-12345' in second_meta
    assert second_meta['rack-1-vec-12345'] == mock_get_device_info_cache(
    )['rack-1-vec-12345']
Пример #2
0
def mock_plugin():
    """Convenience fixture to create a test plugin. We create a TCP
    based plugin for ease of testing.
    """
    p = plugin.Plugin(metadata=api.Metadata(name='test-plug'),
                      address='localhost:9999',
                      plugin_client=PluginTCPClient(address='localhost:9999'))
    yield p
Пример #3
0
def test_plugin_path_not_exist():
    """Create a plugin when the socket doesn't exist."""
    p = plugin.Plugin(
        metadata=api.Metadata(name='test'),
        address='some/nonexistent/path',
        plugin_client=PluginUnixClient(address='some/nonexistent/path'))
    assert p.protocol == 'unix'
    assert p.name == 'test'
Пример #4
0
async def test_get_device_info_cache_partial_failure(patch_register_plugins,
                                                     plugin_context,
                                                     clear_caches):
    """Get the device info cache when some plugins fail to respond."""

    # create & register new plugins
    p = plugin.Plugin(metadata=api.Metadata(name='foo', tag='vaporio/foo'),
                      address='localhost:9999',
                      plugin_client=client.PluginTCPClient('localhost:9999'))
    p.client.devices = mock_client_devices

    p = plugin.Plugin(metadata=api.Metadata(name='bar', tag='vaporio/bar'),
                      address='localhost:9998',
                      plugin_client=client.PluginTCPClient('localhost:9998'))
    p.client.devices = mock_client_device_info_fail  # override to induce failure

    meta = await cache.get_device_info_cache()
    assert isinstance(meta, dict)
    assert len(meta) == 1  # two plugins registered, but only one successful
 def _mock():
     return 'test', plugin.Plugin(
         metadata=api.Metadata(
             name='test',
             tag='vaporio/test'
         ),
         address='localhost:5001',
         plugin_client=PluginTCPClient(
             address='localhost:5001'
         ),
     )
Пример #6
0
async def test_get_device_info_cache_empty(plugin_context, clear_caches):
    """Get the empty device info cache."""

    # create & register new plugin
    p = plugin.Plugin(metadata=api.Metadata(name='foo', tag='vaporio/foo'),
                      address='localhost:9999',
                      plugin_client=client.PluginTCPClient('localhost:9999'))
    p.client.devices = mock_client_device_info_empty

    meta = await cache.get_device_info_cache()
    assert isinstance(meta, dict)
    assert len(meta) == 0
Пример #7
0
def test_plugin_tcp_ok():
    """Create a TCP plugin successfully"""

    p = plugin.Plugin(metadata=api.Metadata(name='test'),
                      address='localhost:9999',
                      plugin_client=PluginTCPClient(address='localhost:9999'))

    assert p.name == 'test'
    assert p.address == 'localhost:9999'
    assert p.protocol == 'tcp'
    assert p.client is not None
    assert isinstance(p.client, PluginClient)
Пример #8
0
def test_plugin_unix_ok(tmpsocket):
    """Create a UNIX plugin successfully"""
    _, path = tmpsocket.add('test')

    p = plugin.Plugin(metadata=api.Metadata(name='test'),
                      address=path,
                      plugin_client=PluginUnixClient(address=path))

    assert p.name == 'test'
    assert p.address == path
    assert p.protocol == 'unix'
    assert p.client is not None
    assert isinstance(p.client, PluginClient)
Пример #9
0
async def test_get_device_info_cache_total_failure(plugin_context,
                                                   clear_caches):
    """Get the device info cache when all plugins fail to respond."""

    # create & register new plugin
    p = plugin.Plugin(metadata=api.Metadata(name='foo', tag='vaporio/foo'),
                      address='localhost:9999',
                      plugin_client=client.PluginTCPClient('localhost:9999'))
    p.client.devices = mock_client_device_info_fail  # override to induce failure

    try:
        await cache.get_device_info_cache()
    except errors.SynseError as e:
        assert e.error_id == errors.INTERNAL_API_FAILURE
Пример #10
0
def make_plugin(setup):
    """Fixture to create and register a plugin for testing."""

    plugin_id = 'vaporio/foo+unix@tmp/foo'

    # make a dummy plugin for the tests to use
    if plugin_id not in plugin.Plugin.manager.plugins:
        plugin.Plugin(metadata=api.Metadata(name='foo', tag='vaporio/foo'),
                      address='tmp/foo',
                      plugin_client=PluginUnixClient('tmp/foo'))

    yield

    if plugin_id in plugin.Plugin.manager.plugins:
        del plugin.Plugin.manager.plugins[plugin_id]
Пример #11
0
async def test_get_device_info_cache_ok(patch_register_plugins, plugin_context,
                                        clear_caches):
    """Get the device info cache."""

    # create & register new plugin
    p = plugin.Plugin(metadata=api.Metadata(name='foo', tag='vaporio/foo'),
                      address='localhost:9999',
                      plugin_client=client.PluginTCPClient('localhost:9999'))
    p.client.devices = mock_client_devices

    meta = await cache.get_device_info_cache()
    assert isinstance(meta, dict)
    assert 'rack-1-vec-12345' in meta
    assert meta['rack-1-vec-12345'] == mock_get_device_info_cache(
    )['rack-1-vec-12345']
Пример #12
0
def make_plugin():
    """Fixture to create and register a plugin for testing."""

    plugin_id = 'vaporio/foo+tcp@localhost:9999'

    # make a dummy plugin for the tests to use
    if plugin_id not in plugin.Plugin.manager.plugins:
        plugin.Plugin(metadata=api.Metadata(name='foo', tag='vaporio/foo'),
                      address='localhost:9999',
                      plugin_client=PluginTCPClient('localhost:9999'))

    yield

    if plugin_id in plugin.Plugin.manager.plugins:
        del plugin.Plugin.manager.plugins[plugin_id]
def add_plugin():
    """Add a test plugin to the plugin manager."""
    p = plugin.Plugin(
        metadata=api.Metadata(
            name='test',
            tag='vaporio/test',
        ),
        address='localhost:5001',
        plugin_client=PluginTCPClient(
            address='localhost:5001',
        ),
    )

    yield

    plugin.Plugin.manager.remove(p.id())
Пример #14
0
async def test_get_resource_info_cache_empty(plugin_context, clear_caches):
    """Get the empty info cache."""

    # create & register new plugin with empty device info cache
    p = plugin.Plugin(metadata=api.Metadata(name='foo', tag='vaporio/foo'),
                      address='localhost:9999',
                      plugin_client=client.PluginTCPClient('localhost:9999'))
    p.client.devices = mock_client_device_info_empty

    meta_cache = await cache.get_device_info_cache()
    assert isinstance(meta_cache, dict)
    assert len(meta_cache) == 0

    # because device info cache is empty and info cache is built upon device info's
    # scan cache should also be empty
    info_cache = await cache.get_resource_info_cache()
    assert isinstance(info_cache, dict)
    assert len(info_cache) == 0
Пример #15
0
 def patch(self):
     """Patch function for the client 'metainfo' method."""
     return api.Metadata(name='test-plugin',
                         tag='vaporio/test-plugin',
                         maintainer='vaporio',
                         description='test')
async def test_read_cached_command_2(monkeypatch, patch_get_device_info, clear_manager):
    """Read the plugin cache for multiple plugins."""

    # Add plugins to the manager (this is done by the constructor)
    plugin.Plugin(
        metadata=api.Metadata(
            name='foo',
            tag='vaporio/foo',
        ),
        address='localhost:5001',
        plugin_client=PluginTCPClient(
            address='localhost:5001',
        ),
    )
    plugin.Plugin(
        metadata=api.Metadata(
            name='bar',
            tag='vaporio/bar',
        ),
        address='localhost:5002',
        plugin_client=PluginTCPClient(
            address='localhost:5002',
        ),
    )

    # monkeypatch the read_cached method so it yields some data
    def _mock(*args, **kwargs):
        readings = [
            api.DeviceReading(
                rack='rack',
                board='board',
                device='device',
                reading=api.Reading(
                    timestamp='2018-10-18T16:43:18+00:00',
                    type='temperature',
                    int64_value=10,
                )
            ),
            api.DeviceReading(
                rack='rack',
                board='board',
                device='device',
                reading=api.Reading(
                    timestamp='2018-10-18T16:43:18+00:00',
                    type='humidity',
                    int64_value=30,
                )
            )
        ]
        for r in readings:
            yield r

    monkeypatch.setattr(PluginClient, 'read_cached', _mock)

    assert len(plugin.Plugin.manager.plugins) == 2
    results = [i async for i in read_cached()]

    # two plugins with two patched readings each
    assert len(results) == 4
    assert results[0].data['type'] == 'temperature'
    assert results[1].data['type'] == 'humidity'
    assert results[2].data['type'] == 'temperature'
    assert results[3].data['type'] == 'humidity'