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"
예제 #2
0
 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"
예제 #3
0
    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()
예제 #4
0
 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"
예제 #5
0
 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"
예제 #6
0
 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")
예제 #7
0
 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
예제 #8
0
    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)
예제 #9
0
 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"
예제 #10
0
    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"),
        )
예제 #11
0
    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"
예제 #13
0
    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"]
예제 #14
0
    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"
예제 #15
0
    def setup_method(self, test_method):
        scheduler_init_data()

        self.config = conf
        self.session = mock.Mock()
예제 #16
0
 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
예제 #17
0
 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"
예제 #18
0
 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"