Beispiel #1
0
 def test_plugin_missing_field(plugin_config_file, plugin_config_content):
     with pytest.raises(exceptions.SchemaValidationError) as err_info:
         validator = PluginValidator.from_config_content(
             plugin_config_file, plugin_config_content,
             const.PLUGIN_CONFIG_SCHEMA)
         validator.validate_plugin_config()
     message = err_info.value.message
     assert "'srcDir' is a required property" in message
Beispiel #2
0
 def test_plugin_id(plugin_config_file, plugin_config_content, expected):
     try:
         validator = PluginValidator.from_config_content(
             plugin_config_file, plugin_config_content,
             const.PLUGIN_CONFIG_SCHEMA)
         validator.validate_plugin_config()
     except exceptions.SchemaValidationError as err_info:
         message = err_info.message
         assert expected in message
Beispiel #3
0
 def test_multiple_validation_errors(plugin_config_file,
                                     plugin_config_content):
     with pytest.raises(exceptions.SchemaValidationError) as err_info:
         validator = PluginValidator.from_config_content(
             plugin_config_file, plugin_config_content,
             const.PLUGIN_CONFIG_SCHEMA)
         validator.validate_plugin_config()
     message = err_info.value.message
     assert "'srcDir' is a required property" in message
     assert "'xxx' is not one of ['UNIX', 'WINDOWS']" in message
Beispiel #4
0
    def test_plugin_bad_schema(plugin_config_file, plugin_config_content,
                               schema_file):
        with pytest.raises(exceptions.UserError) as err_info:
            validator = PluginValidator.from_config_content(
                plugin_config_file, plugin_config_content, schema_file)
            validator.validate_plugin_config()

        message = err_info.value.message
        assert ('Failed to load schemas because {} is not a valid json file.'
                ' Error: Extra data: line 2 column 1 - line 2 column 9'
                ' (char 19 - 27)'.format(schema_file)) in message
Beispiel #5
0
 def test_plugin_minimum_lua_version_without_lua_name(
         plugin_config_file, plugin_config_content):
     try:
         validator = PluginValidator.from_config_content(
             plugin_config_file, plugin_config_content,
             const.PLUGIN_CONFIG_SCHEMA)
         validator.validate_plugin_config()
     except exceptions.ValidationFailedError as err_info:
         message = err_info.message
         assert ('Failed to process property "minimumLuaVersion" without '
                 '"luaName" set in the plugin config.' in message)
Beispiel #6
0
    def test_plugin_additional_properties(src_dir, plugin_config_file,
                                          plugin_config_content):
        # Adding an unknown key
        plugin_config_content['unknown_key'] = 'unknown_value'

        try:
            validator = PluginValidator.from_config_content(
                plugin_config_file, plugin_config_content,
                const.PLUGIN_CONFIG_SCHEMA)
            validator.validate_plugin_config()
        except exceptions.SchemaValidationError as err_info:
            message = err_info.message
            assert ("Additional properties are not allowed"
                    " ('unknown_key' was unexpected)" in message)
Beispiel #7
0
    def test_plugin_missing_field(plugin_config_file):
        plugin_config_content = OrderedDict([
            ('name', 'staged'.encode('utf-8')), ('version', '0.1.0'),
            ('language', 'PYTHON27'), ('hostTypes', ['UNIX']),
            ('pluginType', 'STAGED'.encode('utf-8')),
            ('manualDiscovery', True),
            ('entryPoint', 'staged_plugin:staged'.encode('utf-8')),
            ('schemaFile', 'schema.json'.encode('utf-8'))
        ])

        with pytest.raises(exceptions.SchemaValidationError) as err_info:
            validator = PluginValidator.from_config_content(
                plugin_config_file, plugin_config_content,
                util_classes.PLUGIN_CONFIG_SCHEMA, ValidationMode.ERROR)
            validator.validate()
        message = err_info.value.message
        assert "'srcDir' is a required property" in message
Beispiel #8
0
    def test_plugin_valid_content(mock_import_plugin, mock_relative_path,
                                  src_dir, plugin_config_file):
        plugin_config_content = OrderedDict([
            ('id', str(uuid.uuid4())), ('name', 'staged'.encode('utf-8')),
            ('version', '0.1.0'), ('language', 'PYTHON27'),
            ('hostTypes', ['UNIX']), ('pluginType', 'STAGED'.encode('utf-8')),
            ('manualDiscovery', True),
            ('entryPoint', 'staged_plugin:staged'.encode('utf-8')),
            ('srcDir', src_dir), ('schemaFile', 'schema.json'.encode('utf-8'))
        ])

        validator = PluginValidator.from_config_content(
            plugin_config_file, plugin_config_content,
            util_classes.PLUGIN_CONFIG_SCHEMA, ValidationMode.ERROR)
        validator.validate()

        mock_import_plugin.assert_called()
