def test_get_rpm_release_metadata_br_stream_override(mock_admmn): """ Test that when a module buildrequires a module in conf.allowed_privileged_module_names, and that module has the xmd.mbs.disttag_marking field set, it should influence the disttag. """ scheduler_init_data(1) metadata_mmd = load_mmd(read_staged_data("build_metadata_module")) import_mmd(db_session, metadata_mmd) build_one = models.ModuleBuild.get_by_id(db_session, 2) mmd = build_one.mmd() deps = mmd.get_dependencies()[0] deps.add_buildtime_stream("build", "product1.2") xmd = mmd.get_xmd() xmd["mbs"]["buildrequires"]["build"] = { "filtered_rpms": [], "ref": "virtual", "stream": "product1.2", "version": "1", "context": "00000000", } mmd.set_xmd(xmd) build_one.modulemd = mmd_to_str(mmd) db_session.add(build_one) db_session.commit() release = utils.get_rpm_release(db_session, build_one) assert release == "module+product12+2+814cfa39"
def test_route_components_build_task_finalize_task_without_a_module(self, send_task_message): scheduler_init_data() components.build_task_finalize.delay( "fakemsg", 123456, 1, "hostname", "0.1", "1.module+f28+2+814cfa39") queue = send_task_message.call_args[1].get("queue") qname = queue.__dict__.get("name") assert qname == "mbs-default"
def test_a_single_match_finalize(self, connect, build_fn, get_session, ready, list_tasks_fn, mock_gabt, mock_uea, finalizer): """ Test that when a repo msg hits us and we have a single match. """ scheduler_init_data(tangerine_state=1) get_session.return_value = mock.Mock(), "development" build_fn.return_value = 1234, 1, "", None # Ensure the time_completed is None, so we can test it is set to # some date once the build is finalized. module_build = module_build_service.common.models.ModuleBuild.get_by_id( db_session, 2) module_build.time_completed = None db_session.commit() def mocked_finalizer(succeeded=None): # Check that the time_completed is set in the time when # finalizer is called. assert succeeded is True module_build = module_build_service.common.models.ModuleBuild.get_by_id( db_session, 2) assert module_build.time_completed is not None finalizer.side_effect = mocked_finalizer module_build_service.scheduler.handlers.repos.done( msg_id="some_msg_id", tag_name="module-testmodule-master-20170109091357-7c29193d-build") finalizer.assert_called_once()
def test_route_components_build_task_finalize_task(self, send_task_message): scheduler_init_data() components.build_task_finalize.delay( "fakemsg", 90276228, 1, "perl-Tangerine", "0.23", "1.module+f28+2+814cfa39") queue = send_task_message.call_args[1].get("queue") qname = queue.__dict__.get("name") assert qname == "mbs-2"
def test_route_tags_tagged_task(self, send_task_message): scheduler_init_data() tags.tagged.delay( "fakemsg", "module-testmodule-master-20170109091357-7c29193d-build", "perl-Tangerine-0.23-1.module+f28+2+814cfa39") queue = send_task_message.call_args[1].get("queue") qname = queue.__dict__.get("name") assert qname == "mbs-2"
def test_no_match(self, get_by_tag): """ Test that when a repo msg hits us and we have no match, that we do nothing gracefully. """ scheduler_init_data() get_by_tag.return_value = None module_build_service.scheduler.handlers.repos.done( msg_id="no matches for this...", tag_name="2016-some-nonexistent-build")
def test_get_prefixed_version_fl701(self): scheduler_init_data(1) build_one = models.ModuleBuild.get_by_id(db_session, 2) mmd = build_one.mmd() xmd = mmd.get_xmd() xmd["mbs"]["buildrequires"]["platform"]["stream"] = "fl7.0.1-beta" mmd.set_xmd(xmd) v = get_prefixed_version(mmd) assert v == 7000120180205135154
def test_record_module_build_arches(self, get_build_arches): get_build_arches.return_value = ["x86_64", "i686"] scheduler_init_data(1) build = models.ModuleBuild.get_by_id(db_session, 2) build.arches = [] record_module_build_arches(build.mmd(), build) arches = {arch.name for arch in build.arches} assert arches == set(get_build_arches.return_value) # Ensure the function is idempotent record_module_build_arches(build.mmd(), build) assert len(build.arches) == len(get_build_arches.return_value)
def test_route_greenwave_decision_update_task(self, kojisession, send_task_message): kojisession.return_value.getBuild.return_value = { "extra": {"typeinfo": {"module": {"module_build_service_id": 1}}} } scheduler_init_data() greenwave.decision_update.delay( "fakemsg", decision_context="test_dec_context", subject_identifier="module-testmodule-master-20170109091357-7c29193d-build", policies_satisfied=False ) queue = send_task_message.call_args[1].get("queue") qname = queue.__dict__.get("name") assert qname == "mbs-1"
def test_a_single_match(self, connect, build_fn, get_session, ready, list_tasks_fn, mock_gabt, mock_uea): """ 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 module_build_service.scheduler.handlers.repos.done( msg_id="some_msg_id", tag_name="module-testmodule-master-20170109091357-7c29193d-build") build_fn.assert_called_once_with( artifact_name="tangerine", source=("https://src.fedoraproject.org/rpms/tangerine?" "#fbed359411a1baa08d4a88e0d12d426fbf8f602c"), )
def test_failed_component_build(self, dbg, connect, build_fn, config, ready, list_tasks_fn): """ Test that when a KojiModuleBuilder.build fails, the build is marked as failed with proper state_reason. """ scheduler_init_data(3) config.return_value = mock.Mock(), "development" build_fn.return_value = None, 4, "Failed to submit artifact x to Koji", None module_build_service.scheduler.handlers.repos.done( msg_id="some_msg_id", tag_name="module-testmodule-master-20170109091357-7c29193d-build") module_build = module_build_service.common.models.ModuleBuild.get_by_id( db_session, 2) assert module_build.state == module_build_service.common.models.BUILD_STATES[ "failed"]
def test_get_rpm_release_platform_stream_override(): scheduler_init_data(1) # Set the disttag_marking override on the platform platform = (db_session.query(models.ModuleBuild).filter_by( name="platform", stream="f28").first()) platform_mmd = platform.mmd() platform_xmd = platform_mmd.get_xmd() platform_xmd["mbs"]["disttag_marking"] = "fedora28" platform_mmd.set_xmd(platform_xmd) platform.modulemd = mmd_to_str(platform_mmd) db_session.add(platform) db_session.commit() build_one = models.ModuleBuild.get_by_id(db_session, 2) release = utils.get_rpm_release(db_session, build_one) assert release == "module+fedora28+2+814cfa39"
def test_erroneous_regen_repo_received(self, mock_log_info): """ Test that when an unexpected KojiRepoRegen message is received, the module doesn't complete or go to the next build batch. """ scheduler_init_data(1) component_build = db_session.query(ComponentBuild).filter_by( package="tangerine").one() component_build.tagged = False db_session.commit() module_build_service.scheduler.handlers.repos.done( msg_id="some_msg_id", tag_name="module-testmodule-master-20170109091357-7c29193d-build") mock_log_info.assert_called_with( "Ignoring repo regen, because not all components are tagged.") module_build = module_build_service.common.models.ModuleBuild.get_by_id( db_session, 2) # Make sure the module build didn't transition since all the components weren't tagged assert module_build.state == module_build_service.common.models.BUILD_STATES[ "build"]
def test_a_single_match_build_fail(self, connect, build_fn, config, ready, list_tasks_fn, mock_gabt, mock_uea): """ 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 module_build_service.scheduler.handlers.repos.done( msg_id="some_msg_id", tag_name="module-testmodule-master-20170109091357-7c29193d-build") build_fn.assert_called_once_with( artifact_name="tangerine", source=("https://src.fedoraproject.org/rpms/tangerine?" "#fbed359411a1baa08d4a88e0d12d426fbf8f602c"), ) component_build = db_session.query( module_build_service.common.models.ComponentBuild).filter_by( package="tangerine").one() assert component_build.state_reason == "Failed to submit artifact tangerine to Koji"
def setup_method(self, test_method): scheduler_init_data() self.config = conf self.session = mock.Mock()
def test_get_prefixed_version_f28(self): scheduler_init_data(1) build_one = models.ModuleBuild.get_by_id(db_session, 2) v = get_prefixed_version(build_one.mmd()) assert v == 2820180205135154
def test_route_repos_done_task_without_a_module(self, send_task_message): scheduler_init_data() repos.done.delay("fakemsg", "no-module-build-exist") queue = send_task_message.call_args[1].get("queue") qname = queue.__dict__.get("name") assert qname == "mbs-default"
def test_route_repos_done_task(self, send_task_message): scheduler_init_data() repos.done.delay("fakemsg", "module-testmodule-master-20170109091357-7c29193d-build") queue = send_task_message.call_args[1].get("queue") qname = queue.__dict__.get("name") assert qname == "mbs-2"
def test_get_rpm_release_platform_stream_scratch(): scheduler_init_data(1, scratch=True) build_one = models.ModuleBuild.get_by_id(db_session, 2) release = utils.get_rpm_release(db_session, build_one) assert release == "scrmod+f28+2+814cfa39"