Пример #1
0
    def test_relative_path_conflicts_with_both(self):
        repo = Repository(repo_id='test')
        config = {'relative_url': 'zoo_repo'}
        conflicting_distributor = [{
            'repo_id': 'zoo_repo',
            'config': {
                'relative_url': 'zoo_repo'
            }
        }, {
            'repo_id': 'zoo_repo',
            'config': {}
        }]
        conduit = mock.MagicMock()
        conduit.get_repo_distributors_by_relative_url = mock.MagicMock(
            return_value=conflicting_distributor)
        error_messages = []

        configuration._check_for_relative_path_conflicts(
            repo, config, conduit, error_messages)
        messages = [
            ('Relative URL [zoo_repo] for repository [test] conflicts with existing '
             'relative URL [zoo_repo] for repository [zoo_repo]'),
            ('Relative URL [zoo_repo] for repository [test] conflicts with repo id for '
             'existing repository [zoo_repo]')
        ]
        self.assertEqual(len(error_messages), 2)
        self.assertEqual(error_messages, messages)
Пример #2
0
def _validate_relative_url(config, setting_name, repo, config_conduit):
    """
    Ensure that the setting_name from config is a valid relative URL path. This setting is not
    required.

    :param config: The config to validate
    :type  config:       pulp.plugins.config.PluginCallConfiguration
    :param setting_name: The name of the setting that needs to be validated
    :type  setting_name: str
    :param repo: The repository that will use the distributor
    :type  repo: pulp.plugins.model.Repository
    :param config_conduit: Configuration Conduit;
    :type config_conduit: pulp.plugins.conduits.repo_validate.RepoConfigConduit
    """
    relative_url = config.get(setting_name)
    if relative_url is None:
        return

    if not isinstance(relative_url, basestring):
        msg = _('Configuration value for [relative_url] must be a string, but is a %(t)s')
        raise configuration_utils.ValidationError(msg % {'t': str(type(relative_url))})

    elif os.path.isabs(relative_url):
        msg = _("Value for [relative_url]  must be be a relative path: %s" % relative_url)
        raise configuration_utils.ValidationError(msg % {'r': relative_url})
    error_message = []
    _check_for_relative_path_conflicts(repo, config, config_conduit, error_message)
    if error_message:
        raise configuration_utils.ValidationError(error_message[0])
Пример #3
0
    def test_relative_path_conflicts_none(self):
        repo = Repository(repo_id='test')
        config = {}
        conduit = mock.MagicMock()
        conduit.get_repo_distributors_by_relative_url = mock.MagicMock(return_value=[])
        error_messages = []

        configuration._check_for_relative_path_conflicts(repo, config, conduit, error_messages)

        self.assertEqual(conduit.get_repo_distributors_by_relative_url.call_count, 1)
        self.assertEqual(len(error_messages), 0)
Пример #4
0
    def test_relative_path_conflicts_none(self):
        repo = Repository('test')
        config = {}
        conduit = mock.MagicMock()
        conduit.get_repo_distributors_by_relative_url = mock.MagicMock(return_value=[])
        error_messages = []

        configuration._check_for_relative_path_conflicts(repo, config, conduit, error_messages)

        self.assertEqual(conduit.get_repo_distributors_by_relative_url.call_count, 1)
        self.assertEqual(len(error_messages), 0)
    def test_relative_path_conflicts_conflicts(self):
        repo = Repository('test')
        config = {}
        conflicting_distributor = {'repo_id': 'i_suck',
                                   'config': {'relative_url': 'test'}}
        conduit = mock.MagicMock()
        conduit.get_repo_distributors_by_relative_url = mock.MagicMock(return_value=[conflicting_distributor])
        error_messages = []

        configuration._check_for_relative_path_conflicts(repo, config, conduit, error_messages)

        self.assertEqual(len(error_messages), 1)
Пример #6
0
    def test_relative_path_conflicts_conflicts(self):
        repo = Repository('test')
        config = {}
        conflicting_distributor = {'repo_id': 'i_suck',
                                   'config': {'relative_url': 'test'}}
        conduit = mock.MagicMock()
        conduit.get_repo_distributors_by_relative_url = mock.MagicMock(
            return_value=[conflicting_distributor])
        error_messages = []

        configuration._check_for_relative_path_conflicts(repo, config, conduit, error_messages)

        self.assertEqual(len(error_messages), 1)
Пример #7
0
    def test_relative_path_conflicts_with_repo_id(self):
        repo = Repository(repo_id="test")
        config = {"relative_url": "zoo_repo"}
        conflicting_distributor = {"repo_id": "zoo_repo", "config": {}}
        conduit = mock.MagicMock()
        conduit.get_repo_distributors_by_relative_url = mock.MagicMock(return_value=[conflicting_distributor])
        error_messages = []

        configuration._check_for_relative_path_conflicts(repo, config, conduit, error_messages)

        self.assertEqual(len(error_messages), 1)
        message = (
            "Relative URL [zoo_repo] for repository [test] conflicts with repo id for " "existing repository [zoo_repo]"
        )
        self.assertEqual(error_messages, [message])
Пример #8
0
    def test_relative_path_conflicts_with_repo_id(self):
        repo = Repository(repo_id='test')
        config = {'relative_url': 'zoo_repo'}
        conflicting_distributor = {'repo_id': 'zoo_repo',
                                   'config': {}}
        conduit = mock.MagicMock()
        conduit.get_repo_distributors_by_relative_url = mock.MagicMock(
            return_value=[conflicting_distributor])
        error_messages = []

        configuration._check_for_relative_path_conflicts(repo, config, conduit, error_messages)

        self.assertEqual(len(error_messages), 1)
        message = ('Relative URL [zoo_repo] for repository [test] conflicts with repo id for '
                   'existing repository [zoo_repo]')
        self.assertEqual(error_messages, [message])
Пример #9
0
    def test_relative_path_conflicts_with_relative_path(self):
        repo = Repository(repo_id='test')
        config = {'relative_url': 'test'}
        conflicting_distributor = {'repo_id': 'zoo_repo',
                                   'config': {'relative_url': 'test'}}
        conduit = mock.MagicMock()
        conduit.get_repo_distributors_by_relative_url = mock.MagicMock(
            return_value=[conflicting_distributor])
        error_messages = []

        configuration._check_for_relative_path_conflicts(repo, config, conduit, error_messages)

        self.assertEqual(len(error_messages), 1)
        message = ('Relative URL [test] for repository [test] conflicts with existing relative URL'
                   ' [test] for repository [zoo_repo]')
        self.assertEqual(error_messages, [message])
Пример #10
0
    def test_relative_path_conflicts_with_both(self):
        repo = Repository('test')
        config = {'relative_url': 'zoo_repo'}
        conflicting_distributor = [{'repo_id': 'zoo_repo',
                                   'config': {'relative_url': 'zoo_repo'}},
                                   {'repo_id': 'zoo_repo',
                                   'config': {}}]
        conduit = mock.MagicMock()
        conduit.get_repo_distributors_by_relative_url = mock.MagicMock(
            return_value=conflicting_distributor)
        error_messages = []

        configuration._check_for_relative_path_conflicts(repo, config, conduit, error_messages)
        messages = [('Relative URL [zoo_repo] for repository [test] conflicts with existing '
                     'relative URL [zoo_repo] for repository [zoo_repo]'),
                    ('Relative URL [zoo_repo] for repository [test] conflicts with repo id for '
                     'existing repository [zoo_repo]')]
        self.assertEqual(len(error_messages), 2)
        self.assertEqual(error_messages, messages)