| |
@@ -33,6 +33,7 @@
|
| |
import pytest
|
| |
|
| |
from tests import app, init_data, clean_database, reuse_component_init_data
|
| |
+ from tests.test_scm import base_dir as scm_base_dir
|
| |
from module_build_service.errors import UnprocessableEntity
|
| |
from module_build_service.models import ModuleBuild
|
| |
from module_build_service import db, version, Modulemd
|
| |
@@ -43,6 +44,7 @@
|
| |
user = ('Homer J. Simpson', set(['packager']))
|
| |
other_user = ('some_other_user', set(['packager']))
|
| |
anonymous_user = ('anonymous', set(['packager']))
|
| |
+ import_module_user = ('Import M. King', set(['mbs-import-module']))
|
| |
base_dir = dirname(dirname(__file__))
|
| |
|
| |
|
| |
@@ -1191,3 +1193,181 @@
|
| |
def test_cors_header_decorator(self):
|
| |
rv = self.client.get('/module-build-service/1/module-builds/')
|
| |
assert rv.headers['Access-Control-Allow-Origin'] == '*'
|
| |
+
|
| |
+ @pytest.mark.parametrize('api_version', [1, 2])
|
| |
+ @patch('module_build_service.auth.get_user', return_value=user)
|
| |
+ @patch.object(module_build_service.config.Config, 'allowed_groups_to_import_module',
|
| |
+ new_callable=PropertyMock, return_value=set())
|
| |
+ def test_import_build_disabled(self, mocked_groups, mocked_get_user, api_version):
|
| |
+ post_url = '/module-build-service/{0}/import-module/'.format(api_version)
|
| |
+ rv = self.client.post(post_url)
|
| |
+ data = json.loads(rv.data)
|
| |
+
|
| |
+ assert data['error'] == 'Forbidden'
|
| |
+ assert data['message'] == (
|
| |
+ 'Import module API is disabled. Set '
|
| |
+ '\'ALLOWED_GROUPS_TO_IMPORT_MODULE\' configuration value first.')
|
| |
+
|
| |
+ @pytest.mark.parametrize('api_version', [1, 2])
|
| |
+ @patch('module_build_service.auth.get_user', return_value=user)
|
| |
+ def test_import_build_user_not_allowed(self, mocked_get_user, api_version):
|
| |
+ post_url = '/module-build-service/{0}/import-module/'.format(api_version)
|
| |
+ rv = self.client.post(post_url)
|
| |
+ data = json.loads(rv.data)
|
| |
+
|
| |
+ assert data['error'] == 'Forbidden'
|
| |
+ assert data['message'] == (
|
| |
+ 'Homer J. Simpson is not in any of '
|
| |
+ 'set([\'mbs-import-module\']), only set([\'packager\'])')
|
| |
+
|
| |
+ @pytest.mark.parametrize('api_version', [1, 2])
|
| |
+ @patch('module_build_service.auth.get_user', return_value=import_module_user)
|
| |
+ def test_import_build_scm_invalid_json(self, mocked_get_user, api_version):
|
| |
+ post_url = '/module-build-service/{0}/import-module/'.format(api_version)
|
| |
+ rv = self.client.post(post_url, data='')
|
| |
+ data = json.loads(rv.data)
|
| |
+
|
| |
+ assert data['error'] == 'Bad Request'
|
| |
+ assert data['message'] == 'Invalid JSON submitted'
|
| |
+
|
| |
+ @pytest.mark.parametrize('api_version', [1, 2])
|
| |
+ @patch('module_build_service.auth.get_user', return_value=import_module_user)
|
| |
+ def test_import_build_scm_url_not_allowed(self, mocked_get_user, api_version):
|
| |
+ post_url = '/module-build-service/{0}/import-module/'.format(api_version)
|
| |
+ rv = self.client.post(
|
| |
+ post_url,
|
| |
+ data=json.dumps({'scmurl': 'file://' + scm_base_dir + '/mariadb'}))
|
| |
+ data = json.loads(rv.data)
|
| |
+
|
| |
+ assert data['error'] == 'Forbidden'
|
| |
+ assert data['message'] == (
|
| |
+ 'The submitted scmurl '
|
| |
+ 'file:///opt/module_build_service/tests/scm_data/mariadb is not allowed')
|
| |
+
|
| |
+ @pytest.mark.parametrize('api_version', [1, 2])
|
| |
+ @patch('module_build_service.auth.get_user', return_value=import_module_user)
|
| |
+ @patch.object(module_build_service.config.Config, 'allow_custom_scmurls',
|
| |
+ new_callable=PropertyMock, return_value=True)
|
| |
+ def test_import_build_scm_url_not_in_list(self, mocked_scmurls, mocked_get_user,
|
| |
+ api_version):
|
| |
+ post_url = '/module-build-service/{0}/import-module/'.format(api_version)
|
| |
+ rv = self.client.post(
|
| |
+ post_url,
|
| |
+ data=json.dumps({'scmurl': 'file://' + scm_base_dir + (
|
| |
+ '/mariadb?#96f4d6d3b7aa311a519e66a1e6eae3ff7411d643')}))
|
| |
+ data = json.loads(rv.data)
|
| |
+
|
| |
+ assert data['error'] == 'Forbidden'
|
| |
+ assert data['message'] == (
|
| |
+ 'file:///opt/module_build_service/tests/scm_data/mariadb'
|
| |
+ '?#96f4d6d3b7aa311a519e66a1e6eae3ff7411d643 '
|
| |
+ 'is not in the list of allowed SCMs')
|
| |
+
|
| |
+ @pytest.mark.parametrize('api_version', [1, 2])
|
| |
+ @patch('module_build_service.auth.get_user', return_value=import_module_user)
|
| |
+ @patch.object(module_build_service.config.Config, 'scmurls',
|
| |
+ new_callable=PropertyMock, return_value=['file://'])
|
| |
+ def test_import_build_scm(self, mocked_scmurls, mocked_get_user, api_version):
|
| |
+ post_url = '/module-build-service/{0}/import-module/'.format(api_version)
|
| |
+ rv = self.client.post(
|
| |
+ post_url,
|
| |
+ data=json.dumps({'scmurl': 'file://' + scm_base_dir + (
|
| |
+ '/mariadb?#d099cd9fcd921044406f27ba9c64b6297c425492')}))
|
| |
+ data = json.loads(rv.data)
|
| |
+
|
| |
+ item = data['items']
|
| |
+ assert 'Module mariadb:10.2:20180724000000:00000000 imported' in item['messages']
|
| |
+ assert item['module']['name'] == 'mariadb'
|
| |
+ assert item['module']['stream'] == '10.2'
|
| |
+ assert item['module']['version'] == '20180724000000'
|
| |
+ assert item['module']['context'] == '00000000'
|
| |
+ assert item['module']['owner'] == 'mbs_import'
|
| |
+ assert item['module']['state'] == 5
|
| |
+ assert item['module']['state_reason'] is None
|
| |
+ assert item['module']['state_name'] == 'ready'
|
| |
+ assert item['module']['scmurl'] is None
|
| |
+ assert item['module']['component_builds'] == []
|
| |
+ assert item['module']['time_submitted'] == item['module']['time_modified'] == \
|
| |
+ item['module']['time_completed']
|
| |
+ assert item['module']['koji_tag'] == 'mariadb-10.2-20180724000000-00000000'
|
| |
+ assert item['module']['siblings'] == []
|
| |
+ assert item['module']['rebuild_strategy'] == 'all'
|
| |
+
|
| |
+ @pytest.mark.parametrize('api_version', [1, 2])
|
| |
+ @patch('module_build_service.auth.get_user', return_value=import_module_user)
|
| |
+ @patch.object(module_build_service.config.Config, 'scmurls',
|
| |
+ new_callable=PropertyMock, return_value=['file://'])
|
| |
+ def test_import_build_scm_another_commit_hash(self, mocked_scmurls, mocked_get_user,
|
| |
+ api_version):
|
| |
+ post_url = '/module-build-service/{0}/import-module/'.format(api_version)
|
| |
+ rv = self.client.post(
|
| |
+ post_url,
|
| |
+ data=json.dumps({'scmurl': 'file://' + scm_base_dir + (
|
| |
+ '/mariadb?#8960a704c19c8f0df321ad66e5efc5d2ee99c2bb')}))
|
| |
+ data = json.loads(rv.data)
|
| |
+
|
| |
+ item = data['items']
|
| |
+ assert 'Module mariadb:10.2:20180724065109:00000000 imported' in item['messages']
|
| |
+ assert item['module']['name'] == 'mariadb'
|
| |
+ assert item['module']['stream'] == '10.2'
|
| |
+ assert item['module']['version'] == '20180724065109'
|
| |
+ assert item['module']['context'] == '00000000'
|
| |
+ assert item['module']['owner'] == 'mbs_import'
|
| |
+ assert item['module']['state'] == 5
|
| |
+ assert item['module']['state_reason'] is None
|
| |
+ assert item['module']['state_name'] == 'ready'
|
| |
+ assert item['module']['scmurl'] is None
|
| |
+ assert item['module']['component_builds'] == []
|
| |
+ assert item['module']['time_submitted'] == item['module']['time_modified'] == \
|
| |
+ item['module']['time_completed']
|
| |
+ assert item['module']['koji_tag'] == 'mariadb-10.2-20180724065109-00000000'
|
| |
+ assert item['module']['siblings'] == []
|
| |
+ assert item['module']['rebuild_strategy'] == 'all'
|
| |
+
|
| |
+ @pytest.mark.parametrize('api_version', [1, 2])
|
| |
+ @patch('module_build_service.auth.get_user', return_value=import_module_user)
|
| |
+ @patch.object(module_build_service.config.Config, 'scmurls',
|
| |
+ new_callable=PropertyMock, return_value=['file://'])
|
| |
+ def test_import_build_scm_incomplete_nsvc(self, mocked_scmurls, mocked_get_user,
|
| |
+ api_version):
|
| |
+ post_url = '/module-build-service/{0}/import-module/'.format(api_version)
|
| |
+ rv = self.client.post(
|
| |
+ post_url,
|
| |
+ data=json.dumps({'scmurl': 'file://' + scm_base_dir + (
|
| |
+ '/mariadb?#579b994de17c4e0d18e26f49428e31fa98971012')}))
|
| |
+ data = json.loads(rv.data)
|
| |
+
|
| |
+ assert data['error'] == 'Unprocessable Entity'
|
| |
+ assert data['message'] == 'Incomplete NSVC: None:None:0:00000000'
|
| |
+
|
| |
+ @pytest.mark.parametrize('api_version', [1, 2])
|
| |
+ @patch('module_build_service.auth.get_user', return_value=import_module_user)
|
| |
+ @patch.object(module_build_service.config.Config, 'scmurls',
|
| |
+ new_callable=PropertyMock, return_value=['file://'])
|
| |
+ def test_import_build_scm_yaml_is_bad(self, mocked_scmurls, mocked_get_user,
|
| |
+ api_version):
|
| |
+ post_url = '/module-build-service/{0}/import-module/'.format(api_version)
|
| |
+ rv = self.client.post(
|
| |
+ post_url,
|
| |
+ data=json.dumps({'scmurl': 'file://' + scm_base_dir + (
|
| |
+ '/mariadb?#c4a7e11a3a4c56af125724745d11f4d18e147d67')}))
|
| |
+ data = json.loads(rv.data)
|
| |
+
|
| |
+ assert data['error'] == 'Unprocessable Entity'
|
| |
+ assert data['message'].startswith('The following invalid modulemd was encountered')
|
| |
+
|
| |
+ @pytest.mark.parametrize('api_version', [1, 2])
|
| |
+ @patch('module_build_service.auth.get_user', return_value=import_module_user)
|
| |
+ @patch.object(module_build_service.config.Config, 'scmurls',
|
| |
+ new_callable=PropertyMock, return_value=['file://'])
|
| |
+ def test_import_build_scm_missing_koji_tag(self, mocked_scmurls, mocked_get_user,
|
| |
+ api_version):
|
| |
+ post_url = '/module-build-service/{0}/import-module/'.format(api_version)
|
| |
+ rv = self.client.post(
|
| |
+ post_url,
|
| |
+ data=json.dumps({'scmurl': 'file://' + scm_base_dir + (
|
| |
+ '/mariadb?#c7b473af5cd85f29504c874e3308f2c1cae098fa')}))
|
| |
+ data = json.loads(rv.data)
|
| |
+
|
| |
+ assert data['error'] == 'Unprocessable Entity'
|
| |
+ assert data['message'].startswith('\'koji_tag\' is not set in xmd[\'mbs\'] for module')
|
| |
Duplicate of PR#973