mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-04-05 03:38:12 +08:00
Save another 20s in tests.
This commit is contained in:
@@ -89,14 +89,18 @@ def clean_database():
|
||||
db.create_all()
|
||||
|
||||
|
||||
def init_data():
|
||||
def init_data(data_size=10):
|
||||
"""
|
||||
Creates data_size * 3 modules in database in different states and
|
||||
with different component builds. See _populate_data for more info.
|
||||
"""
|
||||
clean_database()
|
||||
with make_session(conf) as session:
|
||||
_populate_data(session)
|
||||
_populate_data(session, data_size)
|
||||
|
||||
|
||||
def _populate_data(session):
|
||||
for index in range(10):
|
||||
def _populate_data(session, data_size=10):
|
||||
for index in range(data_size):
|
||||
build_one = ModuleBuild()
|
||||
build_one.name = 'nginx'
|
||||
build_one.stream = '1'
|
||||
@@ -366,7 +370,7 @@ def scheduler_init_data(tangerine_state=None):
|
||||
session.commit()
|
||||
|
||||
|
||||
def test_reuse_component_init_data():
|
||||
def reuse_component_init_data():
|
||||
clean_database()
|
||||
|
||||
current_dir = os.path.dirname(__file__)
|
||||
@@ -532,7 +536,7 @@ def test_reuse_component_init_data():
|
||||
session.commit()
|
||||
|
||||
|
||||
def test_reuse_shared_userspace_init_data():
|
||||
def reuse_shared_userspace_init_data():
|
||||
clean_database()
|
||||
|
||||
with make_session(conf) as session:
|
||||
|
||||
@@ -38,7 +38,7 @@ from mock import patch, PropertyMock, Mock
|
||||
from werkzeug.datastructures import FileStorage
|
||||
import kobo
|
||||
|
||||
from tests import app, test_reuse_component_init_data, clean_database
|
||||
from tests import app, reuse_component_init_data, clean_database
|
||||
import json
|
||||
import itertools
|
||||
|
||||
@@ -799,7 +799,7 @@ class TestBuild:
|
||||
Tests that we do not try building module-build-macros when reusing all
|
||||
components in a module build.
|
||||
"""
|
||||
test_reuse_component_init_data()
|
||||
reuse_component_init_data()
|
||||
|
||||
def on_build_cb(cls, artifact_name, source):
|
||||
raise ValueError("All components should be reused, not build.")
|
||||
@@ -850,7 +850,7 @@ class TestBuild:
|
||||
Tests that we can reuse components even when the reused module does
|
||||
not have module-build-macros component.
|
||||
"""
|
||||
test_reuse_component_init_data()
|
||||
reuse_component_init_data()
|
||||
|
||||
models.ComponentBuild.query.filter_by(package="module-build-macros").delete()
|
||||
assert len(models.ComponentBuild.query.filter_by(package="module-build-macros").all()) == 0
|
||||
@@ -1020,7 +1020,8 @@ class TestBuild:
|
||||
@patch('module_build_service.auth.get_user', return_value=user)
|
||||
@patch('module_build_service.scm.SCM')
|
||||
def test_submit_build_resume_recover_orphaned_macros(
|
||||
self, mocked_scm, mocked_get_user, conf_system, dbg):
|
||||
self, mocked_scm, mocked_get_user, conf_system, dbg,
|
||||
pdc_module_inactive):
|
||||
"""
|
||||
Tests that resuming the build works when module-build-macros is orphaned but marked as
|
||||
failed in the database
|
||||
|
||||
@@ -34,7 +34,7 @@ from mock import patch
|
||||
class TestGenericBuilder:
|
||||
|
||||
def setup_method(self, test_method):
|
||||
init_data()
|
||||
init_data(1)
|
||||
self.module = module_build_service.models.ModuleBuild.query.filter_by(id=1).one()
|
||||
|
||||
@patch('module_build_service.resolver.PDCResolver')
|
||||
|
||||
@@ -100,7 +100,7 @@ COPR_MODULE_BUILDER = "module_build_service.builder.CoprModuleBuilder.CoprModule
|
||||
class TestCoprModuleBuilder:
|
||||
|
||||
def setup_method(self, test_method):
|
||||
init_data()
|
||||
init_data(1)
|
||||
self.config = mock.Mock()
|
||||
self.config.koji_profile = conf.koji_profile
|
||||
self.config.koji_repository_url = conf.koji_repository_url
|
||||
|
||||
@@ -55,7 +55,7 @@ class FakeKojiModuleBuilder(KojiModuleBuilder):
|
||||
class TestKojiBuilder:
|
||||
|
||||
def setup_method(self, test_method):
|
||||
init_data()
|
||||
init_data(1)
|
||||
self.config = mock.Mock()
|
||||
self.config.koji_profile = conf.koji_profile
|
||||
self.config.koji_repository_url = conf.koji_repository_url
|
||||
@@ -88,7 +88,7 @@ class TestKojiBuilder:
|
||||
build_tagged = [{"nvr": "foo-1.0-1.module+e0095747", "task_id": 12345, 'build_id': 91}]
|
||||
dest_tagged = [{"nvr": "foo-1.0-1.module+e0095747", "task_id": 12345, 'build_id': 91}]
|
||||
builder.koji_session.listTagged.side_effect = [build_tagged, dest_tagged]
|
||||
module_build = module_build_service.models.ModuleBuild.query.get(30)
|
||||
module_build = module_build_service.models.ModuleBuild.query.get(3)
|
||||
component_build = module_build.component_builds[0]
|
||||
component_build.task_id = None
|
||||
component_build.state = None
|
||||
@@ -103,7 +103,7 @@ class TestKojiBuilder:
|
||||
assert actual[0].build_name == 'rubygem-rails'
|
||||
assert actual[0].build_version == '1.0'
|
||||
assert actual[0].build_release == '1.module+e0095747'
|
||||
assert actual[0].module_build_id == 30
|
||||
assert actual[0].module_build_id == 3
|
||||
assert type(actual[1]) == module_build_service.messaging.KojiTagChange
|
||||
assert actual[1].tag == 'module-foo-build'
|
||||
assert actual[1].artifact == 'rubygem-rails'
|
||||
@@ -142,7 +142,7 @@ class TestKojiBuilder:
|
||||
'build_id': 91
|
||||
}
|
||||
builder.koji_session.getBuild.return_value = build_info
|
||||
module_build = module_build_service.models.ModuleBuild.query.get(30)
|
||||
module_build = module_build_service.models.ModuleBuild.query.get(3)
|
||||
component_build = module_build.component_builds[0]
|
||||
component_build.task_id = None
|
||||
component_build.nvr = None
|
||||
@@ -157,7 +157,7 @@ class TestKojiBuilder:
|
||||
assert actual[0].build_name == 'rubygem-rails'
|
||||
assert actual[0].build_version == '1.0'
|
||||
assert actual[0].build_release == '1.{0}'.format(dist_tag)
|
||||
assert actual[0].module_build_id == 30
|
||||
assert actual[0].module_build_id == 3
|
||||
assert component_build.state == koji.BUILD_STATES['COMPLETE']
|
||||
assert component_build.task_id == 12345
|
||||
assert component_build.state_reason == 'Found existing build'
|
||||
@@ -183,7 +183,7 @@ class TestKojiBuilder:
|
||||
"release": "nope",
|
||||
}]
|
||||
builder.koji_session.untaggedBuilds.return_value = untagged
|
||||
module_build = module_build_service.models.ModuleBuild.query.get(30)
|
||||
module_build = module_build_service.models.ModuleBuild.query.get(3)
|
||||
component_build = module_build.component_builds[0]
|
||||
component_build.task_id = None
|
||||
component_build.nvr = None
|
||||
|
||||
@@ -19,7 +19,7 @@ class TestMockModuleBuilder:
|
||||
self.resultdir = tempfile.mkdtemp()
|
||||
|
||||
def teardown_method(self, test_method):
|
||||
init_data()
|
||||
clean_database()
|
||||
shutil.rmtree(self.resultdir)
|
||||
|
||||
def _create_module_with_filters(self, session, batch, state):
|
||||
|
||||
@@ -47,7 +47,7 @@ GET_USER_RV = {
|
||||
class TestBuild:
|
||||
|
||||
def setup_method(self, test_method):
|
||||
init_data()
|
||||
init_data(1)
|
||||
module = models.ModuleBuild.query.filter_by(id=1).one()
|
||||
module.cg_build_koji_tag = "f27-module-candidate"
|
||||
self.cg = KojiContentGenerator(module, conf)
|
||||
|
||||
@@ -35,7 +35,7 @@ from tests import init_data
|
||||
class TestLogger:
|
||||
|
||||
def setup_method(self, test_method):
|
||||
init_data()
|
||||
init_data(1)
|
||||
test_id = '.'.join([
|
||||
path.splitext(path.basename(__file__))[0],
|
||||
test_method.im_class.__name__,
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
import pytest
|
||||
from mock import patch
|
||||
from module_build_service import models, conf
|
||||
from tests import test_reuse_component_init_data, init_data, db
|
||||
from tests import reuse_component_init_data, init_data, db, clean_database
|
||||
import mock
|
||||
import koji
|
||||
from module_build_service.scheduler.producer import MBSProducer
|
||||
@@ -37,10 +37,10 @@ from datetime import datetime, timedelta
|
||||
class TestPoller:
|
||||
|
||||
def setup_method(self, test_method):
|
||||
test_reuse_component_init_data()
|
||||
reuse_component_init_data()
|
||||
|
||||
def teardown_method(self, test_method):
|
||||
init_data()
|
||||
clean_database()
|
||||
|
||||
@pytest.mark.parametrize('fresh', [True, False])
|
||||
@patch('module_build_service.utils.start_build_component')
|
||||
|
||||
@@ -30,14 +30,12 @@ from tests import conf, db, app, scheduler_init_data
|
||||
|
||||
class TestRepoDone:
|
||||
|
||||
def setup_method(self, test_method):
|
||||
scheduler_init_data()
|
||||
|
||||
@mock.patch('module_build_service.models.ModuleBuild.from_repo_done_event')
|
||||
def test_no_match(self, from_repo_done_event):
|
||||
""" Test that when a repo msg hits us and we have no match,
|
||||
that we do nothing gracefully.
|
||||
"""
|
||||
scheduler_init_data()
|
||||
from_repo_done_event.return_value = None
|
||||
msg = module_build_service.messaging.KojiRepoChange(
|
||||
'no matches for this...', '2016-some-nonexistent-build')
|
||||
@@ -64,6 +62,7 @@ class TestRepoDone:
|
||||
mock_uea, pdc):
|
||||
""" Test that when a repo msg hits us and we have a single match.
|
||||
"""
|
||||
scheduler_init_data()
|
||||
get_session.return_value = mock.Mock(), 'development'
|
||||
build_fn.return_value = 1234, 1, '', None
|
||||
|
||||
@@ -97,6 +96,7 @@ class TestRepoDone:
|
||||
""" Test that when a KojiModuleBuilder.build fails, the build is
|
||||
marked as failed with proper state_reason.
|
||||
"""
|
||||
scheduler_init_data()
|
||||
config.return_value = mock.Mock(), 'development'
|
||||
build_fn.return_value = None, 4, 'Failed to submit artifact tangerine to Koji', None
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ from mock import patch
|
||||
import module_build_service.messaging
|
||||
import module_build_service.scheduler.handlers.repos
|
||||
import module_build_service.models
|
||||
from tests import test_reuse_component_init_data
|
||||
from tests import reuse_component_init_data
|
||||
from tests import conf, db
|
||||
|
||||
import koji
|
||||
@@ -36,7 +36,7 @@ import koji
|
||||
class TestTagTagged:
|
||||
|
||||
def setup_method(self, test_method):
|
||||
test_reuse_component_init_data()
|
||||
reuse_component_init_data()
|
||||
|
||||
@mock.patch('module_build_service.models.ModuleBuild.from_tag_change_event')
|
||||
def test_no_matching_module(self, from_tag_change_event):
|
||||
|
||||
@@ -29,8 +29,8 @@ import module_build_service.utils
|
||||
import module_build_service.scm
|
||||
from module_build_service import models, conf
|
||||
from module_build_service.errors import ProgrammingError, ValidationError, UnprocessableEntity
|
||||
from tests import (test_reuse_component_init_data, init_data, db,
|
||||
test_reuse_shared_userspace_init_data,
|
||||
from tests import (reuse_component_init_data, init_data, db,
|
||||
reuse_shared_userspace_init_data,
|
||||
clean_database)
|
||||
import mock
|
||||
import koji
|
||||
@@ -75,14 +75,162 @@ class FakeSCM(object):
|
||||
def get_module_yaml(self):
|
||||
return path.join(self.sourcedir, self.name + ".yaml")
|
||||
|
||||
class TestUtilsComponentReuse:
|
||||
|
||||
def setup_method(self, test_method):
|
||||
reuse_component_init_data()
|
||||
|
||||
def teardown_method(self, test_method):
|
||||
clean_database()
|
||||
|
||||
@pytest.mark.parametrize('changed_component', [
|
||||
'perl-List-Compare', 'perl-Tangerine', 'tangerine', None
|
||||
])
|
||||
def test_get_reusable_component_different_component(self, changed_component):
|
||||
second_module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
if changed_component:
|
||||
mmd = second_module_build.mmd()
|
||||
mmd.components.rpms[changed_component].ref = '00ea1da4192a2030f9ae023de3b3143ed647bbab'
|
||||
second_module_build.modulemd = mmd.dumps()
|
||||
second_module_changed_component = models.ComponentBuild.query.filter_by(
|
||||
package=changed_component, module_id=2).one()
|
||||
second_module_changed_component.ref = '00ea1da4192a2030f9ae023de3b3143ed647bbab'
|
||||
db.session.add(second_module_changed_component)
|
||||
db.session.commit()
|
||||
|
||||
plc_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-List-Compare')
|
||||
pt_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-Tangerine')
|
||||
tangerine_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'tangerine')
|
||||
|
||||
if changed_component == 'perl-List-Compare':
|
||||
# perl-Tangerine can be reused even though a component in its batch has changed
|
||||
assert plc_rv is None
|
||||
assert pt_rv.package == 'perl-Tangerine'
|
||||
assert tangerine_rv is None
|
||||
elif changed_component == 'perl-Tangerine':
|
||||
# perl-List-Compare can be reused even though a component in its batch has changed
|
||||
assert plc_rv.package == 'perl-List-Compare'
|
||||
assert pt_rv is None
|
||||
assert tangerine_rv is None
|
||||
elif changed_component == 'tangerine':
|
||||
# perl-List-Compare and perl-Tangerine can be reused since they are in an earlier
|
||||
# buildorder than tangerine
|
||||
assert plc_rv.package == 'perl-List-Compare'
|
||||
assert pt_rv.package == 'perl-Tangerine'
|
||||
assert tangerine_rv is None
|
||||
elif changed_component is None:
|
||||
# Nothing has changed so everthing can be used
|
||||
assert plc_rv.package == 'perl-List-Compare'
|
||||
assert pt_rv.package == 'perl-Tangerine'
|
||||
assert tangerine_rv.package == 'tangerine'
|
||||
|
||||
def test_get_reusable_component_different_rpm_macros(self):
|
||||
second_module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
mmd = second_module_build.mmd()
|
||||
mmd.buildopts.rpms.macros = "%my_macro 1"
|
||||
second_module_build.modulemd = mmd.dumps()
|
||||
db.session.commit()
|
||||
|
||||
plc_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-List-Compare')
|
||||
assert plc_rv is None
|
||||
|
||||
pt_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-Tangerine')
|
||||
assert pt_rv is None
|
||||
|
||||
def test_get_reusable_component_different_buildrequires_hash(self):
|
||||
second_module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
mmd = second_module_build.mmd()
|
||||
mmd.xmd['mbs']['buildrequires']['platform']['ref'] = \
|
||||
'da39a3ee5e6b4b0d3255bfef95601890afd80709'
|
||||
second_module_build.modulemd = mmd.dumps()
|
||||
second_module_build.build_context = '37c6c57bedf4305ef41249c1794760b5cb8fad17'
|
||||
db.session.commit()
|
||||
|
||||
plc_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-List-Compare')
|
||||
assert plc_rv is None
|
||||
|
||||
pt_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-Tangerine')
|
||||
assert pt_rv is None
|
||||
|
||||
tangerine_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'tangerine')
|
||||
assert tangerine_rv is None
|
||||
|
||||
def test_get_reusable_component_different_buildrequires(self):
|
||||
second_module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
mmd = second_module_build.mmd()
|
||||
mmd.buildrequires = {'some_module': 'master'}
|
||||
mmd.xmd['mbs']['buildrequires'] = {
|
||||
'some_module': {
|
||||
'ref': 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
|
||||
'stream': 'master',
|
||||
'version': '20170123140147'
|
||||
}
|
||||
}
|
||||
second_module_build.modulemd = mmd.dumps()
|
||||
second_module_build.build_context = '37c6c57bedf4305ef41249c1794760b5cb8fad17'
|
||||
db.session.commit()
|
||||
|
||||
plc_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-List-Compare')
|
||||
assert plc_rv is None
|
||||
|
||||
pt_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-Tangerine')
|
||||
assert pt_rv is None
|
||||
|
||||
tangerine_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'tangerine')
|
||||
assert tangerine_rv is None
|
||||
|
||||
@patch("module_build_service.utils.submit_module_build")
|
||||
def test_submit_module_build_from_yaml_with_skiptests(self, mock_submit):
|
||||
"""
|
||||
Tests local module build from a yaml file with the skiptests option
|
||||
|
||||
Args:
|
||||
mock_submit (MagickMock): mocked function submit_module_build, which we then
|
||||
inspect if it was called with correct arguments
|
||||
"""
|
||||
module_dir = tempfile.mkdtemp()
|
||||
module = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
mmd = module.mmd()
|
||||
modulemd_yaml = mmd.dumps()
|
||||
modulemd_file_path = path.join(module_dir, "testmodule.yaml")
|
||||
|
||||
username = "test"
|
||||
stream = "dev"
|
||||
|
||||
with open(modulemd_file_path, "w") as fd:
|
||||
fd.write(modulemd_yaml)
|
||||
|
||||
with open(modulemd_file_path, "r") as fd:
|
||||
handle = FileStorage(fd)
|
||||
module_build_service.utils.submit_module_build_from_yaml(username, handle,
|
||||
stream=stream, skiptests=True)
|
||||
mock_submit_args = mock_submit.call_args[0]
|
||||
username_arg = mock_submit_args[0]
|
||||
mmd_arg = mock_submit_args[2]
|
||||
assert mmd_arg.stream == stream
|
||||
assert "\n\n%__spec_check_pre exit 0\n" in mmd_arg.buildopts.rpms.macros
|
||||
assert username_arg == username
|
||||
rmtree(module_dir)
|
||||
|
||||
|
||||
class TestUtils:
|
||||
|
||||
def setup_method(self, test_method):
|
||||
init_data()
|
||||
clean_database()
|
||||
|
||||
def teardown_method(self, test_method):
|
||||
init_data()
|
||||
clean_database()
|
||||
|
||||
@pytest.mark.parametrize('scmurl', [
|
||||
('git://pkgs.stg.fedoraproject.org/modules/testmodule.git'
|
||||
@@ -146,117 +294,6 @@ class TestUtils:
|
||||
|
||||
assert mmd.xmd == xmd
|
||||
|
||||
@pytest.mark.parametrize('changed_component', [
|
||||
'perl-List-Compare', 'perl-Tangerine', 'tangerine', None
|
||||
])
|
||||
def test_get_reusable_component_different_component(self, changed_component):
|
||||
test_reuse_component_init_data()
|
||||
second_module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
if changed_component:
|
||||
mmd = second_module_build.mmd()
|
||||
mmd.components.rpms[changed_component].ref = '00ea1da4192a2030f9ae023de3b3143ed647bbab'
|
||||
second_module_build.modulemd = mmd.dumps()
|
||||
second_module_changed_component = models.ComponentBuild.query.filter_by(
|
||||
package=changed_component, module_id=2).one()
|
||||
second_module_changed_component.ref = '00ea1da4192a2030f9ae023de3b3143ed647bbab'
|
||||
db.session.add(second_module_changed_component)
|
||||
db.session.commit()
|
||||
|
||||
plc_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-List-Compare')
|
||||
pt_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-Tangerine')
|
||||
tangerine_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'tangerine')
|
||||
|
||||
if changed_component == 'perl-List-Compare':
|
||||
# perl-Tangerine can be reused even though a component in its batch has changed
|
||||
assert plc_rv is None
|
||||
assert pt_rv.package == 'perl-Tangerine'
|
||||
assert tangerine_rv is None
|
||||
elif changed_component == 'perl-Tangerine':
|
||||
# perl-List-Compare can be reused even though a component in its batch has changed
|
||||
assert plc_rv.package == 'perl-List-Compare'
|
||||
assert pt_rv is None
|
||||
assert tangerine_rv is None
|
||||
elif changed_component == 'tangerine':
|
||||
# perl-List-Compare and perl-Tangerine can be reused since they are in an earlier
|
||||
# buildorder than tangerine
|
||||
assert plc_rv.package == 'perl-List-Compare'
|
||||
assert pt_rv.package == 'perl-Tangerine'
|
||||
assert tangerine_rv is None
|
||||
elif changed_component is None:
|
||||
# Nothing has changed so everthing can be used
|
||||
assert plc_rv.package == 'perl-List-Compare'
|
||||
assert pt_rv.package == 'perl-Tangerine'
|
||||
assert tangerine_rv.package == 'tangerine'
|
||||
|
||||
def test_get_reusable_component_different_rpm_macros(self):
|
||||
test_reuse_component_init_data()
|
||||
second_module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
mmd = second_module_build.mmd()
|
||||
mmd.buildopts.rpms.macros = "%my_macro 1"
|
||||
second_module_build.modulemd = mmd.dumps()
|
||||
db.session.commit()
|
||||
|
||||
plc_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-List-Compare')
|
||||
assert plc_rv is None
|
||||
|
||||
pt_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-Tangerine')
|
||||
assert pt_rv is None
|
||||
|
||||
def test_get_reusable_component_different_buildrequires_hash(self):
|
||||
test_reuse_component_init_data()
|
||||
second_module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
mmd = second_module_build.mmd()
|
||||
mmd.xmd['mbs']['buildrequires']['platform']['ref'] = \
|
||||
'da39a3ee5e6b4b0d3255bfef95601890afd80709'
|
||||
second_module_build.modulemd = mmd.dumps()
|
||||
second_module_build.build_context = '37c6c57bedf4305ef41249c1794760b5cb8fad17'
|
||||
db.session.commit()
|
||||
|
||||
plc_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-List-Compare')
|
||||
assert plc_rv is None
|
||||
|
||||
pt_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-Tangerine')
|
||||
assert pt_rv is None
|
||||
|
||||
tangerine_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'tangerine')
|
||||
assert tangerine_rv is None
|
||||
|
||||
def test_get_reusable_component_different_buildrequires(self):
|
||||
test_reuse_component_init_data()
|
||||
second_module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
mmd = second_module_build.mmd()
|
||||
mmd.buildrequires = {'some_module': 'master'}
|
||||
mmd.xmd['mbs']['buildrequires'] = {
|
||||
'some_module': {
|
||||
'ref': 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
|
||||
'stream': 'master',
|
||||
'version': '20170123140147'
|
||||
}
|
||||
}
|
||||
second_module_build.modulemd = mmd.dumps()
|
||||
second_module_build.build_context = '37c6c57bedf4305ef41249c1794760b5cb8fad17'
|
||||
db.session.commit()
|
||||
|
||||
plc_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-List-Compare')
|
||||
assert plc_rv is None
|
||||
|
||||
pt_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'perl-Tangerine')
|
||||
assert pt_rv is None
|
||||
|
||||
tangerine_rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, second_module_build, 'tangerine')
|
||||
assert tangerine_rv is None
|
||||
|
||||
def test_get_reusable_component_shared_userspace_ordering(self):
|
||||
"""
|
||||
For modules with lot of components per batch, there is big chance that
|
||||
@@ -264,7 +301,7 @@ class TestUtils:
|
||||
current `new_module`. In this case, reuse code should still be able to
|
||||
reuse the components.
|
||||
"""
|
||||
test_reuse_shared_userspace_init_data()
|
||||
reuse_shared_userspace_init_data()
|
||||
new_module = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
rv = module_build_service.utils.get_reusable_component(
|
||||
db.session, new_module, 'llvm')
|
||||
@@ -419,41 +456,6 @@ class TestUtils:
|
||||
|
||||
assert str(e.value) == error_msg
|
||||
|
||||
@patch("module_build_service.utils.submit_module_build")
|
||||
def test_submit_module_build_from_yaml_with_skiptests(self, mock_submit):
|
||||
"""
|
||||
Tests local module build from a yaml file with the skiptests option
|
||||
|
||||
Args:
|
||||
mock_submit (MagickMock): mocked function submit_module_build, which we then
|
||||
inspect if it was called with correct arguments
|
||||
"""
|
||||
test_reuse_component_init_data()
|
||||
|
||||
module_dir = tempfile.mkdtemp()
|
||||
module = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
mmd = module.mmd()
|
||||
modulemd_yaml = mmd.dumps()
|
||||
modulemd_file_path = path.join(module_dir, "testmodule.yaml")
|
||||
|
||||
username = "test"
|
||||
stream = "dev"
|
||||
|
||||
with open(modulemd_file_path, "w") as fd:
|
||||
fd.write(modulemd_yaml)
|
||||
|
||||
with open(modulemd_file_path, "r") as fd:
|
||||
handle = FileStorage(fd)
|
||||
module_build_service.utils.submit_module_build_from_yaml(username, handle,
|
||||
stream=stream, skiptests=True)
|
||||
mock_submit_args = mock_submit.call_args[0]
|
||||
username_arg = mock_submit_args[0]
|
||||
mmd_arg = mock_submit_args[2]
|
||||
assert mmd_arg.stream == stream
|
||||
assert "\n\n%__spec_check_pre exit 0\n" in mmd_arg.buildopts.rpms.macros
|
||||
assert username_arg == username
|
||||
rmtree(module_dir)
|
||||
|
||||
@patch('module_build_service.scm.SCM')
|
||||
def test_record_component_builds_set_weight(self, mocked_scm, pdc_module_inactive):
|
||||
with app.app_context():
|
||||
@@ -563,11 +565,11 @@ class DummyModuleBuilder(GenericBuilder):
|
||||
class TestBatches:
|
||||
|
||||
def setup_method(self, test_method):
|
||||
test_reuse_component_init_data()
|
||||
reuse_component_init_data()
|
||||
GenericBuilder.register_backend_class(DummyModuleBuilder)
|
||||
|
||||
def teardown_method(self, test_method):
|
||||
init_data()
|
||||
clean_database()
|
||||
DummyModuleBuilder.TAGGED_COMPONENTS = []
|
||||
GenericBuilder.register_backend_class(KojiModuleBuilder)
|
||||
|
||||
@@ -834,10 +836,10 @@ class TestBatches:
|
||||
class TestLocalBuilds:
|
||||
|
||||
def setup_method(self):
|
||||
init_data()
|
||||
clean_database()
|
||||
|
||||
def teardown_method(self):
|
||||
init_data()
|
||||
clean_database()
|
||||
|
||||
def test_load_local_builds_name(self, conf_system, conf_resultsdir):
|
||||
with app.app_context():
|
||||
|
||||
@@ -112,7 +112,7 @@ class FakeSCM(object):
|
||||
class TestViews:
|
||||
def setup_method(self, test_method):
|
||||
self.client = app.test_client()
|
||||
init_data()
|
||||
init_data(2)
|
||||
|
||||
def test_query_build(self):
|
||||
rv = self.client.get('/module-build-service/1/module-builds/1')
|
||||
@@ -162,7 +162,7 @@ class TestViews:
|
||||
data = json.loads(rv.data)
|
||||
assert data['component_builds'] == [1, 2]
|
||||
assert data['context'] == '00000000'
|
||||
# There is no xmd information on this module, so these values should be null
|
||||
# There is no xmd information on this module, so these values should be None
|
||||
assert data['build_context'] is None
|
||||
assert data['runtime_context'] is None
|
||||
assert data['id'] == 1
|
||||
@@ -203,26 +203,26 @@ class TestViews:
|
||||
assert data['rebuild_strategy'] == 'changed-and-after'
|
||||
|
||||
def test_pagination_metadata(self):
|
||||
rv = self.client.get('/module-build-service/1/module-builds/?per_page=8&page=2')
|
||||
rv = self.client.get('/module-build-service/1/module-builds/?per_page=2&page=2')
|
||||
meta_data = json.loads(rv.data)['meta']
|
||||
assert meta_data['prev'].split('?', 1)[1] in ['per_page=8&page=1', 'page=1&per_page=8']
|
||||
assert meta_data['next'].split('?', 1)[1] in ['per_page=8&page=3', 'page=3&per_page=8']
|
||||
assert meta_data['last'].split('?', 1)[1] in ['per_page=8&page=4', 'page=4&per_page=8']
|
||||
assert meta_data['first'].split('?', 1)[1] in ['per_page=8&page=1', 'page=1&per_page=8']
|
||||
assert meta_data['total'] == 30
|
||||
assert meta_data['per_page'] == 8
|
||||
assert meta_data['pages'] == 4
|
||||
assert meta_data['prev'].split('?', 1)[1] in ['per_page=2&page=1', 'page=1&per_page=2']
|
||||
assert meta_data['next'].split('?', 1)[1] in ['per_page=2&page=3', 'page=3&per_page=2']
|
||||
assert meta_data['last'].split('?', 1)[1] in ['per_page=2&page=3', 'page=3&per_page=2']
|
||||
assert meta_data['first'].split('?', 1)[1] in ['per_page=2&page=1', 'page=1&per_page=2']
|
||||
assert meta_data['total'] == 6
|
||||
assert meta_data['per_page'] == 2
|
||||
assert meta_data['pages'] == 3
|
||||
assert meta_data['page'] == 2
|
||||
|
||||
def test_pagination_metadata_with_args(self):
|
||||
rv = self.client.get('/module-build-service/1/module-builds/?per_page=8&page=2&order_by=id')
|
||||
rv = self.client.get('/module-build-service/1/module-builds/?per_page=2&page=2&order_by=id')
|
||||
meta_data = json.loads(rv.data)['meta']
|
||||
for link in [meta_data['prev'], meta_data['next'], meta_data['last'], meta_data['first']]:
|
||||
assert 'order_by=id' in link
|
||||
assert 'per_page=8' in link
|
||||
assert meta_data['total'] == 30
|
||||
assert meta_data['per_page'] == 8
|
||||
assert meta_data['pages'] == 4
|
||||
assert 'per_page=2' in link
|
||||
assert meta_data['total'] == 6
|
||||
assert meta_data['per_page'] == 2
|
||||
assert meta_data['pages'] == 3
|
||||
assert meta_data['page'] == 2
|
||||
|
||||
def test_query_builds(self):
|
||||
@@ -230,72 +230,70 @@ class TestViews:
|
||||
items = json.loads(rv.data)['items']
|
||||
expected = [
|
||||
{
|
||||
'id': 30,
|
||||
'context': '00000000',
|
||||
'koji_tag': None,
|
||||
'name': 'testmodule',
|
||||
'rebuild_strategy': 'changed-and-after',
|
||||
'owner': 'some_other_user',
|
||||
'scmurl': ('git://pkgs.domain.local/modules/testmodule?'
|
||||
'#ca95886c7a443b36a9ce31abda1f9bef22f2f8c9'),
|
||||
'state': 1,
|
||||
'state_name': 'wait',
|
||||
'state_reason': None,
|
||||
'stream': '4.3.43',
|
||||
'tasks': {
|
||||
'rpms': {
|
||||
'module-build-macros': {
|
||||
'nvr': 'module-build-macros-01-1.module+30+8d3cee59',
|
||||
'state': 1,
|
||||
'state_reason': None,
|
||||
'task_id': 47384002
|
||||
"state_name": "wait",
|
||||
"name": "testmodule",
|
||||
"tasks": {
|
||||
"rpms": {
|
||||
"module-build-macros": {
|
||||
"state": 1,
|
||||
"state_reason": None,
|
||||
"task_id": 47383994,
|
||||
"nvr": "module-build-macros-01-1.module+6+8d3cee59"
|
||||
},
|
||||
'rubygem-rails': {
|
||||
'nvr': 'postgresql-9.5.3-4.module+30+8d3cee59',
|
||||
'state': 3,
|
||||
'state_reason': None,
|
||||
'task_id': 2433442
|
||||
"rubygem-rails": {
|
||||
"state": 3,
|
||||
"state_reason": None,
|
||||
"task_id": 2433434,
|
||||
"nvr": "postgresql-9.5.3-4.module+6+8d3cee59"
|
||||
}
|
||||
}
|
||||
},
|
||||
'time_completed': None,
|
||||
'time_modified': '2016-09-03T13:58:40Z',
|
||||
'time_submitted': '2016-09-03T13:58:33Z',
|
||||
'version': '6'
|
||||
"owner": "some_other_user",
|
||||
"version": "6",
|
||||
"state_reason": None,
|
||||
"state": 1,
|
||||
"stream": "4.3.43",
|
||||
"time_submitted": "2016-09-03T12:38:33Z",
|
||||
"scmurl": "git://pkgs.domain.local/modules/testmodule?#ca95886c7a443b36a9ce31abda1f9bef22f2f8c9",
|
||||
"id": 6,
|
||||
"context": "00000000",
|
||||
"time_completed": None,
|
||||
"time_modified": "2016-09-03T12:38:40Z",
|
||||
"rebuild_strategy": "changed-and-after",
|
||||
"koji_tag": None
|
||||
},
|
||||
{
|
||||
'id': 29,
|
||||
'context': '00000000',
|
||||
'koji_tag': 'module-postgressql-1.2',
|
||||
'name': 'postgressql',
|
||||
'owner': 'some_user',
|
||||
'rebuild_strategy': 'changed-and-after',
|
||||
'scmurl': ('git://pkgs.domain.local/modules/postgressql?'
|
||||
'#aa95886c7a443b36a9ce31abda1f9bef22f2f8c9'),
|
||||
'state': 3,
|
||||
'state_name': 'done',
|
||||
'state_reason': None,
|
||||
'stream': '1',
|
||||
'tasks': {
|
||||
'rpms': {
|
||||
'module-build-macros': {
|
||||
'nvr': 'module-build-macros-01-1.module+29+0557c87d',
|
||||
'state': 1,
|
||||
'state_reason': None,
|
||||
'task_id': 47384002
|
||||
"state_name": "done",
|
||||
"name": "postgressql",
|
||||
"tasks": {
|
||||
"rpms": {
|
||||
"module-build-macros": {
|
||||
"state": 1,
|
||||
"state_reason": None,
|
||||
"task_id": 47383994,
|
||||
"nvr": "module-build-macros-01-1.module+5+0557c87d"
|
||||
},
|
||||
'postgresql': {
|
||||
'nvr': 'postgresql-9.5.3-4.module+29+0557c87d',
|
||||
'state': 1,
|
||||
'state_reason': None,
|
||||
'task_id': 2433442
|
||||
"postgresql": {
|
||||
"state": 1,
|
||||
"state_reason": None,
|
||||
"task_id": 2433434,
|
||||
"nvr": "postgresql-9.5.3-4.module+5+0557c87d"
|
||||
}
|
||||
}
|
||||
},
|
||||
'time_completed': '2016-09-03T12:57:19Z',
|
||||
'time_modified': '2016-09-03T13:57:19Z',
|
||||
'time_submitted': '2016-09-03T13:55:33Z',
|
||||
'version': '2'
|
||||
"owner": "some_user",
|
||||
"version": "2",
|
||||
"state_reason": None,
|
||||
"state": 3,
|
||||
"stream": "1",
|
||||
"time_submitted": "2016-09-03T12:35:33Z",
|
||||
"scmurl": "git://pkgs.domain.local/modules/postgressql?#aa95886c7a443b36a9ce31abda1f9bef22f2f8c9",
|
||||
"id": 5,
|
||||
"context": "00000000",
|
||||
"time_completed": "2016-09-03T11:37:19Z",
|
||||
"time_modified": "2016-09-03T12:37:19Z",
|
||||
"rebuild_strategy": "changed-and-after",
|
||||
"koji_tag": "module-postgressql-1.2"
|
||||
}
|
||||
]
|
||||
assert items == expected
|
||||
@@ -357,7 +355,7 @@ class TestViews:
|
||||
rv = self.client.get('/module-build-service/1/component-builds/'
|
||||
'?format=rpms')
|
||||
data = json.loads(rv.data)
|
||||
assert data['meta']['total'] == 60
|
||||
assert data['meta']['total'] == 12
|
||||
|
||||
def test_query_component_builds_filter_ref(self):
|
||||
rv = self.client.get('/module-build-service/1/component-builds/'
|
||||
@@ -368,7 +366,7 @@ class TestViews:
|
||||
def test_query_component_builds_filter_tagged(self):
|
||||
rv = self.client.get('/module-build-service/1/component-builds/?tagged=true')
|
||||
data = json.loads(rv.data)
|
||||
assert data['meta']['total'] == 40
|
||||
assert data['meta']['total'] == 8
|
||||
|
||||
def test_query_component_builds_filter_nvr(self):
|
||||
rv = self.client.get('/module-build-service/1/component-builds/?nvr=nginx-1.10.1-2.'
|
||||
@@ -384,12 +382,12 @@ class TestViews:
|
||||
def test_query_builds_filter_name(self):
|
||||
rv = self.client.get('/module-build-service/1/module-builds/?name=nginx')
|
||||
data = json.loads(rv.data)
|
||||
assert data['meta']['total'] == 10
|
||||
assert data['meta']['total'] == 2
|
||||
|
||||
def test_query_builds_filter_koji_tag(self):
|
||||
rv = self.client.get('/module-build-service/1/module-builds/?koji_tag=module-nginx-1.2')
|
||||
data = json.loads(rv.data)
|
||||
assert data['meta']['total'] == 10
|
||||
assert data['meta']['total'] == 2
|
||||
|
||||
def test_query_builds_filter_completed_before(self):
|
||||
rv = self.client.get(
|
||||
@@ -399,51 +397,51 @@ class TestViews:
|
||||
|
||||
def test_query_builds_filter_completed_after(self):
|
||||
rv = self.client.get(
|
||||
'/module-build-service/1/module-builds/?completed_after=2016-09-03T12:25:00Z')
|
||||
'/module-build-service/1/module-builds/?completed_after=2016-09-03T11:35:00Z')
|
||||
data = json.loads(rv.data)
|
||||
assert data['meta']['total'] == 8
|
||||
assert data['meta']['total'] == 2
|
||||
|
||||
def test_query_builds_filter_submitted_before(self):
|
||||
rv = self.client.get(
|
||||
'/module-build-service/1/module-builds/?submitted_before=2016-09-03T12:25:00Z')
|
||||
'/module-build-service/1/module-builds/?submitted_before=2016-09-03T11:35:00Z')
|
||||
data = json.loads(rv.data)
|
||||
assert data['meta']['total'] == 7
|
||||
assert data['meta']['total'] == 2
|
||||
|
||||
def test_query_builds_filter_submitted_after(self):
|
||||
rv = self.client.get(
|
||||
'/module-build-service/1/module-builds/?submitted_after=2016-09-03T12:25:00Z')
|
||||
'/module-build-service/1/module-builds/?submitted_after=2016-09-03T11:35:00Z')
|
||||
data = json.loads(rv.data)
|
||||
assert data['meta']['total'] == 23
|
||||
assert data['meta']['total'] == 4
|
||||
|
||||
def test_query_builds_filter_modified_before(self):
|
||||
rv = self.client.get(
|
||||
'/module-build-service/1/module-builds/?modified_before=2016-09-03T12:25:00Z')
|
||||
'/module-build-service/1/module-builds/?modified_before=2016-09-03T11:35:00Z')
|
||||
data = json.loads(rv.data)
|
||||
assert data['meta']['total'] == 6
|
||||
assert data['meta']['total'] == 1
|
||||
|
||||
def test_query_builds_filter_modified_after(self):
|
||||
rv = self.client.get(
|
||||
'/module-build-service/1/module-builds/?modified_after=2016-09-03T12:25:00Z')
|
||||
'/module-build-service/1/module-builds/?modified_after=2016-09-03T11:35:00Z')
|
||||
data = json.loads(rv.data)
|
||||
assert data['meta']['total'] == 24
|
||||
assert data['meta']['total'] == 5
|
||||
|
||||
def test_query_builds_filter_owner(self):
|
||||
rv = self.client.get(
|
||||
'/module-build-service/1/module-builds/?owner=Moe%20Szyslak')
|
||||
data = json.loads(rv.data)
|
||||
assert data['meta']['total'] == 10
|
||||
assert data['meta']['total'] == 2
|
||||
|
||||
def test_query_builds_filter_state(self):
|
||||
rv = self.client.get(
|
||||
'/module-build-service/1/module-builds/?state=3')
|
||||
data = json.loads(rv.data)
|
||||
assert data['meta']['total'] == 20
|
||||
assert data['meta']['total'] == 4
|
||||
|
||||
def test_query_builds_two_filters(self):
|
||||
rv = self.client.get('/module-build-service/1/module-builds/?owner=Moe%20Szyslak'
|
||||
'&modified_after=2016-09-03T12:25:00Z')
|
||||
'&modified_after=2016-09-03T11:35:00Z')
|
||||
data = json.loads(rv.data)
|
||||
assert data['meta']['total'] == 4
|
||||
assert data['meta']['total'] == 1
|
||||
|
||||
def test_query_builds_filter_nsv(self):
|
||||
rv = self.client.get(
|
||||
@@ -454,7 +452,7 @@ class TestViews:
|
||||
assert item['name'] == 'postgressql'
|
||||
assert item['stream'] == '1'
|
||||
assert item['version'] == '2'
|
||||
assert data['meta']['total'] == 10
|
||||
assert data['meta']['total'] == 2
|
||||
|
||||
def test_query_builds_filter_invalid_date(self):
|
||||
rv = self.client.get(
|
||||
@@ -526,10 +524,10 @@ class TestViews:
|
||||
assert data['time_completed'] is None
|
||||
assert data['stream'] == 'master'
|
||||
assert data['owner'] == 'Homer J. Simpson'
|
||||
assert data['id'] == 31
|
||||
assert data['id'] == 7
|
||||
assert data['rebuild_strategy'] == 'changed-and-after'
|
||||
assert data['state_name'] == 'init'
|
||||
assert data['state_url'] == '/module-build-service/1/module-builds/31'
|
||||
assert data['state_url'] == '/module-build-service/1/module-builds/7'
|
||||
assert len(data['state_trace']) == 1
|
||||
assert data['state_trace'][0]['state'] == 0
|
||||
assert data['tasks'] == {}
|
||||
@@ -616,7 +614,7 @@ class TestViews:
|
||||
assert data['time_completed'] is None
|
||||
assert data['stream'] == 'master'
|
||||
assert data['owner'] == 'Homer J. Simpson'
|
||||
assert data['id'] == 31
|
||||
assert data['id'] == 7
|
||||
assert data['state_name'] == 'init'
|
||||
assert data['rebuild_strategy'] == 'changed-and-after'
|
||||
|
||||
@@ -681,7 +679,7 @@ class TestViews:
|
||||
|
||||
@patch('module_build_service.auth.get_user', return_value=other_user)
|
||||
def test_cancel_build(self, mocked_get_user):
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/30',
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/6',
|
||||
data=json.dumps({'state': 'failed'}))
|
||||
data = json.loads(rv.data)
|
||||
|
||||
@@ -690,11 +688,11 @@ class TestViews:
|
||||
|
||||
@patch('module_build_service.auth.get_user', return_value=other_user)
|
||||
def test_cancel_build_already_failed(self, mocked_get_user):
|
||||
module = ModuleBuild.query.filter_by(id=30).one()
|
||||
module = ModuleBuild.query.filter_by(id=6).one()
|
||||
module.state = 4
|
||||
db.session.add(module)
|
||||
db.session.commit()
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/30',
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/6',
|
||||
data=json.dumps({'state': 'failed'}))
|
||||
data = json.loads(rv.data)
|
||||
|
||||
@@ -703,7 +701,7 @@ class TestViews:
|
||||
|
||||
@patch('module_build_service.auth.get_user', return_value=('sammy', set()))
|
||||
def test_cancel_build_unauthorized_no_groups(self, mocked_get_user):
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/30',
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/6',
|
||||
data=json.dumps({'state': 'failed'}))
|
||||
data = json.loads(rv.data)
|
||||
|
||||
@@ -712,7 +710,7 @@ class TestViews:
|
||||
|
||||
@patch('module_build_service.auth.get_user', return_value=('sammy', set(["packager"])))
|
||||
def test_cancel_build_unauthorized_not_owner(self, mocked_get_user):
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/30',
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/6',
|
||||
data=json.dumps({'state': 'failed'}))
|
||||
data = json.loads(rv.data)
|
||||
|
||||
@@ -724,7 +722,7 @@ class TestViews:
|
||||
def test_cancel_build_admin(self, mocked_get_user):
|
||||
with patch("module_build_service.config.Config.admin_groups",
|
||||
new_callable=PropertyMock, return_value=set(["mbs-admin"])):
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/30',
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/6',
|
||||
data=json.dumps({'state': 'failed'}))
|
||||
data = json.loads(rv.data)
|
||||
|
||||
@@ -736,7 +734,7 @@ class TestViews:
|
||||
def test_cancel_build_no_admin(self, mocked_get_user):
|
||||
with patch("module_build_service.config.Config.admin_groups",
|
||||
new_callable=PropertyMock, return_value=set(["mbs-admin"])):
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/30',
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/6',
|
||||
data=json.dumps({'state': 'failed'}))
|
||||
data = json.loads(rv.data)
|
||||
|
||||
@@ -745,7 +743,7 @@ class TestViews:
|
||||
|
||||
@patch('module_build_service.auth.get_user', return_value=other_user)
|
||||
def test_cancel_build_wrong_param(self, mocked_get_user):
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/30',
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/6',
|
||||
data=json.dumps({'some_param': 'value'}))
|
||||
data = json.loads(rv.data)
|
||||
|
||||
@@ -755,7 +753,7 @@ class TestViews:
|
||||
|
||||
@patch('module_build_service.auth.get_user', return_value=other_user)
|
||||
def test_cancel_build_wrong_state(self, mocked_get_user):
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/30',
|
||||
rv = self.client.patch('/module-build-service/1/module-builds/6',
|
||||
data=json.dumps({'state': 'some_state'}))
|
||||
data = json.loads(rv.data)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user