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)
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])
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)
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)
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)
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])
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])
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])
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)