diff options
Diffstat (limited to 'tests/internals/pluginfactory.py')
-rw-r--r-- | tests/internals/pluginfactory.py | 287 |
1 files changed, 0 insertions, 287 deletions
diff --git a/tests/internals/pluginfactory.py b/tests/internals/pluginfactory.py deleted file mode 100644 index 13b9d3aae..000000000 --- a/tests/internals/pluginfactory.py +++ /dev/null @@ -1,287 +0,0 @@ -# Pylint doesn't play well with fixtures and dependency injection from pytest -# pylint: disable=redefined-outer-name - -import os -import pytest - -from pluginbase import PluginBase -from buildstream import Node -from buildstream._elementfactory import ElementFactory -from buildstream._sourcefactory import SourceFactory -from buildstream._exceptions import PluginError - -DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "pluginfactory",) - - -# Simple fixture to create a PluginBase object that -# we use for loading plugins. -@pytest.fixture() -def plugin_fixture(): - return {"base": PluginBase(package="buildstream.plugins")} - - -############################################################## -# Basics: test the fixture, test we can create the factories # -############################################################## -def test_fixture(plugin_fixture): - assert isinstance(plugin_fixture["base"], PluginBase) - - -def test_source_factory(plugin_fixture): - factory = SourceFactory(plugin_fixture["base"]) - assert isinstance(factory, SourceFactory) - - -def test_element_factory(plugin_fixture): - factory = ElementFactory(plugin_fixture["base"]) - assert isinstance(factory, ElementFactory) - - -############################################################## -# Check that we can load custom sources & elements # -############################################################## -@pytest.mark.datafiles(os.path.join(DATA_DIR, "customsource")) -def test_custom_source(plugin_fixture, datafiles): - plugins = [ - Node.from_dict( - {"origin": "local", "path": os.path.join(datafiles.dirname, datafiles.basename), "plugins": ["foo"]} - ) - ] - factory = SourceFactory(plugin_fixture["base"], plugin_origins=plugins) - assert isinstance(factory, SourceFactory) - - foo_type, _ = factory.lookup("foo") - assert foo_type.__name__ == "FooSource" - - -@pytest.mark.datafiles(os.path.join(DATA_DIR, "customelement")) -def test_custom_element(plugin_fixture, datafiles): - plugins = [ - Node.from_dict( - {"origin": "local", "path": os.path.join(datafiles.dirname, datafiles.basename), "plugins": ["foo"]} - ) - ] - factory = ElementFactory(plugin_fixture["base"], plugin_origins=plugins) - assert isinstance(factory, ElementFactory) - - foo_type, _ = factory.lookup("foo") - assert foo_type.__name__ == "FooElement" - - -############################################################## -# Check plugin loading failure modes # -############################################################## -def test_missing_source(plugin_fixture): - factory = SourceFactory(plugin_fixture["base"]) - assert isinstance(factory, SourceFactory) - - # Test fails if PluginError is not raised - with pytest.raises(PluginError): - factory.lookup("foo") - - -def test_missing_element(plugin_fixture): - factory = ElementFactory(plugin_fixture["base"]) - assert isinstance(factory, ElementFactory) - - # Test fails if PluginError is not raised - with pytest.raises(PluginError): - factory.lookup("foo") - - -# Load a factory with a plugin that returns a value instead of Source subclass -@pytest.mark.datafiles(os.path.join(DATA_DIR, "notatype")) -def test_source_notatype(plugin_fixture, datafiles): - plugins = [ - Node.from_dict( - {"origin": "local", "path": os.path.join(datafiles.dirname, datafiles.basename), "plugins": ["foo"]} - ) - ] - factory = SourceFactory(plugin_fixture["base"], plugin_origins=plugins) - with pytest.raises(PluginError): - factory.lookup("foo") - - -# Load a factory with a plugin that returns a value instead of Element subclass -@pytest.mark.datafiles(os.path.join(DATA_DIR, "notatype")) -def test_element_notatype(plugin_fixture, datafiles): - plugins = [ - Node.from_dict( - {"origin": "local", "path": os.path.join(datafiles.dirname, datafiles.basename), "plugins": ["foo"]} - ) - ] - factory = ElementFactory(plugin_fixture["base"], plugin_origins=plugins) - with pytest.raises(PluginError): - factory.lookup("foo") - - -# Load a factory with a plugin that returns a type -# which is not a Source subclass -@pytest.mark.datafiles(os.path.join(DATA_DIR, "wrongtype")) -def test_source_wrongtype(plugin_fixture, datafiles): - plugins = [ - Node.from_dict( - {"origin": "local", "path": os.path.join(datafiles.dirname, datafiles.basename), "plugins": ["foo"]} - ) - ] - factory = SourceFactory(plugin_fixture["base"], plugin_origins=plugins) - with pytest.raises(PluginError): - factory.lookup("foo") - - -# Load a factory with a plugin that returns a type -# which is not a Element subclass -@pytest.mark.datafiles(os.path.join(DATA_DIR, "wrongtype")) -def test_element_wrongtype(plugin_fixture, datafiles): - plugins = [ - Node.from_dict( - {"origin": "local", "path": os.path.join(datafiles.dirname, datafiles.basename), "plugins": ["foo"]} - ) - ] - factory = ElementFactory(plugin_fixture["base"], plugin_origins=plugins) - with pytest.raises(PluginError): - factory.lookup("foo") - - -# Load a factory with a plugin which fails to provide a setup() function -@pytest.mark.datafiles(os.path.join(DATA_DIR, "nosetup")) -def test_source_missing_setup(plugin_fixture, datafiles): - plugins = [ - Node.from_dict( - {"origin": "local", "path": os.path.join(datafiles.dirname, datafiles.basename), "plugins": ["foo"]} - ) - ] - factory = SourceFactory(plugin_fixture["base"], plugin_origins=plugins) - with pytest.raises(PluginError): - factory.lookup("foo") - - -# Load a factory with a plugin which fails to provide a setup() function -@pytest.mark.datafiles(os.path.join(DATA_DIR, "nosetup")) -def test_element_missing_setup(plugin_fixture, datafiles): - plugins = [ - Node.from_dict( - {"origin": "local", "path": os.path.join(datafiles.dirname, datafiles.basename), "plugins": ["foo"]} - ) - ] - factory = ElementFactory(plugin_fixture["base"], plugin_origins=plugins) - with pytest.raises(PluginError): - factory.lookup("foo") - - -# Load a factory with a plugin which provides a setup symbol -# that is not a function -@pytest.mark.datafiles(os.path.join(DATA_DIR, "badsetup")) -def test_source_bad_setup(plugin_fixture, datafiles): - plugins = [ - Node.from_dict( - {"origin": "local", "path": os.path.join(datafiles.dirname, datafiles.basename), "plugins": ["foo"]} - ) - ] - factory = SourceFactory(plugin_fixture["base"], plugin_origins=plugins) - with pytest.raises(PluginError): - factory.lookup("foo") - - -# Load a factory with a plugin which provides a setup symbol -# that is not a function -@pytest.mark.datafiles(os.path.join(DATA_DIR, "badsetup")) -def test_element_bad_setup(plugin_fixture, datafiles): - plugins = [ - Node.from_dict( - {"origin": "local", "path": os.path.join(datafiles.dirname, datafiles.basename), "plugins": ["foo"]} - ) - ] - factory = ElementFactory(plugin_fixture["base"], plugin_origins=plugins) - with pytest.raises(PluginError): - factory.lookup("foo") - - -# Load a factory with a plugin which requires an absurdly -# high version of buildstream -@pytest.mark.datafiles(os.path.join(DATA_DIR, "badversionsource")) -def test_source_badversion(plugin_fixture, datafiles): - plugins = [ - Node.from_dict( - {"origin": "local", "path": os.path.join(datafiles.dirname, datafiles.basename), "plugins": ["foo"]} - ) - ] - factory = SourceFactory(plugin_fixture["base"], plugin_origins=plugins) - with pytest.raises(PluginError): - factory.lookup("foo") - - -# Load a factory with a plugin which requires an absurdly -# high version of buildstream -@pytest.mark.datafiles(os.path.join(DATA_DIR, "badversionelement")) -def test_element_badversion(plugin_fixture, datafiles): - plugins = [ - Node.from_dict( - {"origin": "local", "path": os.path.join(datafiles.dirname, datafiles.basename), "plugins": ["foo"]} - ) - ] - factory = ElementFactory(plugin_fixture["base"], plugin_origins=plugins) - with pytest.raises(PluginError): - factory.lookup("foo") - - -############################################################## -# Check we can load different contexts of plugin # -############################################################## - -# Load two factories, both of which define a different 'foo' plugin -@pytest.mark.datafiles(DATA_DIR) -def test_source_multicontext(plugin_fixture, datafiles): - plugins1 = Node.from_dict( - { - "origin": "local", - "path": os.path.join(datafiles.dirname, datafiles.basename, "customsource"), - "plugins": ["foo"], - } - ) - plugins2 = Node.from_dict( - { - "origin": "local", - "path": os.path.join(datafiles.dirname, datafiles.basename, "anothersource"), - "plugins": ["foo"], - } - ) - - factory1 = SourceFactory(plugin_fixture["base"], plugin_origins=[plugins1]) - factory2 = SourceFactory(plugin_fixture["base"], plugin_origins=[plugins2]) - assert isinstance(factory1, SourceFactory) - assert isinstance(factory2, SourceFactory) - - foo_type1, _ = factory1.lookup("foo") - foo_type2, _ = factory2.lookup("foo") - assert foo_type1.__name__ == "FooSource" - assert foo_type2.__name__ == "AnotherFooSource" - - -# Load two factories, both of which define a different 'foo' plugin -@pytest.mark.datafiles(DATA_DIR) -def test_element_multicontext(plugin_fixture, datafiles): - plugins1 = Node.from_dict( - { - "origin": "local", - "path": os.path.join(datafiles.dirname, datafiles.basename, "customelement"), - "plugins": ["foo"], - } - ) - plugins2 = Node.from_dict( - { - "origin": "local", - "path": os.path.join(datafiles.dirname, datafiles.basename, "anotherelement"), - "plugins": ["foo"], - } - ) - - factory1 = ElementFactory(plugin_fixture["base"], plugin_origins=[plugins1]) - factory2 = ElementFactory(plugin_fixture["base"], plugin_origins=[plugins2]) - assert isinstance(factory1, ElementFactory) - assert isinstance(factory2, ElementFactory) - - foo_type1, _ = factory1.lookup("foo") - foo_type2, _ = factory2.lookup("foo") - assert foo_type1.__name__ == "FooElement" - assert foo_type2.__name__ == "AnotherFooElement" |