diff options
57 files changed, 244 insertions, 707 deletions
diff --git a/doc/examples/flatpak-autotools/project.conf b/doc/examples/flatpak-autotools/project.conf index 08dc6ee32..d7a0a396d 100644 --- a/doc/examples/flatpak-autotools/project.conf +++ b/doc/examples/flatpak-autotools/project.conf @@ -19,4 +19,4 @@ plugins: - origin: pip package-name: bst-plugins-experimental sources: - ostree: 0 + - ostree diff --git a/src/buildstream/_pluginfactory/__init__.py b/src/buildstream/_pluginfactory/__init__.py new file mode 100644 index 000000000..fe69b6e77 --- /dev/null +++ b/src/buildstream/_pluginfactory/__init__.py @@ -0,0 +1,20 @@ +# +# Copyright (C) 2020 Codethink Limited +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see <http://www.gnu.org/licenses/>. +# + +from .pluginorigin import PluginOrigin, PluginOriginType +from .sourcefactory import SourceFactory +from .elementfactory import ElementFactory diff --git a/src/buildstream/_elementfactory.py b/src/buildstream/_pluginfactory/elementfactory.py index 89e01a885..8879a4173 100644 --- a/src/buildstream/_elementfactory.py +++ b/src/buildstream/_pluginfactory/elementfactory.py @@ -17,9 +17,10 @@ # Authors: # Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> -from . import _site -from ._plugincontext import PluginContext -from .element import Element +from .. import _site +from ..element import Element + +from .pluginfactory import PluginFactory # A ElementFactory creates Element instances @@ -27,18 +28,12 @@ from .element import Element # # Args: # plugin_base (PluginBase): The main PluginBase object to work with -# plugin_origins (list): Data used to search for external Element plugins # -class ElementFactory(PluginContext): - def __init__(self, plugin_base, *, format_versions={}, plugin_origins=None): +class ElementFactory(PluginFactory): + def __init__(self, plugin_base): super().__init__( - plugin_base, - Element, - [_site.element_plugins], - "buildstream.plugins.elements", - plugin_origins=plugin_origins, - format_versions=format_versions, + plugin_base, Element, [_site.element_plugins], "buildstream.plugins.elements", ) # create(): @@ -60,6 +55,4 @@ class ElementFactory(PluginContext): def create(self, context, project, meta): element_type, default_config = self.lookup(meta.kind) element = element_type(context, project, meta, default_config) - version = self._format_versions.get(meta.kind, 0) - self._assert_plugin_format(element, version) return element diff --git a/src/buildstream/_plugincontext.py b/src/buildstream/_pluginfactory/pluginfactory.py index 3a195e239..c42b0a3d2 100644 --- a/src/buildstream/_plugincontext.py +++ b/src/buildstream/_pluginfactory/pluginfactory.py @@ -20,9 +20,9 @@ import os import inspect -from ._exceptions import PluginError, LoadError -from .exceptions import LoadErrorReason -from . import utils +from .._exceptions import PluginError + +from .pluginorigin import PluginOrigin, PluginOriginType # A Context for loading plugin types @@ -32,9 +32,6 @@ from . import utils # base_type (type): A base object type for this context # site_plugin_path (str): Path to where buildstream keeps plugins # entrypoint_group (str): Name of the entry point group that provides plugins -# plugin_origins (list): Data used to search for plugins -# format_versions (dict): A dict of meta.kind to the integer minimum -# version number for each plugin to be loaded # # Since multiple pipelines can be processed recursively # within the same interpretor, it's important that we have @@ -43,16 +40,8 @@ from . import utils # a given BuildStream project are isolated to their respective # Pipelines. # -class PluginContext: - def __init__( - self, plugin_base, base_type, site_plugin_path, entrypoint_group, *, plugin_origins=None, format_versions={} - ): - - # For pickling across processes, make sure this context has a unique - # identifier, which we prepend to the identifier of each PluginSource. - # This keeps plugins loaded during the first and second pass distinct - # from eachother. - self._identifier = str(id(self)) +class PluginFactory: + def __init__(self, plugin_base, base_type, site_plugin_path, entrypoint_group): # The plugin kinds which were loaded self.loaded_dependencies = [] @@ -60,16 +49,22 @@ class PluginContext: # # Private members # + + # For pickling across processes, make sure this context has a unique + # identifier, which we prepend to the identifier of each PluginSource. + # This keeps plugins loaded during the first and second pass distinct + # from eachother. + self._identifier = str(id(self)) + self._base_type = base_type # The base class plugins derive from self._types = {} # Plugin type lookup table by kind - self._plugin_origins = plugin_origins or [] + self._origins = {} # PluginOrigin lookup table by kind # The PluginSource object self._plugin_base = plugin_base self._site_plugin_path = site_plugin_path self._entrypoint_group = entrypoint_group self._alternate_sources = {} - self._format_versions = format_versions self._init_site_source() @@ -127,6 +122,23 @@ class PluginContext: def lookup(self, kind): return self._ensure_plugin(kind) + # register_plugin_origin(): + # + # Registers the PluginOrigin to use for the given plugin kind + # + # Args: + # kind (str): The kind identifier of the Plugin + # origin (PluginOrigin): The PluginOrigin providing the plugin + # + def register_plugin_origin(self, kind: str, origin: PluginOrigin): + if kind in self._origins: + raise PluginError( + "More than one {} plugin registered as kind '{}'".format(self._base_type.__name__, kind), + reason="duplicate-plugin", + ) + + self._origins[kind] = origin + # all_loaded_plugins(): # # Returns: an iterable over all the loaded plugins. @@ -186,39 +198,27 @@ class PluginContext: def _ensure_plugin(self, kind): if kind not in self._types: - # Check whether the plugin is specified in plugins source = None defaults = None - loaded_dependency = False - - for origin in self._plugin_origins: - if kind not in origin.get_str_list("plugins"): - continue - - if origin.get_str("origin") == "local": - local_path = origin.get_str("path") - source = self._get_local_plugin_source(local_path) - elif origin.get_str("origin") == "pip": - package_name = origin.get_str("package-name") - source, defaults = self._get_pip_plugin_source(package_name, kind) - else: - raise PluginError( - "Failed to load plugin '{}': " - "Unexpected plugin origin '{}'".format(kind, origin.get_str("origin")) - ) - loaded_dependency = True - break - # Fall back to getting the source from site - if not source: + origin = self._origins.get(kind, None) + if origin: + # Try getting the plugin source from a registered origin + if origin.origin_type == PluginOriginType.LOCAL: + source = self._get_local_plugin_source(origin.path) + elif origin.origin_type == PluginOriginType.PIP: + source, defaults = self._get_pip_plugin_source(origin.package_name, kind) + else: + assert False, "Encountered invalid plugin origin type" + else: + # Try getting it from the core plugins if kind not in self._site_source.list_plugins(): raise PluginError("No {} type registered for kind '{}'".format(self._base_type.__name__, kind)) source = self._site_source self._types[kind] = self._load_plugin(source, kind, defaults) - if loaded_dependency: - self.loaded_dependencies.append(kind) + self.loaded_dependencies.append(kind) return self._types[kind] @@ -248,7 +248,6 @@ class PluginContext: ) from e self._assert_plugin(kind, plugin_type) - self._assert_version(kind, plugin_type) return (plugin_type, defaults) def _assert_plugin(self, kind, plugin_type): @@ -270,37 +269,3 @@ class PluginContext: self._base_type.__name__, kind, self._base_type.__name__ ) ) from e - - def _assert_version(self, kind, plugin_type): - - # Now assert BuildStream version - bst_major, bst_minor = utils.get_bst_version() - - req_major = plugin_type.BST_REQUIRED_VERSION_MAJOR - req_minor = plugin_type.BST_REQUIRED_VERSION_MINOR - - if (bst_major, bst_minor) < (req_major, req_minor): - raise PluginError( - "BuildStream {}.{} is too old for {} plugin '{}' (requires {}.{})".format( - bst_major, - bst_minor, - self._base_type.__name__, - kind, - plugin_type.BST_REQUIRED_VERSION_MAJOR, - plugin_type.BST_REQUIRED_VERSION_MINOR, - ) - ) - - # _assert_plugin_format() - # - # Helper to raise a PluginError if the loaded plugin is of a lesser version then - # the required version for this plugin - # - def _assert_plugin_format(self, plugin, version): - if plugin.BST_FORMAT_VERSION < version: - raise LoadError( - "{}: Format version {} is too old for requested version {}".format( - plugin, plugin.BST_FORMAT_VERSION, version - ), - LoadErrorReason.UNSUPPORTED_PLUGIN, - ) diff --git a/src/buildstream/_pluginfactory/pluginorigin.py b/src/buildstream/_pluginfactory/pluginorigin.py new file mode 100644 index 000000000..50852711b --- /dev/null +++ b/src/buildstream/_pluginfactory/pluginorigin.py @@ -0,0 +1,130 @@ +# +# Copyright (C) 2020 Codethink Limited +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see <http://www.gnu.org/licenses/>. +# + +import os + +from ..types import FastEnum + + +# PluginOriginType: +# +# An enumeration depicting the type of plugin origin +# +class PluginOriginType(FastEnum): + LOCAL = "local" + PIP = "pip" + + +# PluginOrigin +# +# Base class holding common properties of all origins. +# +class PluginOrigin: + + # Common fields valid for all plugin origins + _COMMON_CONFIG_KEYS = ["origin", "sources", "elements"] + + def __init__(self, origin_type): + + # Public + self.origin_type = origin_type + self.elements = [] + self.sources = [] + + # Private + self._project = None + self._kinds = {} + + # new_from_node() + # + # Load a PluginOrigin from the YAML in project.conf + # + # Args: + # project (Project): The project from whence this origin is loaded + # origin_node (MappingNode): The node defining this origin + # + # Returns: + # (PluginOrigin): The newly created PluginOrigin + # + @classmethod + def new_from_node(cls, project, origin_node): + + origin_type = origin_node.get_enum("origin", PluginOriginType) + + if origin_type == PluginOriginType.LOCAL: + origin = PluginOriginLocal() + elif origin_type == PluginOriginType.PIP: + origin = PluginOriginPip() + + origin._project = project + origin._load(origin_node) + + origin.elements = origin_node.get_str_list("elements", []) + origin.sources = origin_node.get_str_list("sources", []) + + return origin + + # _load() + # + # Abstract method for loading data from the origin node, this + # method should not load the source and element lists. + # + # Args: + # origin_node (MappingNode): The node defining this origin + # + def _load(self, origin_node): + pass + + +# PluginOriginLocal +# +# PluginOrigin for local plugins +# +class PluginOriginLocal(PluginOrigin): + def __init__(self): + super().__init__(PluginOriginType.LOCAL) + + # An absolute path to where the plugin can be found + # + self.path = None + + def _load(self, origin_node): + + origin_node.validate_keys(["path", *PluginOrigin._COMMON_CONFIG_KEYS]) + + path_node = origin_node.get_scalar("path") + path = self._project.get_path_from_node(path_node, check_is_dir=True) + + self.path = os.path.join(self._project.directory, path) + + +# PluginOriginPip +# +# PluginOrigin for pip plugins +# +class PluginOriginPip(PluginOrigin): + def __init__(self): + super().__init__(PluginOriginType.PIP) + + # The pip package name to extract plugins from + # + self.package_name = None + + def _load(self, origin_node): + + origin_node.validate_keys(["package-name", *PluginOrigin._COMMON_CONFIG_KEYS]) + self.package_name = origin_node.get_str("package-name") diff --git a/src/buildstream/_sourcefactory.py b/src/buildstream/_pluginfactory/sourcefactory.py index 254c482d6..9f6a09784 100644 --- a/src/buildstream/_sourcefactory.py +++ b/src/buildstream/_pluginfactory/sourcefactory.py @@ -17,9 +17,10 @@ # Authors: # Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> -from . import _site -from ._plugincontext import PluginContext -from .source import Source +from .. import _site +from ..source import Source + +from .pluginfactory import PluginFactory # A SourceFactory creates Source instances @@ -27,18 +28,12 @@ from .source import Source # # Args: # plugin_base (PluginBase): The main PluginBase object to work with -# plugin_origins (list): Data used to search for external Source plugins # -class SourceFactory(PluginContext): - def __init__(self, plugin_base, *, format_versions={}, plugin_origins=None): +class SourceFactory(PluginFactory): + def __init__(self, plugin_base): super().__init__( - plugin_base, - Source, - [_site.source_plugins], - "buildstream.plugins.sources", - format_versions=format_versions, - plugin_origins=plugin_origins, + plugin_base, Source, [_site.source_plugins], "buildstream.plugins.sources", ) # create(): @@ -61,6 +56,4 @@ class SourceFactory(PluginContext): def create(self, context, project, meta): source_type, _ = self.lookup(meta.kind) source = source_type(context, project, meta) - version = self._format_versions.get(meta.kind, 0) - self._assert_plugin_format(source, version) return source diff --git a/src/buildstream/_project.py b/src/buildstream/_project.py index 3527d211f..40524d7ad 100644 --- a/src/buildstream/_project.py +++ b/src/buildstream/_project.py @@ -36,13 +36,11 @@ from ._artifactcache import ArtifactCache from ._sourcecache import SourceCache from .node import ScalarNode, SequenceNode, _assert_symbol_name from .sandbox import SandboxRemote -from ._elementfactory import ElementFactory -from ._sourcefactory import SourceFactory +from ._pluginfactory import ElementFactory, SourceFactory, PluginOrigin from .types import CoreWarnings from ._projectrefs import ProjectRefs, ProjectRefStorage from ._loader import Loader from .element import Element -from .types import FastEnum from ._message import Message, MessageType from ._includes import Includes from ._workspaces import WORKSPACE_PROJECT_FILE @@ -52,13 +50,6 @@ from ._workspaces import WORKSPACE_PROJECT_FILE _PROJECT_CONF_FILE = "project.conf" -# List of all places plugins can come from -class PluginOrigins(FastEnum): - CORE = "core" - LOCAL = "local" - PIP = "pip" - - # HostMount() # # A simple object describing the behavior of @@ -951,87 +942,19 @@ class Project: return project_directory, workspace_element def _load_plugin_factories(self, config, output): - plugin_source_origins = [] # Origins of custom sources - plugin_element_origins = [] # Origins of custom elements - - # Plugin origins and versions - origins = config.get_sequence("plugins", default=[]) - source_format_versions = {} - element_format_versions = {} - for origin in origins: - allowed_origin_fields = [ - "origin", - "sources", - "elements", - "package-name", - "path", - ] - origin.validate_keys(allowed_origin_fields) - - # Store source versions for checking later - source_versions = origin.get_mapping("sources", default={}) - for key in source_versions.keys(): - if key in source_format_versions: - raise LoadError("Duplicate listing of source '{}'".format(key), LoadErrorReason.INVALID_YAML) - source_format_versions[key] = source_versions.get_int(key) - - # Store element versions for checking later - element_versions = origin.get_mapping("elements", default={}) - for key in element_versions.keys(): - if key in element_format_versions: - raise LoadError("Duplicate listing of element '{}'".format(key), LoadErrorReason.INVALID_YAML) - element_format_versions[key] = element_versions.get_int(key) - - # Store the origins if they're not 'core'. - # core elements are loaded by default, so storing is unnecessary. - origin_value = origin.get_enum("origin", PluginOrigins) - - if origin_value != PluginOrigins.CORE: - self._store_origin(origin, "sources", plugin_source_origins) - self._store_origin(origin, "elements", plugin_element_origins) - + # Create the factories pluginbase = PluginBase(package="buildstream.plugins") - output.element_factory = ElementFactory( - pluginbase, plugin_origins=plugin_element_origins, format_versions=element_format_versions - ) - output.source_factory = SourceFactory( - pluginbase, plugin_origins=plugin_source_origins, format_versions=source_format_versions - ) + output.element_factory = ElementFactory(pluginbase) + output.source_factory = SourceFactory(pluginbase) - # _store_origin() - # - # Helper function to store plugin origins - # - # Args: - # origin (node) - a node indicating the origin of a group of - # plugins. - # plugin_group (str) - The name of the type of plugin that is being - # loaded - # destination (list) - A list of nodes to store the origins in - # - # Raises: - # LoadError if 'origin' is an unexpected value - def _store_origin(self, origin, plugin_group, destination): - expected_groups = ["sources", "elements"] - if plugin_group not in expected_groups: - raise LoadError( - "Unexpected plugin group: {}, expecting {}".format(plugin_group, expected_groups), - LoadErrorReason.INVALID_DATA, - ) - if plugin_group in origin.keys(): - origin_node = origin.clone() - plugins = origin.get_mapping(plugin_group, default={}) - origin_node["plugins"] = plugins.keys() - - for group in expected_groups: - if group in origin_node: - del origin_node[group] - - if origin_node.get_enum("origin", PluginOrigins) == PluginOrigins.LOCAL: - path = self.get_path_from_node(origin.get_scalar("path"), check_is_dir=True) - # paths are passed in relative to the project, but must be absolute - origin_node["path"] = os.path.join(self.directory, path) - destination.append(origin_node) + # Load the plugin origins and register them to their factories + origins = config.get_sequence("plugins", default=[]) + for origin_node in origins: + origin = PluginOrigin.new_from_node(self, origin_node) + for kind in origin.elements: + output.element_factory.register_plugin_origin(kind, origin) + for kind in origin.sources: + output.source_factory.register_plugin_origin(kind, origin) # _warning_is_fatal(): # diff --git a/src/buildstream/plugin.py b/src/buildstream/plugin.py index 2182f5a08..4f2d74304 100644 --- a/src/buildstream/plugin.py +++ b/src/buildstream/plugin.py @@ -148,27 +148,6 @@ class Plugin: which are included in the buildstream namespace. """ - BST_REQUIRED_VERSION_MAJOR = 0 - """Minimum required major version""" - - BST_REQUIRED_VERSION_MINOR = 0 - """Minimum required minor version""" - - BST_FORMAT_VERSION = 0 - """The plugin's YAML format version - - This should be set to ``1`` the first time any new configuration - is understood by your :func:`Plugin.configure() <buildstream.plugin.Plugin.configure>` - implementation and subsequently bumped every time your - configuration is enhanced. - - .. note:: - - Plugins are expected to maintain backward compatibility - in the format and configurations they expose. The versioning - is intended to track availability of new features only. - """ - BST_PLUGIN_DEPRECATED = False """True if this element plugin has been deprecated. diff --git a/src/buildstream/testing/_sourcetests/utils.py b/src/buildstream/testing/_sourcetests/utils.py index 116506807..4cfb696bd 100644 --- a/src/buildstream/testing/_sourcetests/utils.py +++ b/src/buildstream/testing/_sourcetests/utils.py @@ -71,7 +71,7 @@ def add_plugins_conf(project, plugin_kind): if plugin_package is not None: project_conf["plugins"] = [ - {"origin": "pip", "package-name": plugin_package, "sources": {plugin_kind: 0,},}, + {"origin": "pip", "package-name": plugin_package, "sources": [plugin_kind],}, ] _yaml.roundtrip_dump(project_conf, project_conf_file) diff --git a/tests/elements/filter/basic/project.conf b/tests/elements/filter/basic/project.conf index e0b487d01..023943f79 100644 --- a/tests/elements/filter/basic/project.conf +++ b/tests/elements/filter/basic/project.conf @@ -5,4 +5,4 @@ plugins: - origin: local path: element_plugins elements: - dynamic: 0 + - dynamic diff --git a/tests/format/project.py b/tests/format/project.py index c2e2f733f..c4b2a480a 100644 --- a/tests/format/project.py +++ b/tests/format/project.py @@ -177,7 +177,7 @@ def test_plugin_no_load_ref(cli, datafiles, ref_storage): "name": "test", "min-version": "2.0", "ref-storage": ref_storage, - "plugins": [{"origin": "local", "path": "plugins", "sources": {"noloadref": 0}}], + "plugins": [{"origin": "local", "path": "plugins", "sources": ["noloadref"]}], } _yaml.roundtrip_dump(config, os.path.join(project, "project.conf")) @@ -202,7 +202,7 @@ def test_plugin_preflight_error(cli, datafiles): def test_duplicate_plugins(cli, datafiles): project = os.path.join(datafiles.dirname, datafiles.basename, "duplicate-plugins") result = cli.run(project=project, silent=True, args=["show", "element.bst"]) - result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_YAML) + result.assert_main_error(ErrorDomain.PLUGIN, "duplicate-plugin") # Assert that we get a different cache key for target.bst, depending diff --git a/tests/format/project/duplicate-plugins/project.conf b/tests/format/project/duplicate-plugins/project.conf index a413e6137..495ba0678 100644 --- a/tests/format/project/duplicate-plugins/project.conf +++ b/tests/format/project/duplicate-plugins/project.conf @@ -5,12 +5,12 @@ plugins: - origin: local path: bar elements: - foo: 0 + - foo sources: - frob: 0 + - frob - origin: local path: baz elements: - foo: 0 + - foo sources: - frob: 0 + - frob diff --git a/tests/format/project/local-plugin/project.conf b/tests/format/project/local-plugin/project.conf index ccb6ef433..7d8cc1aea 100644 --- a/tests/format/project/local-plugin/project.conf +++ b/tests/format/project/local-plugin/project.conf @@ -4,4 +4,4 @@ plugins: - origin: local path: plugins sources: - mysource: 0 + - mysource diff --git a/tests/format/project/plugin-allowed/project.conf b/tests/format/project/plugin-allowed/project.conf index 3896b7bc2..97107edf6 100644 --- a/tests/format/project/plugin-allowed/project.conf +++ b/tests/format/project/plugin-allowed/project.conf @@ -5,4 +5,4 @@ plugins: - origin: local path: plugins elements: - foo: 0 + - foo diff --git a/tests/format/project/plugin-preflight-error/project.conf b/tests/format/project/plugin-preflight-error/project.conf index 07d60daf2..ed1ddb99f 100644 --- a/tests/format/project/plugin-preflight-error/project.conf +++ b/tests/format/project/plugin-preflight-error/project.conf @@ -9,4 +9,4 @@ plugins: - origin: local path: errorplugin sources: - preflighterror: 0 + - preflighterror diff --git a/tests/frontend/configurable_warnings.py b/tests/frontend/configurable_warnings.py index e61db6c37..53409a512 100644 --- a/tests/frontend/configurable_warnings.py +++ b/tests/frontend/configurable_warnings.py @@ -18,9 +18,7 @@ def get_project(fatal_warnings): "name": "test", "min-version": "2.0", "element-path": "elements", - "plugins": [ - {"origin": "local", "path": "plugins", "elements": {"warninga": 0, "warningb": 0, "corewarn": 0,}} - ], + "plugins": [{"origin": "local", "path": "plugins", "elements": ["warninga", "warningb", "corewarn"]}], "fatal-warnings": fatal_warnings, } diff --git a/tests/frontend/configuredwarning/project.conf b/tests/frontend/configuredwarning/project.conf index 195ee176a..9d75ad18b 100644 --- a/tests/frontend/configuredwarning/project.conf +++ b/tests/frontend/configuredwarning/project.conf @@ -5,5 +5,5 @@ plugins: - origin: local path: element_plugins elements: - warninga: 0 - warningb: 0 + - warninga + - warningb diff --git a/tests/frontend/consistencyerror/project.conf b/tests/frontend/consistencyerror/project.conf index d28ba12df..f5c1b39c5 100644 --- a/tests/frontend/consistencyerror/project.conf +++ b/tests/frontend/consistencyerror/project.conf @@ -9,5 +9,5 @@ plugins: - origin: local path: plugins sources: - consistencyerror: 0 - consistencybug: 0 + - consistencyerror + - consistencybug diff --git a/tests/frontend/mirror.py b/tests/frontend/mirror.py index 848047ee8..bffc754e7 100644 --- a/tests/frontend/mirror.py +++ b/tests/frontend/mirror.py @@ -49,7 +49,7 @@ def generate_project(): {"name": "arrakis", "aliases": {"foo": ["OFO/"], "bar": ["RBA/"],},}, {"name": "oz", "aliases": {"foo": ["ooF/"], "bar": ["raB/"],}}, ], - "plugins": [{"origin": "local", "path": "sources", "sources": {"fetch_source": 0}}], + "plugins": [{"origin": "local", "path": "sources", "sources": ["fetch_source"]}], } return project diff --git a/tests/frontend/push.py b/tests/frontend/push.py index 362084372..970885784 100644 --- a/tests/frontend/push.py +++ b/tests/frontend/push.py @@ -641,7 +641,7 @@ def test_push_after_rebuild(cli, tmpdir, datafiles): config={ "element-path": "elements", "min-version": "2.0", - "plugins": [{"origin": "local", "path": "plugins", "elements": {"randomelement": 0}}], + "plugins": [{"origin": "local", "path": "plugins", "elements": ["randomelement"]}], }, ) 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" diff --git a/tests/internals/pluginfactory/anotherelement/__init__.py b/tests/internals/pluginfactory/anotherelement/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/internals/pluginfactory/anotherelement/__init__.py +++ /dev/null diff --git a/tests/internals/pluginfactory/anotherelement/foo.py b/tests/internals/pluginfactory/anotherelement/foo.py deleted file mode 100644 index 2e067a94f..000000000 --- a/tests/internals/pluginfactory/anotherelement/foo.py +++ /dev/null @@ -1,9 +0,0 @@ -from buildstream import Element - - -class AnotherFooElement(Element): - pass - - -def setup(): - return AnotherFooElement diff --git a/tests/internals/pluginfactory/anothersource/__init__.py b/tests/internals/pluginfactory/anothersource/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/internals/pluginfactory/anothersource/__init__.py +++ /dev/null diff --git a/tests/internals/pluginfactory/anothersource/foo.py b/tests/internals/pluginfactory/anothersource/foo.py deleted file mode 100644 index 4675b965f..000000000 --- a/tests/internals/pluginfactory/anothersource/foo.py +++ /dev/null @@ -1,9 +0,0 @@ -from buildstream import Source - - -class AnotherFooSource(Source): - pass - - -def setup(): - return AnotherFooSource diff --git a/tests/internals/pluginfactory/badsetup/__init__.py b/tests/internals/pluginfactory/badsetup/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/internals/pluginfactory/badsetup/__init__.py +++ /dev/null diff --git a/tests/internals/pluginfactory/badsetup/foo.py b/tests/internals/pluginfactory/badsetup/foo.py deleted file mode 100644 index 145f2577b..000000000 --- a/tests/internals/pluginfactory/badsetup/foo.py +++ /dev/null @@ -1,6 +0,0 @@ -# A plugin is supposed to define a setup function -# which returns the type that the plugin provides -# -# This plugin provides a setup() symbol that is -# not even a function -setup = 5 diff --git a/tests/internals/pluginfactory/badversionelement/__init__.py b/tests/internals/pluginfactory/badversionelement/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/internals/pluginfactory/badversionelement/__init__.py +++ /dev/null diff --git a/tests/internals/pluginfactory/badversionelement/foo.py b/tests/internals/pluginfactory/badversionelement/foo.py deleted file mode 100644 index 2a8b12abe..000000000 --- a/tests/internals/pluginfactory/badversionelement/foo.py +++ /dev/null @@ -1,11 +0,0 @@ -from buildstream import Element - - -class FooElement(Element): - - # We have a little while until we have to manually modify this - BST_REQUIRED_VERSION_MAJOR = 5000 - - -def setup(): - return FooElement diff --git a/tests/internals/pluginfactory/badversionsource/__init__.py b/tests/internals/pluginfactory/badversionsource/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/internals/pluginfactory/badversionsource/__init__.py +++ /dev/null diff --git a/tests/internals/pluginfactory/badversionsource/foo.py b/tests/internals/pluginfactory/badversionsource/foo.py deleted file mode 100644 index 23333a9d8..000000000 --- a/tests/internals/pluginfactory/badversionsource/foo.py +++ /dev/null @@ -1,11 +0,0 @@ -from buildstream import Source - - -class FooSource(Source): - - # We have a little while until we have to manually modify this - BST_REQUIRED_VERSION_MAJOR = 5000 - - -def setup(): - return FooSource diff --git a/tests/internals/pluginfactory/customelement/__init__.py b/tests/internals/pluginfactory/customelement/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/internals/pluginfactory/customelement/__init__.py +++ /dev/null diff --git a/tests/internals/pluginfactory/customelement/foo.py b/tests/internals/pluginfactory/customelement/foo.py deleted file mode 100644 index 260de8b27..000000000 --- a/tests/internals/pluginfactory/customelement/foo.py +++ /dev/null @@ -1,9 +0,0 @@ -from buildstream import Element - - -class FooElement(Element): - pass - - -def setup(): - return FooElement diff --git a/tests/internals/pluginfactory/customsource/__init__.py b/tests/internals/pluginfactory/customsource/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/internals/pluginfactory/customsource/__init__.py +++ /dev/null diff --git a/tests/internals/pluginfactory/customsource/foo.py b/tests/internals/pluginfactory/customsource/foo.py deleted file mode 100644 index de78a00ce..000000000 --- a/tests/internals/pluginfactory/customsource/foo.py +++ /dev/null @@ -1,9 +0,0 @@ -from buildstream import Source - - -class FooSource(Source): - pass - - -def setup(): - return FooSource diff --git a/tests/internals/pluginfactory/nosetup/__init__.py b/tests/internals/pluginfactory/nosetup/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/internals/pluginfactory/nosetup/__init__.py +++ /dev/null diff --git a/tests/internals/pluginfactory/nosetup/foo.py b/tests/internals/pluginfactory/nosetup/foo.py deleted file mode 100644 index 0b5a4fa7e..000000000 --- a/tests/internals/pluginfactory/nosetup/foo.py +++ /dev/null @@ -1,8 +0,0 @@ -# A plugin is supposed to define a setup function -# which returns the type that the plugin provides -# -# This plugin fails to do so - - -def useless(): - print("Hello World") diff --git a/tests/internals/pluginfactory/notatype/__init__.py b/tests/internals/pluginfactory/notatype/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/internals/pluginfactory/notatype/__init__.py +++ /dev/null diff --git a/tests/internals/pluginfactory/notatype/foo.py b/tests/internals/pluginfactory/notatype/foo.py deleted file mode 100644 index 311a4fb32..000000000 --- a/tests/internals/pluginfactory/notatype/foo.py +++ /dev/null @@ -1,6 +0,0 @@ -# Plugins are supposed to return a subclass type -# of Source or Element, depending on plugin type. - - -def setup(): - return 5 diff --git a/tests/internals/pluginfactory/wrongtype/__init__.py b/tests/internals/pluginfactory/wrongtype/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/internals/pluginfactory/wrongtype/__init__.py +++ /dev/null diff --git a/tests/internals/pluginfactory/wrongtype/foo.py b/tests/internals/pluginfactory/wrongtype/foo.py deleted file mode 100644 index 37d9f6bfe..000000000 --- a/tests/internals/pluginfactory/wrongtype/foo.py +++ /dev/null @@ -1,12 +0,0 @@ -# Plugins are supposed to return a subclass type -# of Source or Element, depending on plugin type. -# -# This one fails the requirement - - -class Foo: - pass - - -def setup(): - return Foo diff --git a/tests/internals/pluginloading.py b/tests/internals/pluginloading.py index 0685b09da..1f4446541 100644 --- a/tests/internals/pluginloading.py +++ b/tests/internals/pluginloading.py @@ -3,8 +3,6 @@ import os import pytest from buildstream._project import Project -from buildstream._exceptions import LoadError -from buildstream.exceptions import LoadErrorReason from buildstream._pipeline import Pipeline from tests.testutils import dummy_context @@ -38,23 +36,3 @@ def test_customelement(datafiles, tmpdir): basedir = str(datafiles) with create_pipeline(tmpdir, basedir, "simple.bst") as targets: assert targets[0].get_kind() == "foo" - - -@pytest.mark.datafiles(os.path.join(DATA_DIR, "badversionsource")) -def test_badversionsource(datafiles, tmpdir): - basedir = str(datafiles) - - with pytest.raises(LoadError) as exc, create_pipeline(tmpdir, basedir, "simple.bst"): - pass - - assert exc.value.reason == LoadErrorReason.UNSUPPORTED_PLUGIN - - -@pytest.mark.datafiles(os.path.join(DATA_DIR, "badversionelement")) -def test_badversionelement(datafiles, tmpdir): - basedir = str(datafiles) - - with pytest.raises(LoadError) as exc, create_pipeline(tmpdir, basedir, "simple.bst"): - pass - - assert exc.value.reason == LoadErrorReason.UNSUPPORTED_PLUGIN diff --git a/tests/internals/pluginloading/badversionelement/customelements/__init__.py b/tests/internals/pluginloading/badversionelement/customelements/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/internals/pluginloading/badversionelement/customelements/__init__.py +++ /dev/null diff --git a/tests/internals/pluginloading/badversionelement/customelements/foo.py b/tests/internals/pluginloading/badversionelement/customelements/foo.py deleted file mode 100644 index 75536e87f..000000000 --- a/tests/internals/pluginloading/badversionelement/customelements/foo.py +++ /dev/null @@ -1,19 +0,0 @@ -from buildstream import Element - - -class FooElement(Element): - - BST_FORMAT_VERSION = 5 - - def preflight(self): - pass - - def configure(self, node): - pass - - def get_unique_key(self): - return {} - - -def setup(): - return FooElement diff --git a/tests/internals/pluginloading/badversionelement/elements/simple.bst b/tests/internals/pluginloading/badversionelement/elements/simple.bst deleted file mode 100644 index f949dc5b5..000000000 --- a/tests/internals/pluginloading/badversionelement/elements/simple.bst +++ /dev/null @@ -1,4 +0,0 @@ -kind: foo -description: Custom foo element -config: - some: thing diff --git a/tests/internals/pluginloading/badversionelement/project.conf b/tests/internals/pluginloading/badversionelement/project.conf deleted file mode 100644 index bff73e251..000000000 --- a/tests/internals/pluginloading/badversionelement/project.conf +++ /dev/null @@ -1,10 +0,0 @@ -name: pony -min-version: 2.0 -element-path: elements - -plugins: -- origin: local - path: customelements - elements: - # We provided bar at version 5, should be a conflict. - foo: 10 diff --git a/tests/internals/pluginloading/badversionsource/customsources/__init__.py b/tests/internals/pluginloading/badversionsource/customsources/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/tests/internals/pluginloading/badversionsource/customsources/__init__.py +++ /dev/null diff --git a/tests/internals/pluginloading/badversionsource/customsources/foo.py b/tests/internals/pluginloading/badversionsource/customsources/foo.py deleted file mode 100644 index 628f99b29..000000000 --- a/tests/internals/pluginloading/badversionsource/customsources/foo.py +++ /dev/null @@ -1,16 +0,0 @@ -from buildstream import Source - - -class BarSource(Source): - - BST_FORMAT_VERSION = 5 - - def preflight(self): - pass - - def configure(self, node): - pass - - -def setup(): - return BarSource diff --git a/tests/internals/pluginloading/badversionsource/elements/simple.bst b/tests/internals/pluginloading/badversionsource/elements/simple.bst deleted file mode 100644 index 7e0cc43b7..000000000 --- a/tests/internals/pluginloading/badversionsource/elements/simple.bst +++ /dev/null @@ -1,6 +0,0 @@ -kind: autotools -description: Custom foo source -sources: -- kind: foo - ref: 1.2.3 - uri: http://ponyland.com diff --git a/tests/internals/pluginloading/badversionsource/project.conf b/tests/internals/pluginloading/badversionsource/project.conf deleted file mode 100644 index cd5b2dc82..000000000 --- a/tests/internals/pluginloading/badversionsource/project.conf +++ /dev/null @@ -1,10 +0,0 @@ -name: pony -min-version: 2.0 -element-path: elements - -plugins: -- origin: local - path: customsources - sources: - # We provided bar at version 5, should be a conflict. - foo: 10 diff --git a/tests/internals/pluginloading/customelement/project.conf b/tests/internals/pluginloading/customelement/project.conf index 6a33cc504..2619bdf82 100644 --- a/tests/internals/pluginloading/customelement/project.conf +++ b/tests/internals/pluginloading/customelement/project.conf @@ -5,4 +5,4 @@ plugins: - origin: local path: pluginelements elements: - foo: 0 + - foo diff --git a/tests/internals/pluginloading/customsource/project.conf b/tests/internals/pluginloading/customsource/project.conf index 87d9b5d09..5cb6da537 100644 --- a/tests/internals/pluginloading/customsource/project.conf +++ b/tests/internals/pluginloading/customsource/project.conf @@ -5,4 +5,4 @@ plugins: - origin: local path: pluginsources sources: - foo: 0 + - foo diff --git a/tests/plugins/deprecationwarnings/project/project.conf b/tests/plugins/deprecationwarnings/project/project.conf index 8a2536cab..9e03afe0a 100644 --- a/tests/plugins/deprecationwarnings/project/project.conf +++ b/tests/plugins/deprecationwarnings/project/project.conf @@ -12,4 +12,4 @@ plugins: - origin: local path: plugins/elements elements: - deprecated_plugin: 0 + - deprecated_plugin diff --git a/tests/sourcecache/project/project.conf b/tests/sourcecache/project/project.conf index dde417f71..e3635e8a7 100644 --- a/tests/sourcecache/project/project.conf +++ b/tests/sourcecache/project/project.conf @@ -9,4 +9,4 @@ plugins: - origin: local path: plugins/elements elements: - always_fail: 0
\ No newline at end of file + - always_fail diff --git a/tests/sources/no-fetch-cached/project.conf b/tests/sources/no-fetch-cached/project.conf index eeb00d432..ef5b4a3b9 100644 --- a/tests/sources/no-fetch-cached/project.conf +++ b/tests/sources/no-fetch-cached/project.conf @@ -6,4 +6,4 @@ plugins: - origin: local path: plugins/sources sources: - always_cached: 0 + - always_cached diff --git a/tests/sources/previous_source_access/project.conf b/tests/sources/previous_source_access/project.conf index 2d3bb1fb2..b08df35f0 100644 --- a/tests/sources/previous_source_access/project.conf +++ b/tests/sources/previous_source_access/project.conf @@ -11,4 +11,4 @@ plugins: - origin: local path: plugins/sources sources: - foo_transform: 0 + - foo_transform diff --git a/tests/sources/project_key_test/project.conf b/tests/sources/project_key_test/project.conf index fb9ba1f88..6b82d4055 100644 --- a/tests/sources/project_key_test/project.conf +++ b/tests/sources/project_key_test/project.conf @@ -8,4 +8,4 @@ plugins: - origin: local path: plugins/sources sources: - key-test: 0
\ No newline at end of file + - key-test |