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 test_remove_cert_based_auth(self, mock_delete_protected_repo): repo = Repository(repo_id='test') config = {} configuration.remove_cert_based_auth(repo, config) mock_delete_protected_repo.assert_called_once_with(repo.repo_id)
def test_cert_based_auth_ca_no_cert(self, mock_delete_protected_repo): repo = Repository(repo_id='test') config = {'auth_ca': 'looks not so legit'} configuration.process_cert_based_auth(repo, config) mock_delete_protected_repo.assert_called_once_with(repo.repo_id)
def test_validate_config(self, *mock_methods): config_kwargs = { 'http': True, 'https': True, 'relative_url': None, 'auth_ca': 'CA', 'auth_cert': 'CERT', 'checksum_type': 'sha256', 'http_publish_dir': '/http/path/', 'https_publish_dir': 'https/path/', 'protected': True, 'skip': { 'drpms': 1 }, 'skip_pkg_tags': True, 'generate_sqlite': False } repo = Repository('test') config = self._generate_call_config(**config_kwargs) conduit = RepoConfigConduit(TYPE_ID_DISTRIBUTOR_YUM) valid, reasons = configuration.validate_config(repo, config, conduit) for mock_method in mock_methods: self.assertEqual(mock_method.call_count, 1) self.assertTrue(valid) self.assertEqual(reasons, None)
def test_get_repo_relative_path_repo_id(self): repo_id = 'Highlander' repo = Repository(repo_id) config = self._generate_call_config() relative_dir = configuration.get_repo_relative_path(repo, config) self.assertEqual(relative_dir, repo_id)
def test_get_repo_relative_path_configured(self): repo_id = 'Spaniard' repo = Repository(repo_id) configured_relative_url = '/there/can/be/only/one/' config = self._generate_call_config(relative_url=configured_relative_url) relative_url = configuration.get_repo_relative_path(repo, config) # get_relative_path should strip off the leading '/' self.assertEqual(relative_url, configured_relative_url[1:])
def test_cert_based_auth_ca_and_cert(self, mock_write_consumer_cert_bundle, mock_add_protected_repo): repo = Repository(repo_id='test') config = {'auth_ca': 'looks legit', 'auth_cert': '1234567890'} bundle = {'ca': config['auth_ca'], 'cert': config['auth_cert']} configuration.process_cert_based_auth(repo, config) mock_write_consumer_cert_bundle.assert_called_once_with(repo.repo_id, bundle) mock_add_protected_repo.assert_called_once_with(repo.repo_id, repo.repo_id)
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_validate_config_unsupported_keys(self, mock_check): repo = Repository('test') config = self._generate_call_config(http=True, https=False, relative_url=None, foo='bar') conduit = RepoConfigConduit(TYPE_ID_DISTRIBUTOR_YUM) valid, reasons = configuration.validate_config(repo, config, conduit) self.assertFalse(valid) expected_reason = 'Configuration key [foo] is not supported' self.assertEqual(reasons, expected_reason) self.assertEqual(mock_check.call_count, 1)
def test_validate_config_missing_required(self, mock_check): repo = Repository('test') config = self._generate_call_config(http=True, https=False) conduit = RepoConfigConduit(TYPE_ID_DISTRIBUTOR_YUM) valid, reasons = configuration.validate_config(repo, config, conduit) self.assertFalse(valid) expected_reason = 'Configuration key [relative_url] is required, but was not provided' self.assertEqual(reasons, expected_reason) mock_check.assert_called_once_with(repo, config.flatten(), conduit, [expected_reason])
def test_gpg_key(self, mock_process_auth): config_dict = { 'http': True, 'https': True, 'relative_url': 'a/b/c', 'gpgkey': '/tmp/my.gpg', } config = self._generate_call_config(**config_dict) valid, reason = configuration.validate_config(Repository('myrepo'), config, mock.MagicMock()) self.assertTrue(valid is True) self.assertTrue(reason is None)
def test_validate_config_https_http_false(self, mock_check): repo = Repository('test') config = self._generate_call_config(http=False, https=False, relative_url=None) conduit = RepoConfigConduit(TYPE_ID_DISTRIBUTOR_YUM) valid, reasons = configuration.validate_config(repo, config, conduit) self.assertFalse(valid) expected_reason = ('Settings serve via http and https are both set to false.' ' At least one option should be set to true.') self.assertEqual(reasons, expected_reason) self.assertEqual(mock_check.call_count, 1)
def test_validate_config__repocfg_gpg_cmd(self): repo = Repository('test') config = self._generate_call_config(http=False, https=True, relative_url="a/b") config.repo_plugin_config["gpg_cmd"] = "this should fail" conduit = RepoConfigConduit(TYPE_ID_DISTRIBUTOR_YUM) valid, reasons = configuration.validate_config(repo, config, conduit) self.assertFalse(valid) expected_reason = ('Configuration key [gpg_cmd] is not allowed ' 'in repository plugin configuration') self.assertEqual(reasons, expected_reason)
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_cert_based_auth_no_ca_no_cert(self, mock_delete_protected_repo): repo = Repository(repo_id='test') configuration.process_cert_based_auth(repo, {}) mock_delete_protected_repo.assert_called_once_with(repo.repo_id)