Beispiel #9
0
    def test_plugin_info_warn_mode(plugin_config_file, validation_mode):
        plugin_config_content = OrderedDict([
            ('id', str(uuid.uuid4())), ('name', 'staged'.encode('utf-8')),
            ('version', '0.1.0'), ('language', 'PYTHON27'),
            ('hostTypes', ['UNIX']), ('pluginType', 'STAGED'.encode('utf-8')),
            ('manualDiscovery', True),
            ('entryPoint', 'staged_plugin:staged'.encode('utf-8')),
            ('schemaFile', 'schema.json'.encode('utf-8'))
        ])
        err_info = None
        try:
            validator = PluginValidator.from_config_content(
                plugin_config_file, plugin_config_content,
                util_classes.PLUGIN_CONFIG_SCHEMA, validation_mode)
            validator.validate()
        except Exception as e:
            err_info = e

        assert err_info is None
Beispiel #10
0
    def test_plugin_bad_schema(plugin_config_file, schema_file):
        plugin_config_content = OrderedDict([
            ('name', 'staged'.encode('utf-8')),
            ('prettyName', 'StagedPlugin'.encode('utf-8')),
            ('version', '0.1.0'), ('language', 'PYTHON27'),
            ('hostTypes', ['UNIX']), ('pluginType', 'STAGED'.encode('utf-8')),
            ('manualDiscovery', True),
            ('entryPoint', 'staged_plugin:staged'.encode('utf-8')),
            ('srcDir', src_dir), ('schemaFile', 'schema.json'.encode('utf-8'))
        ])
        with pytest.raises(exceptions.UserError) as err_info:
            validator = PluginValidator.from_config_content(
                plugin_config_file, plugin_config_content, schema_file,
                ValidationMode.ERROR)
            validator.validate()

        message = err_info.value.message
        assert ('Failed to load schemas because {} is not a valid json file.'
                ' Error: Extra data: line 2 column 1 - line 2 column 9'
                ' (char 19 - 27)'.format(schema_file)) in message
Beispiel #11
0
    def test_plugin_id(mock_import_plugin, mock_relative_path, src_dir,
                       plugin_config_file, plugin_id, expected):
        plugin_config_content = OrderedDict([
            ('id', plugin_id.encode('utf-8')), ('name', 'python_vfiles'),
            ('version', '1.0.0'), ('language', 'PYTHON27'),
            ('hostTypes', ['UNIX']), ('pluginType', 'STAGED'.encode('utf-8')),
            ('manualDiscovery', True),
            ('entryPoint', 'staged_plugin:staged'.encode('utf-8')),
            ('srcDir', src_dir), ('schemaFile', 'schema.json'.encode('utf-8'))
        ])

        try:
            validator = PluginValidator.from_config_content(
                plugin_config_file, plugin_config_content,
                util_classes.PLUGIN_CONFIG_SCHEMA, ValidationMode.ERROR)
            validator.validate()
            mock_import_plugin.assert_called()
        except exceptions.SchemaValidationError as err_info:
            message = err_info.message
            assert expected in message
Beispiel #12
0
    def test_plugin_additional_properties(src_dir, plugin_config_file):
        plugin_config_content = OrderedDict([
            ('id', str(uuid.uuid4())), ('name', 'staged'.encode('utf-8')),
            ('version', '1.0.0'), ('language', 'PYTHON27'),
            ('hostTypes', ['UNIX']), ('pluginType', 'STAGED'.encode('utf-8')),
            ('manualDiscovery', True),
            ('entryPoint', 'staged_plugin:staged'.encode('utf-8')),
            ('unknown_key', 'unknown_value'.encode('utf-8')),
            ('srcDir', src_dir), ('schemaFile', 'schema.json'.encode('utf-8'))
        ])

        try:
            validator = PluginValidator.from_config_content(
                plugin_config_file, plugin_config_content,
                util_classes.PLUGIN_CONFIG_SCHEMA, ValidationMode.ERROR)
            validator.validate()
        except exceptions.SchemaValidationError as err_info:
            message = err_info.message
            assert "Additional properties are not allowed " \
                   "('unknown_key' was unexpected)" in message
Beispiel #13
0
def get_plugin_manifest(plugin_config_file,
                        plugin_config_content,
                        stop_build,
                        skip_id_validation=False):
    """
    Validates the given plugin config content using a pre-defined schema.
    Plugin config file name is used to get the absolute path of plugin source
    directory. Returns a manifest which indicates method implemented in the
    plugin module.
    """
    validation_mode = (ValidationMode.ERROR
                       if stop_build else ValidationMode.WARNING)
    plugin_config_schema_file = (
        util_classes.PLUGIN_CONFIG_SCHEMA_NO_ID_VALIDATION
        if skip_id_validation else util_classes.PLUGIN_CONFIG_SCHEMA)
    validator = PluginValidator.from_config_content(plugin_config_file,
                                                    plugin_config_content,
                                                    plugin_config_schema_file,
                                                    validation_mode)
    validator.validate()
    return validator.result
Beispiel #14
0
 def test_plugin_valid_content(src_dir, plugin_config_file,
                               plugin_config_content):
     validator = PluginValidator.from_config_content(
         plugin_config_file, plugin_config_content,
         const.PLUGIN_CONFIG_SCHEMA)
     validator.validate_plugin_config()