Exemplo n.º 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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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:])
Exemplo n.º 7
0
    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)
Exemplo n.º 8
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)
Exemplo n.º 9
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)
Exemplo n.º 10
0
    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])
Exemplo n.º 11
0
    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)
Exemplo n.º 12
0
    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)
Exemplo n.º 13
0
    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)
Exemplo n.º 14
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])
Exemplo n.º 15
0
    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)